RC Steuerung und Arduino: A Complete Works (9 / 10 schritt)

Schritt 9: Tank Lenkung W/kontinuierliche Rotation Servos


Dieser letzte Schritt ist der Höhepunkt aller bisherigen Themen und meinen Tank Steuern Code. Ich habe den Code, um nur den rechten Daumen-Stick des Senders verwenden, um dann zwei CR-Servos Steuern Steuern Tank. Denken Sie daran, dass sich meine TX Modus 3 und ich habe keine Kanäle vertauscht. Den rechten Analogstick ist 3 für die horizontale Achse und Kanal 4 für die vertikalen Achse. Im folgenden finden Sie meine Skizze mit einem Arduino UNO anstelle der MEGA. Ich verwende verschiedene Servo Grenzen, mit die einen Micro-Servo um volle 180 Grad und sie können anderen Bereich für Tank Lenkung mehr Sensibilität zu geben.

Achten Sie darauf, meine wunderbare Modell Sid (siehe oben Bild) Danke, dass ein guter Sport während ich ihn verwendet habe, um mein Programm zu verfeinern.

/ * Dies wird Skizze wird alle 8 Kanäle des RC-Empfängers zu lesen und die Eingabewerte über serielle Schnittstelle
überwachen. Programmiert für den Arduino Uno und Adafuit Servo-Treiber Board(pins A5-SCL and A4-SDA).
Meine Sender ist auch in Modus 3 eingestellt, also den rechten Analogstick wie folgt:
Vertikalen Achse = Kanal 3
Horixontal-Achse = Kanal 4
===========================================================================================*/
Mitgelieferten Bibliotheken
#include
#include

Aktivieren der Debug-Modus zur Eingabe von Daten über serielle Schnittstelle
/ * 0 = aus, 1 = Engineering Daten an, 2 = Raw Daten an, 3 = Servo Wert ausgegeben,
4 = Raw Ger & Servo Datenausgabe, 5 = Tank Steuern Datenausgabe, * /
const Int Debug = 0;

Arrays für Kanal-Pin-Positionen und Kanaldaten
const Int Kanäle = 8;
const Int ChPin [] = {2,3,4,5,6,7,8,9}; Pin-Positionen
Int ChEng [8]; Filialdaten massiert
Int ChSer [8]; Servo-Wert-Speicher

RX Signal massieren Werte
const Int RXLo = 920;
const Int RXHi = 1640;
const Int RXDeadLo = 1265;
const Int RXDeadHi = 1295;
const Int RXMid = 1280;

Servo-Bereiche
const Int SerLo = 130;
const Int SerMid = 330;
const Int SerHi = 530;
const Int TankLo = 250;
const Int TankHi = 410;

Servo-Ausgang
Adafruit_PWMServoDriver servo=Adafruit_PWMServoDriver(0x40);
const Int Freq = 50;
const Int SerNum = 8;
Int ch3; Tank-Steuern-variable
Int ch4; Tank-Steer-variable

Richten Sie Pin-Positionen ein, starten Sie serielle oder beginnen I2C
void setup() {}
Wenn (Debug > 0) {}
Serial.Begin(115200); Wir gehen PLAID!
}

Input-Pins:
für (Int ich = 0; ich pinMode(chPin[i],INPUT);
}

Servo.Begin();
servo.setPWMFreq(freq);
} //End Setup

Hauptfenster des Programms
void loop() {}
Werte von Chy an Chz, Chx, Chy, verschieben und neue Werte zu lesen
für (Int ich = 0; ich chEng[i]=pulseIn(chPin[i],HIGH);

Signal zu massieren
ChEng [i] = beschränken (ChEng [i], RXLo, RXHi); Unteren und oberen Ende trimmen
Wenn (ChEng [i] < = RXDeadHi & & ChEng [i] > = RXDeadLo) {//Create Dead-Band
ChEng [i] = RXMid;
}

Servo-Ausgang Eng Werte zuordnen
Wenn (ChEng [i] > = RXLo & & ChEng [i] < = RXDeadLo) {//Map unteren Wertebereich
ChSer [i] = Karte (ChEng [i], RXLo, RXDeadLo, SerLo, SerMid);
}
ElseIf (ChEng [i] == RXMid) {//Map Mittelwert
ChSer [i] = SerMid;
}
ElseIf (ChEng [i] > = RXDeadHi & & ChEng [i] < = RXHi) {//Map höhere Wertebereich
ChSer [i] = Karte (ChEng [i], RXDeadHi, RXHi, SerMid, SerHi);
}
} //End der For-Schleife

