Arduino Kettenfahrzeug

20151217_214035Um ein wenig die Weihnachtszeit rum zu kriegen, habe ich mir gedacht da muss ich mal wieder etwas basteln. Nach ein wenig stöbern in Thingiverse.com habe ich mich entschlossen eine Art Kettenfahrzeug zu basteln. Ich habe mich dann für den ProtoTank entschlossen und habe dafür den 20151214_23224520151217_23193520151221_1730093D Drucker angeworfen und ein wenig gedruckt.

Beim zusammenbau der Ketten habe ich festgestellt das die Glieder sehr stram waren und ich nicht die 32 Glieder pro Kette nicht ganz zusammen bekommen habe. Also da ich es eh in PLA gedruckt habe, habe ich einfach ein Topf mit Wasser auf den Herd gestellt und es zum kochen gebracht. Dann habe ich die Kette in das Heiße wasser kurz gehalten und konnte die Kette dann etwas längen so das ich die Kette ohne Probleme geschlossen gekommen habe.

Als Verbindung für die einzelnen Glieder habe ich einfach Nägel genommen die ich entsprechend gekrüzt habe.

Ich habe dann noch ein altes 16×2 LCD Display (via I2C angeschlossen zum überprüfen des Statuses), ein kleines Breadboard, Arduino Nano, Power Suply Modul (feste 5V Spannung und einen Schalter zum Ein/Aus schalten) montiert. Motoren, Motorkontroller habe ich bei Banggood bestellt. Leider haben die mir nach 12 Tagen mitgeteilt das einige Sachen nicht Lieferbar waren und damit sich die ganze Geschichte vermutlich auf nächstes Jahr verzögern wird. Der Ultraschallsensor ist ein HC-SR04 und bekommt das kleine Gehäuse auf dem 4ten Bild im Wall-E Style der dann auf einem SG90 Servo sitzen wird.

Die Idee ist 4 unterschiedliche Fahrmodi zu haben:

  1. Steuern wie ein Ferngestuertes Auto -> Gas nach vorne treibt beide Ketten gleichmässig an und wenn dabei Seitlich gesteuert wird soll er entsprechend eine Kette beschleunigen und die andere abbremsen.
  2. Steuern wie ein Panzer also Linker Stick linke Kette – rechter Stick rechte Kette
  3.  Automatik Modus zum selbständigen fahren und Navigieren mittels Utraschall Sensor
  4.  Steuerung über Bluetooth via Android APP

Das ganze muss natürlich Programiert und getestet werden. Anfangs habe ich jeden Code immer aufgespielt und via LCD bzw serieller Ausgabe überwacht und angepasst. Dann bin ich auf 123d.circuits.io gestossen wo man eine  Schaltung aufbauen kann und dann den Arduino Code auch nutzen kann zum testen. Leider unterstützt die Platform aber keine Ultraschallsensor oder zb den RC Empfänger. Aber grundlegende Funktionen kann man dort gut Programieren um sie später als Code zu implementieren.

circuit

 

Als Grundaufbau für die Fahrrichtung Programierung schon ganz nützlich. Die RC Werte habe ich einfach Simuliert und habe sie über die Seriele Schnittstelle eingespeist.

Da ich 3 Kanäle Empfangen will und nur 2 Interupt Ports habe, habe ich einfach die beiden Steuerungs Kanäle auf die Interupts gelegt. Diese sind beim Arduino fast immer D2 und D3 (entspricht Int0 und Int1) <– einfach google benutzen. Den dritten Kanal werde ich einfach immer nach einer Motor Anweisung auslesen lassen. Ein kanal in der Hauptfunktion abzufragen dauert auf jedenfall nicht so lange wie 3 Kanäle abzufragen. Vorteil der Interupt Geschichte ist, die Eingänge springen auf einen seperaten Codeblock über und nach beendigung springt er zurück an die Schleifenposition die er vorher für den Interupt verlassen hat. Da ich dieses nur bei einer Änderung abfragen muss ist die ganze Geschichte schneller für den Codeablauf.

Als erstes musste ich die RC Inputwerte umrechnen. Throttle (Gas) Stick auf mittelstellung entspricht einem Wert von 1500. Vollgas = 2000 und Vollgas Rückwärts = 1000.

Damit lässt sich nicht schön Programieren also habe ich das einfach mal in Prozente umgerechnet.

Auf den Bildern sind noch einige LED´s zu erkennen.

  • Grün = Vorwärts
  • Rot = Rückwärts
  • Blau = PWM Impulse ausgabe (wenn der Enable Pin getriggert wird)

circuitrun

circuitrun2

Hier zb habe ich die gesendeten Tasten  mal mit in die seriele Ausgabe gepackt dann kann man es etwas besser erkennnen.

Im zweiten Teil erkennt man zb das ich nach einem Vorwärtsbefehl zwei Befehle nach links gegeben habe. Seitliche Bewegungen werden immer auf beide Ketten umgesetzt sofern das möglich ist. So Wurde die Linke Kette erst gestoppt (0%) und die rechte Kette beschleunigt (20%). Darauf wurde die Drehrichtung der linken Kette umgekehrt und wieder auf 10% beschleunigt und die rechte Kette auf 30% beschleunigt. Die Prozentzahlen entsprechend des Ausschlages von den Kanälen und werden dann nur auf byte umgerechnet so das 100% Ausschlag einen Wert von 255 entspricht.
RIGHTCHAIN: 30.00 76 —> 30% = 76 byte

20151227_104024 20151227_104029 20151227_104053

Kurzer Hand habe ich noch ein Bluetooth Modul dazu gesteckt und kann nun die Serielle Verbindung auch vom SmartPhone, Tablet und vom PC aufbauen. Ich habe auch eine OpenSourceCode für eine Android App gefunden die ich einfach für mich angepasst habe und um die Modischalter erweitert habe. Jetzt gibt es auch noch ein Mode 4 der im Prinzip der  Mode 1 ist und nur die RC Signale ignoriert. Mal schaun ob ich mich noch etwas in Anndroid App Programierung stürzen werde und eine komplett eigene APP schreiben werden. Momentan ist zb der Bluetoothname Hardcoded.

Den Arduino Code und den Link zu der Schaltung folgt später.