RC kontroll och Arduino: A färdiga arbeten (9 / 10 steg)

Steg 9: Tank styrning W/kontinuerlig Rotation servon



Detta sista steg är en kulmen på alla tidigare ämnen och min tank styra kod. Jag gjorde tanken styr koden för att endast använda den högra tumme pinnen av sändaren att sedan styra två CR servon. Kom ihåg att min TX är inställd på läge 3 och jag inte har några kanaler vändas. Höger styrspak är kanal 3 för den vågräta axeln och channel 4 för vertikal axel. Följande är min skiss med en Arduino UNO istället för MEGA. Jag använder olika servo gränser som aktiverar en mikro-servo att flytta en full 180 grader och dem olika sortiment för tank styrning ge mer känslighet.

Se till att tacka min underbara modell Sid (ovan bild) för att vara en bra sport medan jag har varit med honom för att förfina min program.

/ * Här kommer skiss kommer läsa alla 8 kanaler av en RC mottagare och indatavärden via seriell
övervaka. Programmerat för Arduino Uno och Adafuit Servo Driver Board(pins A5-SCL and A4-SDA).
Min sändare ligger också i läge 3 så höger styrspak är följande:
Vertikal axel = kanal 3
Horixontal axel = Channel 4
===========================================================================================*/
Medföljande bibliotek
#include
#include

Aktivera debug-läge att mata in data via seriell
/ * 0 = av, 1 = Teknisk Data på, 2 = Raw Data på, 3 = Servo värde utgång,
4 = rå Eng & Servo Data Output, 5 = Tank steer dataöverföring, * /
CONST int debug = 0;

Matriser för kanal pin platser och kanaldata
CONST int kanaler = 8.
CONST int chPin [] = {2,3,4,5,6,7,8,9}. PIN platser
int chEng [8]. Lagra masseras data
int chSer [8]. Servo värde lagring

RX signal massera värden
CONST int RXLo = 920;
CONST int RXHi = 1640;
CONST int RXDeadLo = 1265;
CONST int RXDeadHi = 1295;
CONST int RXMid = 1280;

Servo spänner
CONST int serLo = 130;
CONST int serMid = 330;
CONST int serHi = 530;
CONST int tankLo = 250;
CONST int tankHi = 410;

Servo utgång
Adafruit_PWMServoDriver servo=Adafruit_PWMServoDriver(0x40);
CONST int freq = 50;
CONST int serNum = 8;
int ch3; Tank steer variabel
int ch4; Tank Steer variabel

Ställa in pin platser, börja seriell, eller börja I2C
void setup() {
om (debug > 0) {
Serial.BEGIN(115200); Vi kommer Pläd!
}

Ingående stift:
för (int jag = 0; jag pinMode(chPin[i],INPUT);
}

servo.BEGIN();
servo.setPWMFreq(freq);
} //End av installationen