Tank-Steer mit rechten Analogstick, Outputing an zwei kontinuierliche Drehung servos
/ * Mit kartesischen Quadranten-System und jeder Wert für den passenden Motor umgekehrt ist
gewährleisten korrekte Bedienung * /

Ersten Quadranten.
/ * Flip-Bereich am rechten Servo in Bezug auf vertikale Achsenposition. So bleiben die
Servo-Set in der vertikalen Position verlassen und reduzieren die richtigen Servos speed.* /
Wenn (ChSer [2] > = SerMid & & ChSer [3] > = SerMid) {}
CH3 = ChSer [2];
CH4=Map(chSer[3],serMid,serHi,chSer[2],serMid);
}

Zweiten Quadranten
/ * Flip-Bereich am linken Servo in Bezug auf vertikalen Achsenposition. Dies ist nicht als
Straße nach vorne sollte als Quadrant 1 aber der folgende Beispielcode war ich vor mit
ähnlich aussehen.
CH3=Map(chSer[3],serLo,serMid,serMid,serHi);
servo.setPWM(2,0,map(ch3,serHi,serMid,chSer[2],serMid));
Wie kam ich mit den folgenden ist durch Vereinfachung und resources.* sparen /
ElseIf (ChSer [2] > SerMid & & ChSer [3] ch3=map(chSer[3],serLo,serMid,serMid,chSer[2]);
CH4 = ChSer [2];
}

Dritten Quadranten
/ * Flip-Bereich am rechten Servo in Bezug auf vertikalen Achsenposition. Die linke servo
weiterhin Reisen nach hinten, während das richtige Servo slowed.* ist /
ElseIf (ChSer [2] < = SerMid & & ChSer [3] < = SerMid) {}
CH3 = ChSer [2];
CH4=Map(chSer[3],serMid,serLo,chSer[2],serMid);
}

Vierten Quadranten
/ * Flip-Bereich am linken Servo in Bezug auf Vertivle Achslage, das richtige Servo
wird Continut Reisen nach hinten, während die linke Servo slowed.* ist /
sonst if(chSer[2]serMid) {}
CH4 = ChSer [2];
CH3=Map(chSer[3],serMid,serLo,chSer[2],serMid);
}

/ * CCW Drehung durch die Umkehrung richtig Servo und Weiterleitung linken Servo zu ermöglichen
die horizontale axis.* /
Wenn (ChSer [2] == SerMid & & ChSer [3] > = SerMid) {}
CH3 = ChSer [3];
CH4=Map(chSer[3],serMid,serHi,serMid,serLo);
}

/ * Rechtslauf durch Weiterleitung richtig Servo und Umkehr linken Servo zu ermöglichen
die horizontale axis.* /
Wenn (ChSer [2] == SerMid & & ChSer [3] < = SerMid) {}
CH3 = ChSer [3];
CH4=Map(chSer[3],serMid,serLo,serMid,serHi);
}

Remap Variablen geben bessere Empfindlichkeit und die volle Palette ist nicht gebraucht, um die volle Geschwindigkeit zu erreichen.
CH3=Map(CH3,serLo,serHi,tankLo,tankHi);
CH4=Map(CH4,serLo,serHi,tankLo,tankHi);

Rechten Seite Servo Signal, Kanal 4 Signal spiegeln.
Wenn (ch4 > = SerMid) {}
CH4=Map(CH4,serMid,serHi,serMid,serLo);
}
ElseIf (ch4 ch4=map(ch4,serMid,serLo,serMid,serHi);
}

Ausgabe auf Servo-Treiber
servo.setPWM(2,0,ch3);
servo.setPWM(3,0,ch4);

Debug-Ausgabe
Wenn (debug == 1 || Debuggen == 4) //Engineering Daten
{
Serial.Print ("EngData| CH1: ");
Serial.Print (chEng[0]);
Serial.Print ("| CH2: ");
Serial.Print (chEng[1]);
Serial.Print ("| CH3: ");
Serial.Print (chEng[2]);
Serial.Print ("| CH4: ");
Serial.Print (chEng[3]);
Serial.Print ("| Ch5: ");
Serial.Print (chEng[4]);
Serial.Print ("| CH6: ");
Serial.Print (chEng[5]);
Serial.Print ("| Ch7: ");
Serial.Print (chEng[6]);
Serial.Print ("| Ch8: ");
Serial.Print (chEng[7]);
Serial.println ("|");
}

