Grunderna i förvandlar ditt Remote Controll fordon till ett autonomt System (Drone) genom att använda en Arduino (2 / 7 steg)

Steg 2: Kod del 1

Koden som används för detta system är centrerad kring "RCArduinoFastLib" biblioteket. skapad av "Can_I_Trade" från "RCArduino" blogg. Detta är ett utmärkt bibliotek som inte bara löser problem med att läsa servo signaler men också inlemmar koden krävs för att skicka signaler till servon aswell.
Du kan läsa mer om biblioteket här.
Sidhuvud och CPP filen är kopplade till den här sidan så bara skapa en fil som heter RCArduinoFastLib i mappen Bibliotek för arduino IDE och släppa dessa 2 filer till den.

Obs: Jag hade ingen "PinChangeInt" biblioteket installerat antingen så kan du behöva hämta och lägga det i mappen bibliotek samt för att framgångsrikt kompilera Arduino koden.

Denna kodexempel nedan är samma exempel som kommer med biblioteket, som helt enkelt jag inte kan göra bättre, även om senare i den instructable visas de ändringar jag har gjort för att påverka servo positioner utifrån yttre förhållanden och göra det mer tillämplig på min användning. Denna exempelkod är bara en enkel förmedlad väska som kommer att förändra signalerna från mottagaren på något sätt alls, vilket tillåter oss att kontrollera integriteten hos den krets som vi skapar och lösa problem lättare. Det är för tillfället inställd att styra 3 signalen linjer (i detta kallas: SPJÄLL, styrningen och AUX) så om du vill ha mer bara lägga dem till koden med samma formatering som används i raderna för nuvarande signaler.

Ber om ursäkt för formatet oformaterad text men jag vet inte hur man skapar en kod rutan på här: P kopierar du den till Arduino IDE för lättare läsning (om någon kommentarer på hur man gör detta så kommer jag redigera det:-P).

Vänligen kom ihåg att läsa kommentarerna för att göra det klart för oss vad koden gör

#include < RCArduinoFastLib.h >

MultiChannels
//
rcarduino.blogspot.com
//
En enkel metod för att läsa tre RC kanaler med hjälp av pin ändra avbryter
//
Se relaterade inlägg-
http://rcarduino.blogspot.co.uk/2012/01/How-to-Read-RC-receiver-with.html
http://rcarduino.blogspot.co.uk/2012/03/need-more-interrupts-to-Read-more.html
http://rcarduino.blogspot.co.uk/2012/01/can-i-Control-more-than-x-Servos-with.html
//
rcarduino.blogspot.com
//

inkluderar pinchangeint biblioteket - se länkarna i avsnittet närliggande information ovan för Detaljer
#include < PinChangeInt.h >

Tilldela din kanal i pins
#define THROTTLE_IN_PIN 5
#define STEERING_IN_PIN 6
#define AUX_IN_PIN 7

Tilldela din kanal ut pins
#define THROTTLE_OUT_PIN 8
#define STEERING_OUT_PIN 9
#define AUX_OUT_PIN 10

Tilldela servo index
#define SERVO_THROTTLE 0
#define SERVO_STEERING 1
#define 2
#define SERVO_FRAME_SPACE 3

Dessa bitflaggor som anges i bUpdateFlagsShared att ange vilka
kanaler har nya signaler
#define THROTTLE_FLAG 1
#define STEERING_FLAG 2
#define AUX_FLAG 4

innehar uppdatering flaggorna ovan definierade
flyktiga uint8_t bUpdateFlagsShared;

delade variabler uppdateras av ISR och läsa av loop.
I slinga vi omedelbart ta lokala kopior så att ISR kan hålla ägandet av den
delade de. Att få tillgång till dessa i slinga vi först inaktivera avbrott med noInterrupts
Vi tar en kopia att använda i loop och turn avbrott igen så snabbt som möjligt
Detta säkerställer att vi alltid ska kunna ta emot nya signaler
flyktiga uint16_t unThrottleInShared;
flyktiga uint16_t unSteeringInShared;
flyktiga uint16_t unAuxInShared;