Huvudprogrammet
void loop() {
Flytta värden från chy till chz, chx till chy, och läsa nya värden
för (int jag = 0; jag chEng[i]=pulseIn(chPin[i],HIGH);

Signal massera
chEng [i] = begränsa (chEng [i], RXLo, RXHi); Trim nedre och övre
om (chEng [i] < = RXDeadHi & & chEng [i] > = RXDeadLo) {//Create döda-Band
chEng [i] = RXMid;
}

Karta Eng värden till servo utgång
om (chEng [i] > = RXLo & & chEng [i] < = RXDeadLo) {//Map lägre intervall av värden
chSer [i] = karta (chEng [i], RXLo, RXDeadLo, serLo, serMid);
}
annars om (chEng [i] == RXMid) {//Map mittersta värdet
chSer [i] = serMid;
}
annars om (chEng [i] > = RXDeadHi & & chEng [i] < = RXHi) {//Map högre intervall av värden
chSer [i] = karta (chEng [i], RXDeadHi, RXHi, serMid, serHi);
}
} //End av For-Loop

Tanken styr med höger styrspak, produktionen till två kontinuerlig rotation servon
/ * Använd kartesiska kvadrant och något värde till rätt motorn återförs till
säkerställa korrekt drift * /

Första kvadranten.
/ * Flip utbud på rätt servo med avseende på lodräta axeln position. Detta kommer att hålla den
lämnade servo set vertikal position och minska rätt servon hastighet.* /
om (chSer [2] > = serMid & & chSer [3] > = serMid) {
CH3 = chSer [2].
CH4=map(chSer[3],serMid,serHi,chSer[2],serMid);
}

Andra kvadrant
/ * Flip utbud på vänster servo med avseende på vertikal Axelposition. Här är inte som
sundet framåt som kvadrant 1 men följande exempelkod jag använde innan bör
ser lika ut.
CH3=map(chSer[3],serLo,serMid,serMid,serHi);
servo.setPWM(2,0,map(ch3,serHi,serMid,chSer[2],serMid));
Hur jag kom med följande är genom förenkling och spara resources.* /
annars om (chSer [2] > serMid & & chSer [3] ch3=map(chSer[3],serLo,serMid,serMid,chSer[2]);
CH4 = chSer [2].
}

Tredje kvadranten
/ * Flip spänna på rätt servo med avseende på vertikal Axelposition. Vänstra servo
kommer att fortsätta resa bakåt medan rätt servo är slowed.* /
annars om (chSer [2] < = serMid & & chSer [3] < = serMid) {
CH3 = chSer [2].
CH4=map(chSer[3],serMid,serLo,chSer[2],serMid);
}

Fjärde kvadranten
/ * Flip spänna på vänster servo med avseende på vertivle Axelposition, rätt servo
kommer har reser bakåt medan vänster servo är slowed.* /
annat if(chSer[2]serMid) {
CH4 = chSer [2].
CH3=map(chSer[3],serMid,serLo,chSer[2],serMid);
}

/ * Aktiverar CCW Rotation genom att vända rätt servo och vidarebefordran vänster servo med
den horisontella axis.* /
om (chSer [2] == serMid & & chSer [3] > = serMid) {
CH3 = chSer [3].
CH4=map(chSer[3],serMid,serHi,serMid,serLo);
}

/ * Aktiverar CW Rotation av vidarebefordring rätt servo och vända vänster servo med
den horisontella axis.* /
om (chSer [2] == serMid & & chSer [3] < = serMid) {
CH3 = chSer [3].
CH4=map(chSer[3],serMid,serLo,serMid,serHi);
}

Mappa om variabler för att ge bättre känslighet och fullt utbud är inte behövs för att uppnå full fart.
CH3=map(CH3,serLo,serHi,tankLo,tankHi);
CH4=map(CH4,serLo,serHi,tankLo,tankHi);

Bläddra höger servo signalen, channel 4 signal.
om (ch4 > = serMid) {
CH4=map(CH4,serMid,serHi,serMid,serLo);
}
annars om (ch4 ch4=map(ch4,serMid,serLo,serMid,serHi);
}

Utgång till servo drivrutin
servo.setPWM(2,0,ch3);
servo.setPWM(3,0,ch4);

Debug utmatning
om (debug == 1 || debug == 4) //Engineering Data
{
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 ("|");
}

om (debug == 3 || debug == 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 ("|");
}

om (debug == 5) {
Serial.Print(CH3);
Serial.Print("|");
Serial.println(CH4);
}
} //End av huvudprogrammet

Jag vet hur jag gjorde tanken styrning är långt ifrån optimal men det är hur jag räknat ut. Den fjärde kvadranten fungerar inte och jag har ännu att få arbeta. Det var inte så stor av ett problem eftersom detta är ett bevis på konceptet robot i arbetar med RC kontroll och Arduino innan jag går fullt skalutslag.

Låt mig veta om du har några frågor och jag kommer att göra mitt bästa för att svara på och uppdateras också. Vänligen inkludera steget och några detalj förklara ditt problem för att hjälpa mig komma på samma sida med dig.

Se Steg
Relaterade Ämnen

Säkerhetssystem och tillgång kontroll med Arduino och RFID-

säkerhetssystem och tillgång kontroll med Arduino och RFIDDetta projekt är en evolotuin av mitt första projekt kallat "Arduino - Security System och Access Control"Som ni kan se på bloggen http://arduinobymyself.blogspot.com.br/2012/03/arduino-s...

KONTROLL STEPPER MOTOR hastighet med LABVIEW och ARDUINO

Jag gjorde detta i Proteusfullständig kontroll STEPPER MOTOR hastighet med LABVIEW och ARDUINO...! wolaaSteg 1: Denna handledning är:> Med Labview gränssnitt Arduino till PC via USB-porten.> Med Labview för att skicka data som beskriver varvtal till...

Kontroll DC och stepper motors med L298N Controller moduler med dubbla motorer och Arduino

Du behöver inte spendera en massa pengar att styra motorer med en Arduino eller kompatibel styrelsen. Efter lite jakt runt vi kan hittade en snygg motorisk kontrollmodul baserad på L298N H-bridge IC som kan du styra hastighet och riktning av två liks...

Röd färg erkännande baserade Arduino kontroll (med hjälp av MATLAB och Arduino)

I denna tutorial, vi visar hur du använder färg erkännande för att styra någon manöverdonet anslutet till någon digital pin av arduino uno, vi har behandlat LED som ett ställdon i denna handledning som är ansluten till stift 13 av UNO. Vi har dragit...

Auotmatic Street lights kontroll med hjälp av LDR och Arduino

Gatan lätta reglerteknik används för att styra de ljus (aktivera och inaktivera baserat på ljus).Här gör vi användning av LDR (Light beroende motstånd) och LED (Light Emitting diode) och arduino.Hårda Ware komponenter som krävs:1) LDR2) LED3) 4.7 k m...

