• Die Forumsregeln und Nutzungsbedingungen findet ihr in der Navbar unter Impressum !
    Bitte unbedingt beachten!
    Wie überall im Leben gibt es Spielregeln, so auch hier!
    Die Datenschutzerklärung zum DSGVO findet ihr ebenfalls in der Navbar unter Datenschutzerklärung !
    Hinweis nach DSGVO :
    Es ist hier keinerlei Angabe erforderlich. Alle Angaben in diesem Bereich sind öffentlich sichtbar und werden freiwillig gemacht. Mit einem Eintrag in diesem Bereich erkenne ich dieses an, und bestätige die Datenschutzerklärung zur DSGVO für das Forum gelesen zu haben.

    Danke
  • Hallo Gast, beschränke dich hier bitte auf den Bereich der Elektronik. Die Fahrzeuge oder Gebäude, wo diese Elektronik eingebaut wird bitte in dem passenden Fachbereiich behandeln. Auch wenn Teile des Projektes dadurch im Forum doppelt vorhanden sind! Danke.

Arduino Fahrzeuge mittels Arduino ferngesteuert ein- oder ausschalten

DO1XXY

New member
Registriert
12.04.2013
Beiträge
579
Dieser Sketch (Programm) ermöglicht es mehrere Fahrzeuge über eine Fernsteuerung zu aktivieren bzw. zu deaktivieren. Bei einem Fahrzeugwechsel muss nicht mehr das abzustellende Fahrzeug aus- und ein anderes per Hand eingeschaltet werden.
Fahrzeuge die so aktiviert bzw. deaktiviert werden sollen, müssen dazu mit einem Arduino Controller ausgestattet werden. Dafür reicht der kleinste Controller aus der Palette der Arduino Controller, der Arduino Mini Pro. Ein Eingriff in die Fernsteuerung ist nicht erforderlich.

Bei dem Wechsel des Fahrzeuges ist darauf zu achten dass der Wechsel im Modellspeicher der Fernsteuerung ebenfalls durchgeführt wird. Das erledigt der Arduino natürlich nicht.

Das Prinzip:
Der Controller wird an einem freien Kanal des Empfängers angeschlossen. Das vom Sender kommende Signal wird über den Empfänger an den Arduino Controller weitergegeben. Der Controller besitzt mehrere Ausgänge, an dem für das angewählte Fahrzeug entsprechende Relais angeschlossen wird.

An der Fernsteuerung wird über einen Kanal mit dem Stick oder einem Schalter bei jeder Betätigung ein Impuls (über den Empfänger) an einen für den Zählvorgang bestimmten Eingang des Arduino gesendet. Der Sketch beinhaltet einen Zähler mit einer Schrittweite von „1“. Wird der Knüppel einmal betätigt, steht der Zähler auf „1“, beim zweiten Betätigen auf „2“ usw. Jedem Wert ist ein entsprechender Ausgang am Arduino Controller zugeordnet. Der gerade anstehende Zählerstand schaltet den zugeordneten Ausgang aktiv (HIGH) und ermöglicht so die Freigabe des Fahrzeuges. Die restlichen Ausgänge liegen auf LOW und steuern somit kein Relais an.

Das hat den Vorteil dass grundsätzlich nur ein Ausgang aktiv ist, somit auch nur ein Fahrzeug angesteuert wird.
Um den Zählimpuls über den Empfänger an den Arduino weiterzugeben wird ein halber Ka-nal (ohne Reset) oder ein ganzer Kanal (mit Reset) benötigt. Reset bedeutet dass der Zähler direkt auf „0“ gesetzt wird, und damit alle Ausgänge des Arduino deaktiviert sind. Im vorge-stellten Sketch wird die Reset-Funktion genutzt.

Alternativ zum Reset kann der Sketch dahingehend umgeschrieben werden, dass der Zähler rückwärts zählt. Das kann bei einer größeren Anzahl auszuwählender Fahrzeuge/Funktionen sinnvoller sein als ein Reset.