Dessa används för att registrera stigande kanten av en puls i de calcInput funktionerna
De behöver inte vara flyktiga som de används bara i ISR. Om vi ville
för att hänvisa till dessa i loop och ISR skulle då de behöva förklaras flyktiga
uint16_t unThrottleInStart;
uint16_t unSteeringInStart;
uint16_t unAuxInStart;

uint16_t unLastAuxIn = 0;
uint32_t ulVariance = 0;
uint32_t ulGetNextSampleMillis = 0;
uint16_t unMaxDifference = 0;

void setup()
{
Serial.BEGIN(115200);
Serial.println("multiChannels");

koppla servo objekt, dessa kommer att generera rätt
pulser för att köra elektroniska hastighetsregulatorer, servon eller andra enheter
utformad för att samverka direkt med RC mottagare
CRCArduinoFastServos::attach(SERVO_THROTTLE,THROTTLE_OUT_PIN);
CRCArduinoFastServos::attach(SERVO_STEERING,STEERING_OUT_PIN);
CRCArduinoFastServos::attach(SERVO_AUX,AUX_OUT_PIN);

låter som en standard frekvens på 50 Hz genom att ange en ram utrymme av 10 * 2000 = 3 servon + 7 gånger 2000
CRCArduinoFastServos::setFrameSpaceA(SERVO_FRAME_SPACE,7*2000);
CRCArduinoFastServos::begin();

med hjälp av PinChangeInt biblioteket, bifoga avbrotten används för att läsa kanalerna
PCintPort::attachInterrupt (THROTTLE_IN_PIN, calcThrottle, förändring);
PCintPort::attachInterrupt (STEERING_IN_PIN, calcSteering, förändring);
PCintPort::attachInterrupt (AUX_IN_PIN, calcAux, förändring);
}

void loop()
{
skapa lokala variabler för att lagra lokala kopior av kanal ingångarna
Detta förklaras som statiska så att deras värden bevaras mellan samtal till ögla.
statisk uint16_t unThrottleIn;
statisk uint16_t unSteeringIn;
statisk uint16_t unAuxIn;
lokal kopia av uppdatering flaggor
statisk uint8_t bUpdateFlags;

Kolla delade uppdatering flaggor för att se om några kanaler har en ny signal
IF(bUpdateFlagsShared)
{
noInterrupts(); Inaktivera avbrott snabbt medan vi vidta lokala kopior av de delade variablerna

ta en lokal kopia av vilka kanaler har uppdaterats så att vi kan använda detta i resten av loopen
bUpdateFlags = bUpdateFlagsShared;

i aktuell kod fylls gemensamma värden alltid
så vi kunde kopiera dem utan provning flaggor
men i framtiden kan detta förändras, så kan
Kopiera endast när flaggorna berättar vi kan.
IF(bUpdateFlags & THROTTLE_FLAG)
{
unThrottleIn = unThrottleInShared;
}
IF(bUpdateFlags & STEERING_FLAG)
{
unSteeringIn = unSteeringInShared;
}
IF(bUpdateFlags & AUX_FLAG)
{
unAuxIn = unAuxInShared;
}

Rensa delade kopian av uppdaterad flaggor som vi redan har tagit uppdateringarna
Vi har fortfarande en lokal kopia om vi behöver använda det i bUpdateFlags
bUpdateFlagsShared = 0;

interrupts(); Vi har lokala kopior av insatsvaror, så nu kan vi vända avbryter tillbaka på
så snart som avbryter är tillbaka på, kan vi inte längre använda delade kopiorna, avbrottet
Service rutiner äger dessa och kan uppdatera dem när som helst. Under uppdateringen, den
delade kopior kan innehålla skräppost. Lyckligtvis har vi vår lokala kopior att arbeta med :-)
}

göra någon bearbetning härifrån och framåt
Använd endast den lokala värden unAuxIn, unThrottleIn och unSteeringIn, den delade
variablerna unAuxInShared, unThrottleInShared, unSteeringInShared alltid ägs av
de avbrott rutinerna och bör inte användas i loop