Wenn (debug == 3 || Debuggen == 4)
{
Serial.Print ("SerData| CH1: ");
Serial.Print (chSer[0]);
Serial.Print ("| CH2: ");
Serial.Print (chSer[1]);
Serial.Print ("| CH3: ");
Serial.Print (chSer[2]);
Serial.Print ("| CH4: ");
Serial.Print (chSer[3]);
Serial.Print ("| Ch5: ");
Serial.Print (chSer[4]);
Serial.Print ("| CH6: ");
Serial.Print (chSer[5]);
Serial.Print ("| Ch7: ");
Serial.Print (chSer[6]);
Serial.Print ("| Ch8: ");
Serial.Print (chSer[7]);
Serial.println ("|");
}

Wenn (debug == 5) {}
Serial.Print(CH3);
Serial.Print("|");
Serial.println(CH4);
}
} //End des Hauptprogramms

Ich wusste, wie ich den Tank Lenkung ist alles andere als optimal, aber es ist wie ich es herausgefunden.  Der vierte Quadrant nicht funktioniert und ich habe noch zu arbeiten.  Es war nicht so groß ein Problem, da dies ein Beweis der Begriff Roboter im Umgang mit RC Steuerung und Arduino ist bevor ich Vollausschlag bewegen.

Lassen Sie mich wissen, wenn Sie Fragen haben und ich mein Bestes werde zu beantworten und entsprechend aktualisieren. Bitte geben Sie den Schritt und einige Details erklären, Ihr Problem zu mir auf der gleichen Seite mit Ihnen zu helfen.

In Verbindung stehende Artikel

OSD-Audio ATM-7-Smartphone-Lautsprecher-Steuerung mit Arduino und Blynk

OSD-Audio ATM-7-Smartphone-Lautsprecher-Steuerung mit Arduino und Blynk

Heutzutage gibt es mehrere Möglichkeiten, Multi-Zone-Sound mit Smartphone-basierte Steuerung zu implementieren, aber die meisten beschränken sich auf wenige Zonen oder erfordern teure proprietäre Boxen an jedem Ort (Hallo! Sonos). Ein Lautsprecher-Se
LED-Steuerung mit Arduino Bluetooth und Android. (Teil 1)

LED-Steuerung mit Arduino Bluetooth und Android. (Teil 1)