Die Ausgänge des Arduino Controller dürfen je Ausgang nur mit 40mA* belastet werden. Das reicht für Relais mit 2A Schaltleistung, z.B. das NA 05W K von Reichelt. Es besitzt einen Spu-lenwiderstand von 178 Ohm. Bei einer Spannung von 5V zieht das Relais 28mA. Werden zwei Relais angeschlossen, beträgt der Strom 56mA, zuviel für den maximal Ausgangsstrom pro Kana . Entweder wird ein Treiber nachgeschaltet (Optokoppler und/oder Schalttranistoren), oder es werden in einem Kanal zwei Ausgänge als HIGH definiert. Das verringert allerdings die Anzahl der adressierbaren Fahrzeuge, da der in einer Kanalgruppe zusätzlich belegte Kanal in der darauf folgenden Kanalgruppe nicht mehr verwendet werden darf.

Treiberschaltung mit Optokoppler für den Anschluss an einem Arduino Ausgang (5V).

Hier sollte eigentlich das Bild der Schaltung stehen, aber ich bekomme es nicht hochgeladen - Textattribute kann ich ebenfalls nicht bestimmen. Wer den Schaltplan haben möchte, dem sende ich ihn gerne per PN zu.

Der Ausgang des Arduino und der nachfolgende Treiber, bestehend aus dem Transistor z. B. BC141, sind durch den Optokoppler* galvanisch** getrennt. Die Stromversorgung des Ardu-ino erfolgt über BEC aus dem Fahrregler, weswegen dieser nicht über das Relais geschaltet werden darf. Das Gleiche gilt für die Treiberschaltung, dessen Plus- und Minus (GND) An-schlüsse parallel zum Fahrregler angeschlossen werden müssen.

• * Ein Optokoppler besteht aus einer LED und einer Fotodiode in einem Gehäuse. Wird die LED angesteuert, also zum Leuchten gebracht, wird die Fotodiode leitend und es kann Strom durch die Fotodiode fließen.

• ** Der Arduino Controller (max. 5V Betriebsspannung) ist von direkten Spannung (7,2 bis 12V) vom Akku getrennt. Das erhöht die Betriebssicherheit.

Auf den Einsatz des Optokoppler kann auch verzichtet werden, und stattdessen die Basis des Transistors über einen 1KOhm Widerstand direkt am entsprechenden D.. Ausgang des Ardu-ino angeschlossen werden.
An den Ausgängen des Arduino werden Relais mit der Schaltfunktion 2 X EIN oder 2 X UM angeschlossen. Mit dem Relais Rel1 wird 2polig die Stromversorgung für die Verbraucher abgeschaltet.

Das Relais Rel2 (im gestrichelten Kasten) ist nicht unbedingt erforderlich. Ich nutze einen Kontakt um mit Hilfe einer LED (in den Fahrzeugen) anzuzeigen ob das Fahrzeug aktiviert ist. Der 2. Kontakt unterbricht die Signalleitung zum Fahrregler, damit das deaktivierte Fahrzeug nicht rollt (da am Fahrregler der Strom nicht gekappt werden darf). Bei Reglern mit Tempo-mat, wie Servonaut M20+ und E20) muss zwingend die Stromversorgung des Motors unter-brochen werden. Das Trennen der Signalleitung hält das Fahrzeug nicht an, da der Tempo-mat die letzte Einstellung beibehält und ggf. das Fahrzeug weiterfahren lässt.

Zu dem Sketch (Programm)
/* Fahrzeuganwahl für 3 Fahrzeuge oder Funktionen © A. Fendel */
int out1 = 2; // zuweisen von out1 aud Pin D2 des Arduinos
int out2 = 3; // zuweisen von out2 aud Pin D3 des Arduinos
int out3 = 4; // zuweisen von out6 aud Pin D7 des Arduinos
int led=1000; //Verzögerung zwischen den Eingabeimpulsen
int RCin = 12; // weist Pin 12 als Eingang des vom Empfänger kommenden Signal zu
int a=1; // Wert für die Variable a