följande kod ger enkel passera genom detta är ett bra första test
Arduinoen passerar genom receiver input som om Arduino inte är där.
Detta bör användas för att bekräfta den krets och makt
innan du försöker någon anpassad bearbetning i ett projekt.

Vi kontrollerar för att se om kanalvärdet har ändrats, anges detta
av flaggor. För den enkla passet genom vi egentligen inte behöver detta kontrollera,
men för ett mer komplexa projekt där en ny signal kräver betydande bearbetning
Detta tillåter oss att bara beräkna nya värden när vi har nya ingångar, snarare än
på varje cykel.
IF(bUpdateFlags & THROTTLE_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_THROTTLE,unThrottleIn);
}

IF(bUpdateFlags & STEERING_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_STEERING,unSteeringIn);
}

IF(bUpdateFlags & AUX_FLAG)
{
CRCArduinoFastServos::writeMicroseconds(SERVO_AUX,unAuxIn);
}

bUpdateFlags = 0;
}

enkla avbrottstjänstens rutin
void calcThrottle()
{
IF(PCintPort::pinState)
{
unThrottleInStart = TCNT1;
}
annat
{
unThrottleInShared = (TCNT1 - unThrottleInStart) >> 1;
bUpdateFlagsShared | = THROTTLE_FLAG;
}
}

void calcSteering()
{
IF(PCintPort::pinState)
{
unSteeringInStart = TCNT1;
}
annat
{
unSteeringInShared = (TCNT1 - unSteeringInStart) >> 1;

bUpdateFlagsShared | = STEERING_FLAG;
}
}

void calcAux()
{
IF(PCintPort::pinState)
{
unAuxInStart = TCNT1;
}
annat
{
unAuxInShared = (TCNT1 - unAuxInStart) >> 1;
bUpdateFlagsShared | = AUX_FLAG; }
}

Se Steg
Relaterade Ämnen

Alla remote bil genom att använda Arduino

eftersom detta är min första instructable jag försökte mitt bästa. Denna bil är gjord med hjälp av arduino utan motor sheild eller Internet-anslutningsdelning. Denna rover kan styras med hjälp av en fjärrkontroll. För det första måste vi avkoda fjärr...

Bygga ditt papper touch TV reomte kontroll genom att använda arduino

Hej var och en,Jag är vigneshraja. Jag gjorde detta projekt för skojs skull. Jag tyckte om min TV: ns fjärrkontroll blir touch remote.so jag gjorde detta projekt genom att kombinera den IR remote och kapacitiv touch biblioteket i arduino.for touch kn...

Ett annat sätt att använda ditt dockor hus!

i denna video kan du titta på vår inhemska stylist Louise förvandla ett gammalt dockor hus till en skräddarsydd förvaringsenhet. Det finns ett utrymme för mamma, pappa, barn och Rufus hunden!...

En guide till att använda iMovie programvara + hur man använder grön/blå skärmen handledning att göra ditt videoklipp ser bättre

Denna video är en nybörjares handledning för iMovie programvara. Dessutom, om du är en video maker, vet du hur man använder grön/blå skärm övergångar för att göra dina videoklipp ser bättre ut. Titta på video veta bättre....

Digital målning lektion 1: Grunderna i att använda en ritplatta

datorer har medfört förändringar i varje hörn av det moderna samhället. En av dessa hörn är konst. Internet är fullt av begreppet konst, skrivbordsunderlägg och många andra typer av bild som har dragits av vissa användare på en dator.När jag köpte mi...

Trådlös Phone Remote-Controlled LED Strips: RasPi w / Fadecandy driver w / WS2811/WS2812 adresserbara LED Strips med TouchOSC Smartphone App med Iphone eller Droid

