RC controle en Arduino: A Complete Works (9 / 10 stap)

Stap 9: Tank sturende W/continue rotatie Servos


Deze laatste stap is een hoogtepunt van alle voorgaande onderwerpen en mijn tank steer code. Ik maakte de tank code om alleen gebruik te maken van de rechterduim stick van de zender te controleren dan de servo's twee CR sturen. Vergeet niet dat mijn TX is ingesteld op modus 3 en ik heb niet alle kanalen omgekeerd. De rechter analoge stick is kanaal 3 voor de horizontale as en kanaal 4 voor de verticle as. Hier volgt mijn schets met behulp van een Arduino UNO in plaats van de MEGA. Ik gebruik verschillende servo-grenzen die een micro-servo te verplaatsen van een volledige 180 graden en hen in staat te stellen verschillende bereik voor de besturing van de tank te geven meer gevoeligheid.

Zorg ervoor dat mijn prachtige model Sid (hierboven foto) bedanken voor zo'n goede sport terwijl Ive ' geweest using hem om mijn programma te verfijnen.

/ * Dit zal schetsen wil lezen alle 8 kanalen van een RC-ontvanger en de waarden via seriële ingang
monitor. Geprogrammeerd voor de Arduino Uno en Adafuit Servo stuurprogramma Board(pins A5-SCL and A4-SDA).
Mijn zender is ook instellen in de modus 3 dus de rechter analoge stick als volgt is:
Verticle as = kanaal 3
Horixontal as = kanaal 4
===========================================================================================*/
Opgenomen bibliotheken
#include
#include

Debug-modus voor het invoeren van gegevens via seriële inschakelen
/ * 0 = uit, 1 = Engineering gegevens aan, 2 = Raw Data op, 3 = waarde van de Servo uitgang,
4 = raw Eng & Servo Data Output, 5 = Tank steer gegevens output, * /
Const int debug = 0;

Arrays voor kanaal pin locaties en gegevens kanaal
Const int kanalen = 8;
Const int chPin [] = {2,3,4,5,6,7,8,9}; PIN locaties
int chEng [8]; Gegevensopslag gemasseerd
int chSer [8]; Servo waarde opslag

RX signaal masseren van waarden
Const int RXLo = 920;
Const int RXHi = 1640;
Const int RXDeadLo = 1265;
Const int RXDeadHi = 1295;
Const int RXMid = 1280;

Servo bereiken
Const int serLo = 130;
Const int serMid = 330;
Const int serHi = 530;
Const int tankLo = 250;
Const int tankHi = 410;

Servo uitgang
Adafruit_PWMServoDriver servo=Adafruit_PWMServoDriver(0x40);
Const int freq = 50;
Const int serNum = 8;
int ch3; Tank steer variabele
int ch4; Tank Steer variabele

Pin locaties Setup, start seriële of beginnen met I2C
VOID Setup {}
Als (debug > 0) {}
Serial.begin(115200); We gaan PLAID!
}

Input Pins:
for (int i = 0; ik pinMode(chPin[i],INPUT);
}

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

Hoofdprogramma
void loop {}
Waarden van tsjy naar chz, chx aan tsjy, en nieuwe waarden lezen
for (int i = 0; ik chEng[i]=pulseIn(chPin[i],HIGH);

Het masseren van het signaal
chEng [i] = beperken (chEng [i], RXLo, RXHi); Trim onderkant en bovenkant
Als (chEng [i] < = RXDeadHi & & chEng [i] > = RXDeadLo) {//Create Dead-Band
chEng [i] = RXMid;
}

Eng waarden toewijzen aan servo uitgang
Als (chEng [i] > = RXLo & & chEng [i] < = RXDeadLo) {//Map lagere bereik van waarden
chSer [i] = kaart (chEng [i], RXLo, RXDeadLo, serLo, serMid);
}
anders als (chEng [i] == RXMid) {//Map middelste waarde
chSer [i] = serMid;
}
anders als (chEng [i] > = RXDeadHi & & chEng [i] < = RXHi) {//Map hoger bereik van waarden
chSer [i] = kaart (chEng [i], RXDeadHi, RXHi, serMid, serHi);
}
} //End van For-lus

Tank Steer met behulp van de rechter analoge stick, outputing aan twee continu rotatie servo 's
/ * Met behulp van de Cartesische Kwadrant systeem en elke waarde gegeven aan de juiste motor omgedraaid te
zorgen voor goede werking * /

Eerste Kwadrant.
/ * Bereik op juiste servo met betrekking tot de positie van de verticale as spiegelen. Dit zorgt ervoor dat de
servo reeks links naar de verticle positie en verminderen de juiste servo's speed.* /
Als (chSer [2] > = serMid & & chSer [3] > = serMid) {}
H3 = chSer [2];
CH4=map(chSer[3],serMid,serHi,chSer[2],serMid);
}

