Skapa en FPV 4WD Robot (23 / 23 steg)
Steg 23:
Programmeringen.
För att fånga RC data använder jag en enkel Arduino funktion kallas pulseIn(). Du kan se alla referens på webbplatsen Arduino. Jag upptäckte denna funktion medan googla "radio kontroll joystick till arduino" och hittade den här bra exempel från Sparkfun.
All kod finns på github.
Det finns en mapp som heter "RC_reader" med ett program som registrerar alla 6 RC kanaler och rå värden till konsolen. Med denna kod, jag läser rådata från RC, nu behöver vi bara mappa data till ett användbart format (0 - 1023) eller (0 - 255) eller (0 - 180).
--
Den faktiska koden har tre viktiga funktioner:
Mappa RC RAW värden till användbara värden
rc_mapper();
karta användbara värden till PWM värden
motionMapper();
kontroller rörelse med IR-sensorn och RC kontroll
motionControl();
--
rc_mapper() - kartor joysticken till en differentierad enhet, och än en gång google gjorde min dag, annars skulle jag fortfarande svårt för denna komponent. Denna funktion ger två värden 'left_vertical' och 'right_horizontal' som kommer att användas senare att tilldela hastighet till motorerna.
motionMapper() - alla källan för den här funktionen kan ses här. Jag var tvungen att hacka denna bit av kod att använda med Motoruino2, eftersom motorerna är på en slav uC, jag använder en funktion för att ange PWM för båda motorerna.
motionControl() - använder bara de värden som kommer från motionMapper() och skickar dem via funktionen setPWM (leftMotor, rightMotor).
--
Jag använder också rätt vredet på fjärrkontrollen för att ange maximal hastighet.
--
Det finns också en skarp avstånd Sensor som används för att undvika kollisioner. Om motion kontroll jag testa avståndet, och om det är under 100 bot går normalt, om det är mer än 100 och under 200 den rör sig långsamt, och om det är mer än 200 stannar. Det kan alltid flytta bakåt, det finns fortfarande några tweak som jag vill göra här, till exempel, jag vill kunna aktivera eller inaktivera den här funktionen i runtime.
För ljuset använder jag en av pinnarna med 3 positioner. Varje position ger ett värde, varje värde motsvarar en ljus stat.
Inte för mycket att säga om servo kontroll. Jag behöver bara kontrollera kurs gränserna för att undvika kollisioner med andra komponenter på bot.
All kod är tillgänglig och kommenterade på GitHub.