Här går en allt mer omfattande design översikt över mitt senaste projekt. Nedan är en video som jag har lagt upp visar vissa funktioner:Den ursprungliga idén progressionen gick ungefär så här:Adresserbara lysdiodsrand (s vi vill alltid ha mer skinand...

Remote Control Superfast 250 FPV Drone

Här är vad du kan göra med en 250 FPV racing quadcopter.Du kan flyga nästan överallt!Inte bara kan du svävar på ett bestämt ställe, men du kan också flyga riktigt, riktigt snabbt.Du kraschade det? Inga bekymmer, racing quadcopter ramar är tåliga nog...

Remote Control bil med Arduino och Bluetooth

Projektet består i att göra en fjärrkontroll bil använder en bluetooth-anslutning. Denna bil är tänkt att användas i en ballong poppar konkurrens mot andra liknande bilar. Den trådlösa anslutningen uppnås genom att använda en bluetooth-modul som är a...

Slå Raspberry Pi w / Remote Control

Jag älskar med min Pi med Openelec för min mediacenter, men behovet av att dra i sladden för att skära makten var bara att hålla det under WAF (fru acceptans faktor). Så jag satte mig och kom upp med detta. I framtiden, arduino kommer att ersättas me...

Arduino IR Remote Control

Källa: http://www.theorycircuit.com/arduino-universal-remote/Genom att använda arduino och IR-mottagaren TSOP 1738 (i vårt projekt, kan du använda någon IR-mottagare tillgängliga) vi kan avkoda någon IR kod till hex eller något annat format. Före att...

Använda playstation remote på pc med arduino

jag har varit begåvad en gamla playstation 1 avlägsna en dag och ville använda den på datorn och sedan köpt en adapter på ebay som var defekt. Så beslutat jag äntligen att göra min egen med en arduino duemilanove. Jag försökte först att använda använ...

Remote Controlled Arduino Car

Jag har alltid gillat att gå till lägren, etc där det finns många av mina vänner, jag har alltid gillat att ha en massa vänner och en dag när jag letade upp youtube för fjärrkontroll bilar, och hur de gjordes, jag listat ut att jag kunde göra en till...

RS-232 IR-mottagare i en seriell anslutning (LIRC) dator Remote Control

detta instructable avser att visa dig hur du skapar en liten och enkel infraröda (IR) mottagare för din dator. Konfigurationen av programvaran är utanför omfånget för detta instructable, men jag använder denna mottagare med LIRC (Linux Infrared Remot...

Remote control Gripper bot

Ett par månader tillbaka min son bad mig att göra honom en avlägsen kontrollerade bot. Han gav mig en lista över vad han ville och vi minskat ner en hanterbar lista det :) Detta är vad jag hamnade byggnaden för honom...Möt klämmor, en mobil remote gr...

LinkSprite Ethernet Shield + yeelink WEB remote control IO

Ethernet-Shield kan omedelbart Internetkonnektivitet för Arduino projekt. En ombord Wiz5100 ethernet styrenhet hanterar upp till fyra TCP och UDP-anslutningar, stack bara det till en Arduino att skapa dina egna enheter på nätverket. Enkelt kontroller...

Teddy Bear Remote Control

nallebjörn fjärrkontrollen sitter bra på din soffa eller säng och kan användas för att styra din iPod eller dator. Det är en söt ändring till en RF-fjärrkontroll och är förvånansvärt mjuk! Projektet är svårt att göra och kräver en hel del udda materi...

Kindle Web Remote Control

BeskrivningDetta är en systemlösning till remote Sidändring på en kindle. Kort sagt, kör jag en webbserver från min kindle. Detta tjänar ett cgi-skript som imiterar en knapptryckning på min kindle. Jag åt skript från en webbläsare på min telefon.Dett...

Arduino Traffic Light Controller w/Remote Control

jag hade ett trafikljus som jag fordonsreparationslackering. Det enda som återstår att göra var att bygga registeransvarige för ljusets signalmönster. För att ge det en twist tagit jag med en fjärrkontroll. Detta var också ett perfekt tillfälle för m...

Hur man gör en Remote Controlled Stunt bil hemma

I detta Instructable lär vi att göra en fantastisk gadget som varje kille önskat och hade också iallafall försökte en gång göra det under hans barndom. Det är inget annat än en Remote Controlled bil och gissa vad, i detta instructable, vi kommer inte...