Diese instructable ist ein einfaches Tutorial Explaning, wie man eine LED mit Android Bluetooth zu steuern.Sie benötigen:Arduino UNOWiderstände 300Ω (3 X)Widerstand 150ΩLEDSpringer;Bluetooth-Modul (HC-06/andere);Android-Handy;SPP Bluetooth Apk (unver
Rote Farbe Anerkennung basierten Arduino-Steuerung (Verwendung von MATLAB und Arduino)

Rote Farbe Anerkennung basierten Arduino-Steuerung (Verwendung von MATLAB und Arduino)

In diesem Tutorial werden wir zeigen, wie Farberkennung verwenden, um jede Aktuator verbunden mit jedem digitalen Pin des Arduino Uno zu steuern, wir haben LED als ein Aktor angesehen, in diesem Tutorial die an Pin 13 des UNO angeschlossen ist. In di
Steuerung einer IR-Klimaanlage mit Android und Arduino

Steuerung einer IR-Klimaanlage mit Android und Arduino

Für mein erstes Arduino-Projekt habe ich beschlossen, meine Klimaanlage über das Internet mit Hilfe von Arduino und mein Android Handy zu steuern, wo ich Zugang zum Internet haben. Video ist in Spanisch, aber Sie bekommen, was ich bin vorführen.Schri
Google spielen Musik Internet Radio (Raspberry Pi und Arduino)

Google spielen Musik Internet Radio (Raspberry Pi und Arduino)

war auf der Suche für ein Projekt mit meinem Raspberry Pi zu tun und diese Instructable gefunden und dachte ich hätte einen gehen auf etwas ähnliches mit Google Play Music. Ich hatte eine ungefähre Vorstellung von dem was ich, das letzte Element woll
Steuerung einen Arduino mit Kakao (Mac OS X) oder c# (Windows)

Steuerung einen Arduino mit Kakao (Mac OS X) oder c# (Windows)

Nein ich spreche nicht über die Steuerung eines Arduino mit einer Tafel Schokolade oder Kakaopulver. Ich spreche von der Programmiersprache Objective-C. Was ist Kakao? Kakao ist eine Reihe von Rahmenbedingungen für Mac OS X in der Programmiersprache
REGELGESCHWINDIGKEIT STEPPER MOTOR mit LABVIEW und ARDUINO

REGELGESCHWINDIGKEIT STEPPER MOTOR mit LABVIEW und ARDUINO

Ich habe dies in Proteusu Steuerung STEPPER MOTOR Geschwindigkeit mit LABVIEW und ARDUINO...!! wolaaSchritt 1: Dieses Tutorial ist:> Verwendung von Labview Schnittstelle Arduino auf PC über USB-Port.> Verwendung von Labview, um Daten zu senden, die
Wie erstelle ich eine Sprachsteuerung, Richtungssteuerung, Fernbedienung, Android und Arduino Roboter, (3 in 1)

Wie erstelle ich eine Sprachsteuerung, Richtungssteuerung, Fernbedienung, Android und Arduino Roboter, (3 in 1)

Dies ist eine vereinfachte Version der anderen Stimme Steuerung Roboter, keine komplexe Codierung leicht verständliche Codierung mit einfachen Algorithmus.Die app ist so entwickelt, dass es den Sprachbefehl in Text konvertieren und den Text auf der v
TouchOSC und Arduino Ethernet Shield, Regelenergie (A.M.P.A.E.)

TouchOSC und Arduino Ethernet Shield, Regelenergie (A.M.P.A.E.)

Tag für Tag Menschen verwenden eine Vielzahl von Gadgets und verschwenden eine Menge Energie, die keine Bedenken. Unsere Idee ist im Grunde eine mobile Anwendung für Tablets und Smartphones, die dem Benutzer eine vollständige Kontrolle über die Energ
Kurs MIT App Inventor und Arduino

Kurs MIT App Inventor und Arduino

Ich habe viele Tutorials für die Erstellung von Anwendungen mit Hilfe von MIT app Inventor gemacht und angeschlossen die app mit Arduino, alles funktioniert, ich bekomme oft Email, die besagt, dass etwas vermisst, wenn sie mein Tutorial, hier eine Sc
Steuerung von Arduino Auto über Web-Screen Radio

Steuerung von Arduino Auto über Web-Screen Radio

Dies ist meine erste Arduino-Prototyping. Ich möchte ein bewegtes Objekt zu erstellen, die per Funk gesteuert werden kann. Das Auto besteht aus Tamiya-Kits und XBee.Die Web-Seite für das Auto zu steuern ist mit Node.js und Socket.IO geschrieben.Schri
Verbinden Sie Ihre Raspberry Pi und Arduino Uno!

Verbinden Sie Ihre Raspberry Pi und Arduino Uno!

Der Raspberry Pi und Arduino Uno sind sehr leistungsfähige Geräte gut auf verschiedene Dinge. Die Arduino-Boards sind super Lesung ein- und Ausgänge von verschiedenen anderen Dingen. Der Raspberry Pi ist im Grunde ein Mini, Open-Source-Linux-Rechner.
Edison und Arduino/Genuino 101-Funk-Wetterstation

Edison und Arduino/Genuino 101-Funk-Wetterstation

Diese Instructable beschreibt eine Intel(r) Edison- und Arduino/Genuino 101-basierten modularen Funk-Wetterstation, die ich vor kurzem für meinen privaten Gebrauch erstellt haben.Grundlegende Konzepte, die die Einrichtung und Lösungen definiert, ware
Wie erstelle ich ein GSM Location Tracker mit AdaFruit FONA und Arduino

Wie erstelle ich ein GSM Location Tracker mit AdaFruit FONA und Arduino

EinführungIn diesem Tutorial werden wir gehen, um ein Netz verbunden Lage Logger verwenden das Adafruit FONA Board, ein Arduino und Sparkfun Datendienst. Es wird seinen Standort mit Triangulation und per post an eine Online-Datenbank mit einer GET-An