Tweede Kwadrant
/ * Flip bereik op linker servo met betrekking tot de positie van de as van de verticle. Dit is niet als
zeestraat vooruit als kwadrant 1, maar de volgende voorbeeldcode die mij watertje using vóór moet
lijken te zijn.
CH3=map(chSer[3],serLo,serMid,serMid,serHi);
servo.setPWM(2,0,map(ch3,serHi,serMid,chSer[2],serMid));
Hoe ik kwam met het volgende is door vereenvoudiging en om op te slaan resources.* /
anders als (chSer [2] > serMid & & chSer [3] ch3=map(chSer[3],serLo,serMid,serMid,chSer[2]);
CH4 = chSer [2];
}

Derde kwadrant
/ * Het bereik op juiste servo met betrekking tot de positie van de as van de verticle flip. De linker servo
zal blijven reizen naar achteren terwijl de juiste servo slowed.* is /
anders als (chSer [2] < = serMid & & chSer [3] < = serMid) {}
H3 = chSer [2];
CH4=map(chSer[3],serMid,serLo,chSer[2],serMid);
}

Vierde kwadrant
/ * Flip het bereik op linker servo met betrekking tot de positie van de as van de vertivle, de juiste servo
zal doorgaan reizen naar achteren, terwijl de linker servo slowed.* is /
anders if(chSer[2]serMid) {}
CH4 = chSer [2];
CH3=map(chSer[3],serMid,serLo,chSer[2],serMid);
}

/ * CCW rotatie inschakelen door het omkeren van de juiste servo en doorsturen links servo met betrekking tot
de horizontale axis.* /
Als (chSer [2] == serMid & & chSer [3] > = serMid) {}
H3 = chSer [3];
CH4=map(chSer[3],serMid,serHi,serMid,serLo);
}

/ * Inschakelen van CW rotatie van de juiste servo doorsturen en achteruitrijlicht links servo met betrekking tot
de horizontale axis.* /
Als (chSer [2] == serMid & & chSer [3] < = serMid) {}
H3 = chSer [3];
CH4=map(chSer[3],serMid,serLo,serMid,serHi);
}

Remap variabelen om betere gevoeligheid en de volledige reeks is niet nodig om op volle snelheid.
CH3=map(CH3,serLo,serHi,tankLo,tankHi);
CH4=map(CH4,serLo,serHi,tankLo,tankHi);

Het wegknippen van rechterkant servo signaal, channel 4 signaal.
Als (ch4 > = serMid) {}
CH4=map(CH4,serMid,serHi,serMid,serLo);
}
anders als (ch4 ch4=map(ch4,serMid,serLo,serMid,serHi);
}

Uitvoer naar servo-stuurprogramma
servo.setPWM(2,0,ch3);
servo.setPWM(3,0,ch4);

Debug Output
Als (debug == 1 || debug == 4) //Engineering gegevens
{
Serial.Print ("EngData| Ch1: ");
Serial.Print (chEng[0]);
Serial.Print ("| CH2: ");
Serial.Print (chEng[1]);
Serial.Print ("| H3: ");
Serial.Print (chEng[2]);
Serial.Print ("| Ch4: ");
Serial.Print (chEng[3]);
Serial.Print ("| H5: ");
Serial.Print (chEng[4]);
Serial.Print ("| H6: ");
Serial.Print (chEng[5]);
Serial.Print ("| H7: ");
Serial.Print (chEng[6]);
Serial.Print ("| Ch8: ");
Serial.Print (chEng[7]);
Serial.println ("|");
}

Als (debug == 3 || debug == 4)
{
Serial.Print ("SerData| Ch1: ");
Serial.Print (chSer[0]);
Serial.Print ("| CH2: ");
Serial.Print (chSer[1]);
Serial.Print ("| H3: ");
Serial.Print (chSer[2]);
Serial.Print ("| Ch4: ");
Serial.Print (chSer[3]);
Serial.Print ("| H5: ");
Serial.Print (chSer[4]);
Serial.Print ("| H6: ");
Serial.Print (chSer[5]);
Serial.Print ("| H7: ");
Serial.Print (chSer[6]);
Serial.Print ("| Ch8: ");
Serial.Print (chSer[7]);
Serial.println ("|");
}

Als (debug == 5) {}
Serial.Print(CH3);
Serial.Print("|");
Serial.println(CH4);
}
} //End van hoofdprogramma

Ik weet hoe ik het deed de tank sturen is verre van optimaal, maar het is hoe ik het uit voorstelde.  Het vierde kwadrant werkt niet en ik heb nog te werken.  Het was niet dat groot van een probleem, aangezien dit een bewijs van concept robot in het werken met RC controle en Arduino voordat ik overga schaaleindwaarde.

Laat me weten als u vragen hebt en ik zal mijn best doen om te beantwoorden en dienovereenkomstig bijwerken. Gelieve te omvatten de stap en uitvoerig uitleg uw probleem om me krijgen op dezelfde pagina met u te helpen.

Gerelateerde Artikelen

Control An Arduino met uw telefoon

Control An Arduino met uw telefoon

Hallo iedereen! In dit instructible ik zal u tonen hoe te controleren en lees sensoren met arduino en blynk. Blynk is een app waarmee volledige controle over arduino, rasberry pi en vonk kern. Met uw smartphone! En het is net zo eenvoudig als wat cod
OSD-Audio ATM-7 Smartphone Speaker controle met Arduino en Blynk

