Ach ja nur um das klar zu stellen mir stehen alle Ports des RP6 zur Verfügung. Die Fernsteuerung werde Ich mir auch erst besorgen wenn ich weiß wie das Alles funktioniert und ein Programm habe.
Hallo alle zusasmmen!
Nachdem ich bereits 2 Projekte erfolgreich vollendet habe, wollte ich jetzt etwas "Neues" anfangen. Ich weiß, dass zu dem Thema Fernsteuerungen + RP6 schon ein paar Themen existieren aber Ich konnte daraus nicht schlau werden. Mein Ziel ist es mit der 4-Kanal Fernsteueranlage von Conrad (Best.-Nr. : 2331736M) Funksignale zu senden und mit dem RP6 zu empfangen und und ihn darauf reagieren zu lassen. Was Ich wissen muss:
1. Wo muss Ich welchen Pin anschließen? ( Ich benötige erstmal nur 2 Kanäle.)
2. Wie kann ich das Empfängersignal mit dem RP6 auswerten? (Software)
3. Habt ihr bessere Vorschläge welche Fernbedienung gut ist ?
http://www.conrad.de/ce/de/product/2...HOP_AREA_19785 < Das ist der Link zu den wichtigsten Daten und Downloaddokus.
Vielen Dank!
Nichts existiert durch sich allein!
Bild hier
Ach ja nur um das klar zu stellen mir stehen alle Ports des RP6 zur Verfügung. Die Fernsteuerung werde Ich mir auch erst besorgen wenn ich weiß wie das Alles funktioniert und ein Programm habe.
Was willst du mit der Fernsteuerung alles fernsteuern? Und reicht es dir nicht aus, dass du über IRComm mit einer RC5 Fernbedienung (Radio, Fernseher,etc...) den RP6 steuern kannst?
@ roboter14 die RC5 Fernbedienung kannst du nur bei Sichtkontakt benutzen und ausserdem nur auf geringe distanz über funk kann man ihn viel weiter fernsteuern
LG
martin
@Mc Delta!
Um den Empfänger mit den Ports zu verbinden, brauchst du erst einmal ein Kabel (z.B. vom großen C).Anschlussbelegung siehe hier. "Signal Puls" dann mit einem Eingangs-Port verbinden. Signale sind wie hier. Dein Robby wird dann wie ein Servo behandelt - abhängig von der Signallänge könntest du dann die Geschwindigkeit sowie den Radius steuern.
karmic_koala
Hi
Ich habe mir überlegt, dass man die Kanalausgänge an die beiden ADCs dranmacht und dann nur die Verschiedenen Eingangsspannungen auswertet. Allerdings bräuchte ich da sone art durchschnittswert funktion, damit die Schwankungen je Messung nicht so extrem sind und man mit den Werten was anfangen kann.
Gingen eigentlich aucch die Ports SDA und SCL und wie könnte ich dann das Eingangsignal auswerten?
Danke!
Nichts existiert durch sich allein!
Bild hier
Gibt es eventuell eine Funktion in der lib mit der man überprüfen kann ob SCL und SDA (als Eingänge) high oder low sind?
Nichts existiert durch sich allein!
Bild hier
Hi McDelta,
ich habe auf YouTube ein Video entdeckt (von radbruch) :http://www.youtube.com/watch?v=A_GYUeFAgY8
Kannst dazu auch mal radbruch eine PN schreiben wie er das gemacht hat.
Hier der Originaltext von ihm:
Anstelle der Linie kann man ja erst mal softwaremässig eine Route vorgeben nach der die Steine gesetzt werden. Oder man steuert den RP6 mit einer Modelbaufernbedienung:
http://www.youtube.com/watch?v=lwq3RZguby0
Blöderweise klemmt grad mal wieder der linke Antrieb, er fährt nicht zurück. Aber das hatte er schon immer. Ich mache noch ein schöneres Video, wenn er wieder richtig läuft.
Das Auswerten der RC-Signale ist unglaublich einfach. Ich verwende dazu die selbe ISR wie beim Ansteuern der Servos (beides zusammen funktioniert übrigens auch prima). Wenn man die Aufrufe der ISR bei gesetztem RC-Eingangspin zählt, erhält man Werte die denen der Servosteuerung entsprechen. Der RP6 kann so sogar seine eigenen Servoimpulse zählen:
Code:// RC-RP6 erster Versuch 18.11.07 mic
#include "rblib.h"
#include "rblib.c"
uint8_t y, z;
uint8_t rc_input_pwr, rc_input_dir;
uint8_t rc_pwr, rc_dir;
ISR(TIMER0_COMP_vect)
{
//static uint16_t count=0;
static uint16_t rc_temp_pwr=0;
static uint16_t rc_temp_dir=0;
//if(count>x) PORTA &= ~16; else PORTA |= 16; // E_INT1 (Pin
//if(count>y) PORTC &= ~1; else PORTC |= 1; // SCL (Pin10)
//if(count>z) PORTC &= ~2; else PORTC |= 2; // SDA (Pin12)
//if(count<1000)count++; else count=0;
if (PINC & 1) rc_temp_dir++; else
if (rc_temp_dir) { rc_input_dir=rc_temp_dir-1; rc_temp_dir=0; }
if (PINC & 2) rc_temp_pwr++; else
if (rc_temp_pwr) { rc_input_pwr=rc_temp_pwr-1; rc_temp_pwr=0; }
}
void servo_init(void)
{
//DDRA |= 16; // E_INT1 als Ausgang
//DDRC |= 3; // SCL und SDA als Ausgang
TCCR0 = (0 << WGM00) | (1 << WGM01); // CTC-Mode
TCCR0 |= (0 << COM00) | (0 << COM01); // ohne OCR-Pin
TCCR0 |= (0 << CS02) | (1 << CS01) | (0 << CS00); // prescaler /8
TIMSK = (1 << OCIE0); // Interrupt ein
OCR0 = 9; // 100kHz?
}
int main(void)
{
rblib_init();
servo_init();
setLEDs(0b1001);
setMotorDir(FWD,FWD);
setMotorPWM(0,0);
while(1)
{
rc_pwr=0;
rc_dir=0;
if (rc_input_dir<120) { rc_dir=150-rc_input_dir; setMotorDir(BWD,FWD); }
if (rc_input_dir>140) { rc_dir=rc_input_dir-110; setMotorDir(FWD,BWD); }
if (rc_input_pwr<120) { rc_pwr=150-rc_input_pwr; setMotorDir(FWD,FWD); }
if (rc_input_pwr>140) { rc_pwr=rc_input_pwr-110; setMotorDir(BWD,BWD); }
rc_pwr*=3;
if (rc_pwr)
{
if (rc_input_dir<120) setMotorPWM(rc_pwr-rc_dir,rc_pwr+rc_dir);
else if (rc_input_dir>140) setMotorPWM(rc_pwr+rc_dir,rc_pwr-rc_dir);
else setMotorPWM(rc_pwr,rc_pwr);
}
else
{
setMotorPWM(rc_dir*3, rc_dir*3);
}
}
return 0;
}
Beeper:BeeppipBeeeppiep
Vogel:BeeppipBeeeppiep
Hallo
Bitte, bitte, bitte keine PNs an mich! Persönliche Beratung lehne ich grundsätzlich ab.
Inzwischen verwende ich bei Servoansteuerung mit geringer Auflösung die Timer1-Overflow-ISR. Sie wird von der Lib nicht genutzt und steht damit zur freien Verfügung:
Bild hier
http://www.youtube.com/watch?v=fGHDkUlJuh0
Libverträglich und mit wenig Aufwand einzubauen.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
könnte man nicht einfach ein RC Auto ausschlachten?
Lesezeichen