Kontroll robotarm med handskar, Android-telefon och Arduino

Idag har vi nästan 2 tekniker för att spela med robotarm, antingen genom knappar till exempel som på spelet sköld eller använda handskar som inkluderar sensorer. Ännu, dag ska jag visa dig en ny teknik med hjälp av endast din Android-telefon och Ardu...

Kompatibla proteshand med sensomotoriska kontroll och sensoriska Feedback för nacke amputerade

Det huvudsakliga målet med detta projekt tillhandahåller en mycket funktionella och billiga proteshand till personer med nedanför armbågen amputationerÄven om massor av state-of-the-art protetiska enheter har utvecklats, fortfarande blir det trycket...

Google spelar musik Internet Radio (Raspberry Pi och Arduino)

jag letade efter ett projekt att göra med min Raspberry Pi och hittade detta Instructable och tänkte jag skulle ha en gå på något liknande som arbetat med Google spela musik. Jag hade en ungefärlig uppfattning om vad jag ville ha det sista objektet t...

Quiz Game Controller med hjälp av "Ljus och ljud Buzzers" och Arduino

fara stil frågesport spel är favoriter för att skapa spänning och pedagogiska instruktioner samtidigt. Lärare, summer camp rådgivare och även industrin pedagoger hitta denna typ av spel för att skapa intresse och engagemang från deltagarna.Tanken bak...

Kontroll An Arduino med telefonen

Hej alla! I detta instructible jag kommer att visa dig hur man styr och läsa sensorer med arduino och blynk. Blynk är en app som ger full kontroll över arduino, rasberry pi och spark kärna. Med din smartphone! Och det är lika enkelt som att lägga upp...

Kraftfull kontroll med Arduino: Gränssnitt ett linjärt ställdon

I den här specifika artikeln kommer vi att diskutera hur enkelt det är att kontrollera kraftfull mekanisk kraft använda en mikrokontroller som Arduino och en linjärt ställdon från DC linjära ställdon Inc.Steg 1: MicrocontrollersRaspberryPi och Arduin...

Raspberry Pi och Arduino: bygga tillförlitliga system med WatchDog timer

Sammanfattning: I detta Instructable titta vi på hur man bygger mer tillförlitliga datorsystem med WatchDog timer. Vi visar hur du ställer in och använder Raspberry Pi och Arduino inre watchdog timer. Vi förklarar också varför en extern WatchDog Time...

Super Spooky onda LED ögon av Doom med atTiny85 och Arduino IDE

det finns några kusliga ögat instructables där ute. Till exempel finns det en som bygger på en 555 timer, en som bygger på en on/off knapp, en som bygger på Arduino och en baserat på band.Jag ville göra en uppsättning kusliga onda ögon som uppfyller...

Bärbar prototyping labb med oscilloskop och arduino

Hej alla tillsammans är jag tillbaka, med ett nytt projekt. Jag var tyst upptagen med min underbara nyfödda dotter (bara 7 veckor gammal) när jag börjar skrev detta det är 00:00 i Tyskland och min dotter äntligen sover och jag hittade lite tid att pr...

MrRobot - Ubuntu Mobile app aktiverad Robotics (Raspberry Pi och arduino inblandade)

Projektet MrRobot är en Ubuntu Mobile app aktiverad Robotics som har funktionen av röst, touch och skaka kontroll för att interagera med den Rapiro roboten. Detta projekt utförs inom 28 timmar i Ubuntu Shenzhen Hackathon av vårt team E-minderåriga. A...

Kurs på MIT App Inventor och Arduino

Jag har gjort många tutorials för att skapa apps använder MIT app inventor och anslutit app med arduino att få saker att fungera, jag får ofta mail anger något försvann när de följa min tutorial, här en steg för steg handledning på komma igång med at...

Hur man gör en röststyrning, riktning, fjärrkontroll, Android och arduino robot, (3 i ett)

Detta är en förenklad version av någon annan röst kontroll robot, inte komplicerad kodning lätt att förstå kodning med lätt algoritm.Appen är utvecklad så att det konvertera röstkommandot till text och överföra text till anslutna Bluetooth-enheten.Bl...

Bygga din egen pratar Tom leksak med skrapa och Arduino

Gillar du pratar Tom? Vad sägs om att göra våra egna interaktiva (Arduino/Scratch) pratar Tomleksak?I detta instructable visar vi dig hur man bygger denna leksak med hjälp av sensorer och dubbelriktad Scratch <> - Arduino kommunikation att göra prog...

RS485 Seriell kommunikation mellan Arduino Mega och Arduino Nano med Visuino

Ibland måste vi ansluta Arduino styrelser ligger långt bort från varandra. RS485 är ett mycket bekvämt sätt att ansluta styrelser med bara 2 kablar, och kan arbeta för ett avstånd på 1200 m (4000 ft). Det gör också flera styrelser kan enkelt anslutas...