Enkel rad efterföljare robot med hjälp av en Actobotics Runt Rover spira (10 / 12 steg)
Steg 10: Laddar koden
Nedladdning och den bifogade filen och packa upp den till en plats du kan hitta den på din dator.
Öppna upp Arduino IDE och göra en fil -> Öppna och gå till den plats som du uppackade filen till.
Klicka nu på Verktyg -> styrelse och välj den Arduino Mini Pro w/Atmega328P
Sedan välja din seriell port och klicka på botten för att ladda upp koden.
Om du har problem med Arduino IDE gå här eller här för hjälp. Där kan du hitta hjälp med instillation och felsökning.
Om du har problem med Micro magikern eller den chaufförer, gå hit. Jag rekommenderar faktiskt att läsa över Dagu kontrollanten Instructable innan framöver med dess användning här.
Mer information om koden, ha en bra läsa om det i Arduino IDE eller din favorite textredaktör. Det har kommenterat väl och ger dig en bra uppfattning hur den rad efterföljaren fungerar.
Här är den faktiska koden roboten använder:
/*
Basic line efterföljare.
Mål i livet...
Att hitta linjer att följa :-)
Skriven av Scott Beasley - 2015
Gratis att använda eller ändra. Njuta av.
Anmärkningar: Innan du börjar bot, placera den där CENTER sensorn är på den
linje och vänster och höger är avstängd.
* / a
/*
Använder MicroM biblioteket för Micro trollkarl robot contoller styrelsen.
Hämta från https://sites.google.com/site/daguproducts/home/arduino-libraries
Packa upp och kopiera till din Arduino biblioteksmappen eller följ anvisningarna
här: http://arduino.cc/en/guide/libraries
Använder Metro biblioteket också. Se http://playground.arduino.cc/code/metro
downloding och mer information.
*/
#include "microM.h"
#include "Metro.h"
Givarstaven definierar
#define SENSOR_L A3 / / vänster givarstaven
#define SENSOR_M A4 / / medeltida givarstaven
#define SENSOR_R A5 / / höger givarstaven
Speed definierar
#define ONLINESPEED 110 / / hastighet om du vill flytta när bot i på raden
#define FORWARDTURNSPD 100 / / svarvning fart framåt
#define BACKWARDTURNSPD-85 / / Backup svarvning hastighet
Micro magikern använder 0 för ingen broms och 1 för broms
#define BRAKEOFF 0
#define BRAKEON 1
/*
Globals område. Försök hålla dem till ett minimum :-)
*
/ Skapa motor och Metor objekt med användning som gränssnitt
Metro sensorrd = Metro (5). Timer för varje 5ms
Förvaring för "calibation" nummer. Endast med hjälp av online_avg
men du kanske vill titta på den offline för compairing skull.
int online_avg = 0, offline_avg = 0;
Ogiltiga inställningar)
{
Göra en enkel kalibrering. Inte en stor, men en.
för (int jag = 0; jag < 20; i ++) {
offline_avg += analogRead (SENSOR_L);
offline_avg += analogRead (SENSOR_R);
online_avg += analogRead (SENSOR_M);
}
online_avg = online_avg / 20;
offline_avg = offline_avg / 40; Medelvärde av vänster och höger sensorerna
Starta framåt bot.
microM.Motors (ONLINESPEED ONLINESPEED, BRAKEOFF, BRAKEOFF);
Serial.BEGIN (9600);
}
Ogiltig loop)
{
Läs sensorerna varje 5ms och agera på den.
om (sensorrd.check ()! = 1) {
hemkomst.
}
Läs alla 3 senors och returnera linje ställning skick
byte riktning = read_sensors ();
Växla (riktning) {
fall 0: / / On line mitten sensorn. Fortsätta framåt.
microM.Motors (ONLINESPEED ONLINESPEED, BRAKEOFF, BRAKEOFF);
Serial.println ("framåt");
bryta;
fall 1: / / på linjen vänstra sensorn. Flytta höger fram.
microM.Motors (FORWARDTURNSPD, BACKWARDTURNSPD, BRAKEOFF, BRAKEOFF);
Serial.println ("flytta rätt");
bryta;
fall 2: / / On line rätt sensorn. Flytta vänster fram.
microM.Motors (BACKWARDTURNSPD, FORWARDTURNSPD, BRAKEOFF, BRAKEOFF);
Serial.println ("rörliga vänster");
bryta;
fall 3: / / förlorat! Flytta höger (snurrande).
microM.Motors (BACKWARDTURNSPD, 0, BRAKEOFF, BRAKEOFF);
Serial.println ("lost!");
bryta;
}
}
Läs alla sensorer och räkna ut var linjen är
byte read_sensors)
{
byte sensorer = 3; Init med förlorade inställningen och ändra annars.
Läs sensorn i mitten
int mid_read = readSensor (SENSOR_M, 2) - online_avg;
Läs Sensor vänster
int left_read = readSensor (SENSOR_L, 2) - online_avg;
Läs Sensor höger
int right_read = readSensor (SENSOR_R, 2) - online_avg;
Räkna ut raden position i hänsynen till 3 sensorer
Sensorn med den största nummer vinner!
om (mid_read > left_read & & mid_read > right_read)
sensorer = 0;
annars om (left_read > right_read)
sensorer = 1;
annars om (left_read < right_read)
sensorer = 2;
Returnera position hittade eller "3" om ingen linje hittades
returnera sensorer;
}
Läs sensor n gånger och returnera en genomsnittlig läsning
int readSensor (int analog_pin, int sample_rate)
{
int summa = 0;
för (int jag = 0; jag < sample_rate; i ++) {
summa += analogRead (analog_pin);
}
tillbaka (summan / sample_rate);
}