byte rcsignal = 75;
unsigned long duration;
void setup()
{
pinMode(out1, OUTPUT);
pinMode(out2, OUTPUT);
pinMode(out3, OUTPUT);
pinMode(RCin, INPUT);
}
void loop() // Hauptschleife - Auswertung des Signales vom Empfänger
{
duration = pulseIn(RCin, HIGH, 20000);
rcsignal = map(duration, 1090, 1929, 0, 150);

if(rcsignal > 120) // ist das Signal länger als 120ms gehe zur Zählerschleife (count)
{
count();
}
if(rcsignal < 30) // ist das Signal kleiner 30ms gehe zur Resetschleife (reset)
{
reset();
}
}
void count() // Unterprogramm - Zählerschleife und Verzweigung auf die Kanäle 1 bis 6
{
a=a+1;
if (a==1)// wenn a= 1 gehe zu Kanal 1
{
kanal1();
}
if (a==2)// wenn a= 2 gehe zu Kanal 2
{
kanal2();
}

if (a==3)// wenn a= 3 gehe zu Kanal 3
{
kanal3();
}
if (a==4)// wenn a= 4 gehe zu RESET
a=0;
{
setup();
}
}
void kanal1()
digitalWrite(out1, HIGH);
digitalWrite(out2, LOW);
digitalWrite(out3, LOW);
delay(led);
}
void kanal2()
digitalWrite(out1, LOW);
digitalWrite(out2, HIGH);
digitalWrite(out3, LOW);
delay(led);
}
void kanal3()
digitalWrite(out1, LOW);
digitalWrite(out2, LOW);
digitalWrite(out3, HIGH); // Relais 1
delay(led);
}
void reset()
{
digitalWrite(out1, LOW);
digitalWrite(out2, LOW);
digitalWrite(out3, LOW);
a=0;
}

Dieser Sketch ist für 3 Fahrzeuge ausgelegt, kann aber erweitert bzw. verkleinert werden. Wie viele Fahrzeuge damit selektiert werden können, wird durch die Anzahl der Ausgänge des verwendeten Arduino begrenzt. Die tatsächliche Anzahl wird letztendlich dadurch vorge-ben, dass im Sketch der maximale Zählerstand festgesetzt wird. Wenn nur drei Fahrzeuge vorhanden sind, wird der Zähler im Sketch so gesetzt, dass er nach der „3“ zurück auf „0“ springt.

Sollen die Fahrzeuge in der aufzurufenden Reihenfolge gewechselt werden, ist kein Umlöten an den Anschlüssen des Arduino für die Änderung der Zuordnung der jeweiligen Fahrzeuge erforderlich. Der Wechsel erfolgt durch die Software, in diesem Fall eine Änderung der Zu-ordnung von HIGH/LOW für die einzelnen Kanäle.

Alternativ lässt sich eine Fahrzeugselektion mit dem CTI Modellschalter 7x1 realisieren, der eine deutlich kleinere Bauform hat. Allerdings ist dieser teuer als die hier vorgestellte Lö-sung, ist auf 7 Fahrzeuge begrenzt und nicht flexibel. Bei der Lösung mittels Arduino lassen sich zusätzliche Funktionen über die maximale Anzahl der Kanäle schalten. Die von mir ver-wendeten Arduino Mini Pro und Arduino Nano V3 besitzen 12 digitale Ein/Ausgänge, von denen 5 auch Servos direkt ansteuern können, und 4(Mini)/8(Nano) analoge Anschlüsse. Diese können in die Modellauswahl eingebunden werden.

Der Sketch lässt sich noch feintunen, ist aber in seiner jetzigen Form voll funktionsfähig. Ich werde mich freuen wenn statt Kritik oder Vorschläge, getreu dem Motto besser machen statt meckern, der Sketch in verbesserter Form veröffentlicht wird.

Armin de DO1XXY
 
Hallo Armin
Danke für die Bereitstellung der Sourcen. Werde es an meinem Uno testen und dann schauen, wie ich es in meine Modellen umsetzen kann. Da ich schon länger ein System zum Umschalten zwischen den Modellen suche, bietet sich deine Variante an. :thx
Danke
lg
helmut
 
Hallo Helmut,

den Sketch habe ich auf einem Mega 2560 geschrieben, dann auf einem Nano getestet. Der Größe wegen habe ich dann über ein Uno Board den Sketch auf einen Mini Pro aufgespielt. Der Sketch läuft auf allen Boards. Da die Mini Pro so klein sind, baue ich sie in alle meine Modelle ein.

Die Relais von Reichelt sind sehr klein, können bis zu 2A schalten und kosten ca. 90 Cent.

Viel Spaß beim Bauen.

P.S.: bevor ich es vergesse: die Versorgungsspannung des Arduino darf nicht unter 4,85 V fallen, sonst geht er auf Null. Bei meinem Radlader habe ich deswegen einen Mini Pro für 3,3V in Betrieb.
 
Hallo
Sorry, das ich mich jetzt erst melde. Das Thema ist nicht eingeschlafen, wurde aber ein bisschen nach hinten geschoben.
Danke auf jeden Fall für die Info. :)
lg
Helmut
 

Servonaut
Zurück
Oben Unten