OSD-Audio ATM-7 Smartphone Speaker controle met Arduino en Blynk

Deze dagen zijn er verschillende manieren om te implementeren multi-zone geluid met behulp van smartphone gebaseerd controle, maar de meeste zijn beperkt tot een aantal zones of vereisen duur merkgebonden vakken op elke locatie (Hello! Sonos). Een sp
Gemakkelijk, omkeerbare Motor controle voor Arduino (of een Microcontroller)

Gemakkelijk, omkeerbare Motor controle voor Arduino (of een Microcontroller)

dit project maakt gebruik van slechts drie hoofdcomponenten voor voorwaartse en omgekeerde bepalen voor een interne motor.  U kunt het gemakkelijk interface naar een Arduino of elke andere microcontroller.Het is zo eenvoudig - u kunt het draad van "f
Magnetische ophanging demonstratie controle door Arduino

Magnetische ophanging demonstratie controle door Arduino

Magnetische ophangsysteem Demo is een apparaat dat een object door de magnetische kracht kan opschorten. Een set van parameters om een object in gestage schorsing toestand kan worden verkregen via PID algoritme.Stap 1: Hardware Open de foto's.Stap 2:
Standalone WiFi Radio Control Panel (Arduino Powered)

Standalone WiFi Radio Control Panel (Arduino Powered)

ik wilde een Internet Radio voor een lange tijd, en was blij om te zien de Tinkernut Wifi Radio project (http://tinkernut.com/archives/2387 ), die ik gebouwd en hebben genoten voor een paar maanden.Echter, ik niet echt schelen voor de controle-interf
Krachtige controle met Arduino: Interfacing een lineaire Actuator

Krachtige controle met Arduino: Interfacing een lineaire Actuator

In dit specifieke artikel zullen we bespreken hoe eenvoudig het is om controle van krachtige mechanische kracht met behulp van een microcontroller zoals de Arduino en een lineaire Actuator van DC lineaire actuatoren Inc.Stap 1: MicrocontrollersRaspbe
MIDI controle licht Arduino

MIDI controle licht Arduino

Hallo, is deze post gemaakt door Jesus Alberto Cejas en Pablo Javier Ruiz te tonen u ons Project over een muzikale toetsenbord, mooie lichten en Arduino.Dit project was voor 'Creatieve Electronics', een Beng elektronica Engineering 4e jaar module op
RGB led control [PC, Arduino]

RGB led control [PC, Arduino]

delen is de zorg... dat is het motto van dit instructable... : DHier is een traktatie voor iedereen de led freaks graag...Ik wilde bereiken van volledige controle van mijn computer chassis aangepaste led strips, 3 stroken exacte, volledige controle z
BLDC Motor Control met Arduino, geborgen HD-motor en Hall sensoren

BLDC Motor Control met Arduino, geborgen HD-motor en Hall sensoren

er is veel belangstelling deze dagen onder hobbyisten bij het beheersen van Borstelloze DC (BLDC) motoren, die hebben betere prestaties en betere energie-efficiëntie overtraditionele gelijkstroommotoren, zijn maar moeilijker te gebruiken. Er bestaan
TV remote controlled auto - Arduino

TV remote controlled auto - Arduino

Hack uw afstandsbediening en de controle van een rc auto met, met behulp van de "Arduino Uno".Dit is een simpele manier om te controleren uw auto met behulp van de IR ontvangersmodule geprogrammeerd op arduino board en de afstandsbediening van d
Motor Control met arduino motor shield via Web

Motor Control met arduino motor shield via Web

In dit project, zal ik de controle van DC motor (ventilator Computer) met motor shield(official) via webpagina's.U kunt de motor zoals trage of snelle snelheid en stop.Ook als u wilt, kunt u controleknop toevoegen of wijzigen van besturingsknop in we
VBNET controle van ARDUINO over TCP RS232

VBNET controle van ARDUINO over TCP RS232

PROJET PUPITRE SERIËLE VIA TCPVB NET / XPORT (LAN) ou CSW M85 (WIFI LAN) ouCIE M10 (LAN) / ARDUINOInleiding:Met dit project zal u zitten kundig voor pilot uitgangen van een arduino met een virtuele vb.net pusbutton of een schakelaar voor digitale of
Een gemakkelijke manier om controle je Arduino Pins van het internet. (Geen port forwarding)

Een gemakkelijke manier om controle je Arduino Pins van het internet. (Geen port forwarding)

Controle Arduino pinnen van het internet, zonder gebruik te maken van complexe haven port forwarding opstellingen op uw firewall.Zolang de Arduino is aangesloten op uw netwerk en een geldig IP-adres heeft u zal zitten kundig voor wijzigen dePIN statu
Gyroscoop leidde controle met Arduino

Gyroscoop leidde controle met Arduino

In dit project zal ik u tonen hoe te bouwen van een eenvoudige 4 led tilt dimmer met een gyroscoop en een arduino uno. Er zijn 4 LED's die zijn gerangschikt in de vorm van een "+" en ze meer als je het breadboard Tilt zal oplichten.Stap 1: mater