Enkla multi-mode 4wd Rover JR-001 (12 / 15 steg)

Steg 12: Koden...

/*
Arduino hinder avoider och efterföljare.

Mål i livet...
Flyttar framåt söker hinder att undvika eller
Håll borta från dem (kraft)

Skriven av Scott Beasley - 2015
Gratis att använda eller ändra. Njuta av.
*/

/*
Använder L9110S-biblioteket. Det fungerar med L9110S h-bron. Se steg 1 för biblioteket koden.
*/

#include < L9110Driver.h >
#include < Servo.h >

Definierar för avståndet behandlingen funktion av bot.
#define turn() (left_dist > = right_dist)? go_left (): go_right)
#define microsecondsToCentimeters(microseconds) (osignerade långa) mikrosekunder / 29,1 / 2,0
#define MIN_ACTION_DIST 20 / / 20 cm
#define MIN_AWAY_DIST 20 / / 20cm från bot

Ändra dessa definierar om du använder olika pins
#define ECHO_PIN 8 / / Digital stift 2
#define TRIGGER_PIN 3 / / Digital stift 3
#define SERVO_LR 4 / / Pin för vänster/höger scan servo
#define pinAIN1 5 / / definiera I1 gränssnitt
#define pinAIN2 6 / / definiera I2 gränssnitt
#define pinBIN1 9 / / definiera I3 gränssnitt
#define pinBIN2 11 / / definiera I4 gränssnitt
#define MODE_PIN 2

Bot lägen
#define MODE_AVOID 0
#define MODE_FORCE 1

Speed definierar
#define MAXFORWARDSPEED 225 / / Max hastighet vi vill flytta fram
#define MAXBACKWARDSPEED 225 / / Max reverse hastighet
#define TOPSPEED 255 / / används för att omvandla bättre på mattan och grövre ytor.

Olika tidsfördröjningar används för körning och servo
#define TURNDELAY 475
#define BACKUPDELAY 400
#define SERVOMOVEDELAY 200
#define SERVOSEARCHDELAY 85
#define DEBOUNCE_TM 20 / / 20ms

/*
Globals område.
*/

Skapa de motor, servo objekt att samverka med
L9110_Motor motor_left (pinAIN1, pinAIN2); Vänster motor objekt skapas
L9110_Motor motor_right (pinBIN1, pinBIN2); Skapa rätt motor objekt
Servo sensor_servo; Skapa ett servo objekt för avstånd sensor

Globala variabler
byte sweep_pos = 0; Aktuella position sensor servo
byte pos_index = 90.
byte läge = MODE_AVOID;
byte mode_change = sant;
osignerade långa last_pin_change;
osignerade långa left_dist, right_dist; Avståndet mätt vänster och höger

funktion för att hantera inställningsreglaget med debounce
void checkMode)
{
byte mode_val = digitalRead (MODE_PIN);

om ((lång)(millis () - last_pin_change) > = DEBOUNCE_TM) {
last_pin_change = millis ();
Förändringar i läge bot är i.
om (mode_val == låg)
läge = MODE_AVOID;

om (mode_val == hög)
läge = MODE_FORCE;

mode_change == true;
}
}

Ogiltiga inställningar)
{
Avkommentera om du behöver felsöka.
Serial.BEGIN (9600); Ange Serial monitor på 9600 baud
Serial.println ("My Följ/undvika bot är startande upp!");

Se till att motorerna är av början
stoppa ();

sensor_servo.attach (SERVO_LR); Bifoga servo SERVO_LR
sensor_servo.write (90). Inställd den mellersta (neutral) pos servo

Ställa in lägen för avstånd sensor stift
pinMode (ECHO_PIN, indata); Ställ in echo pin som indata
pinMode (TRIGGER_PIN, OUTPUT); Ange trigger pin
pinMode (MODE_PIN, indata); Inställda läge pin som indata

Dröjsmål att ge användartid att göra justeringar. Ta bort efter gjort.
fördröjning (30000);
}

Ogiltig loop)
{
checkMode (); Läs aktuella switch-värdet

Om läget förändrats, centrera sensor servo
om (mode_change == true) {
mode_change = false;
pos_index = 90.
sweep_pos = 0;
sensor_servo.write (pos_index);
}

om (läge == MODE_AVOID)
undvika (); Försök att inte slå något!

om (läge == MODE_FORCE)
kraft (); Håll borta från handen!
}

void undvika)
{
osignerade långa dist_fwd;

Rotera avståndet sensorn som vi kör längs
rotate_sensor ();

De servo möjlighet att få placera för att få fast
fördröjning (SERVOSEARCHDELAY);

Få en läsning från nuvarande sensor riktning
dist_fwd = ping ();
Serial.Print ("avstånd sensor läsa:");
Serial.println (dist_fwd);

Gå framåt samtidigt som ingenting är i avstånd sensorerna läser område
om (dist_fwd > MIN_ACTION_DIST || dist_fwd == 0)
{
go_forward ();
}
annat / / det är något i sensorerna läsa område
{
stoppa (); Stanna!
go_backward (); Backa upp lite
fördröjning (BACKUPDELAY);
stoppa (); Stanna!

sensor_read (); Läs avstånd vänster och höger

vända (); Vända mot den tydligaste väg
fördröjning (TURNDELAY);
stoppa ();

Återställa till mellanläge innan du flyttar igen
pos_index = 90.
sweep_pos = 0;
sensor_servo.write (pos_index);
}
}

void kraft)
{
osignerade långa obj_dist;

obj_dist = ping ();
Serial.Print ("avstånd sensor läsa:");
Serial.println (obj_dist);

Gå framåt samtidigt som ingenting är i avstånd sensorerna läser område
om (obj_dist > = (MIN_AWAY_DIST + 20)) {
stoppa ();
go_forward ();
} else om (obj_dist < = (MIN_AWAY_DIST + 5)) {
stoppa ();
go_backward ();

Återställa till mellanläge innan du flyttar igen
pos_index = 90.
sweep_pos = 0;
sensor_servo.write (pos_index);
}

fördröjning (250);
}

Läs sensorn efter vi hitta något i vägen. Detta hjälper till att hitta en ny
sökväg
void sensor_read)
{
Serial.println ("Server på 40 deg...");
sensor_servo.write (40);
fördröjning (SERVOMOVEDELAY);
right_dist = ping (); Ser till höger

Serial.println ("Servo på 140 deg...");
sensor_servo.write (140);
fördröjning (SERVOMOVEDELAY);
left_dist = ping (); Titta till vänster

Ställa in servo tillbaka till center pos
Serial.println ("Servo på 90 deg...");
sensor_servo.write (90).
}

Rotera sensor servo på 45deg steg
void rotate_sensor)
{
om (sweep_pos < = 0) {
pos_index = 45;
}
annars om (sweep_pos > = 180) {
pos_index = -45;
}

Serial.Print ("pos_index =");
Serial.println (pos_index);
sweep_pos += pos_index;
Serial.Print ("sweep_pos =");
Serial.println (sweep_pos);
sensor_servo.write (sweep_pos);
}

Läs HC-SR04 uSonic sensorn
osignerade långa ping)
{
Utlösa uSonic sensorn (HC-SR04) att skicka ut en ping
digitalWrite (TRIGGER_PIN, låg);
delayMicroseconds (5).
digitalWrite (TRIGGER_PIN, hög);
delayMicroseconds (10).
digitalWrite (TRIGGER_PIN, låg);

Mät hur lång ping tog och konvertera till cm's
Return (microsecondsToCentimeters (pulseIn (ECHO_PIN, hög)));
}

void go_forward)
{
Serial.println ("framöver...");

Ramp motorer upp till hastigheten.
Hjälp med spining ut på vissa ytor och ware och tare på GM: s
ramp_it_up (MAXFORWARDSPEED, framåt, bakåt);

Set för den inställda hastigheten alla bara incase rampen förra moms var inte alla
det.
motor_left.setSpeed (MAXFORWARDSPEED);
motor_right.setSpeed (MAXFORWARDSPEED);
motor_left.Run (FORWARD| UTGÅVA);
motor_right.Run (BACKWARD| UTGÅVA);
}

void go_backward)
{
Serial.println ("går bakåt...");

Ramp motorer upp till hastigheten.
Hjälp med spining ut på vissa ytor och ware och tare på GM: s
ramp_it_up (MAXBACKWARDSPEED, bakåt, framåt);

Set för den inställda hastigheten alla bara incase rampen förra moms var inte alla
det.
motor_left.setSpeed (MAXBACKWARDSPEED);
motor_right.setSpeed (MAXBACKWARDSPEED);
motor_left.Run (BACKWARD| UTGÅVA);
motor_right.Run (FORWARD| UTGÅVA);
}

void go_left)
{
Serial.println ("kommer vänster...");

Ramp motorer upp till hastigheten.
Hjälp med spining ut på vissa ytor och ware och tare på GM: s
ramp_it_up (TOPSPEED, bakåt, bakåt);

Set för den inställda hastigheten alla bara incase rampen förra moms var inte alla
det.
motor_left.setSpeed (TOPSPEED);
motor_right.setSpeed (TOPSPEED);
motor_left.Run (BACKWARD| UTGÅVA);
motor_right.Run (BACKWARD| UTGÅVA);
}

void go_right)
{
Serial.println ("kommer rätt...");

Ramp motorer upp till hastigheten.
Hjälp med spining ut på vissa ytor och ware och tare på GM: s
ramp_it_up (TOPSPEED, framåt, framåt);

Set för den inställda hastigheten alla bara incase rampen förra moms var inte alla
det.
motor_left.setSpeed (TOPSPEED);
motor_right.setSpeed (TOPSPEED);
motor_left.Run (FORWARD| UTGÅVA);
motor_right.Run (FORWARD| UTGÅVA);
}

void stopp)
{
Serial.println ("stopp!");
motor_left.setSpeed (0);
motor_right.setSpeed (0);
motor_left.Run (broms);
motor_right.Run (broms);
}

void ramp_it_up (uint8_t hastighet, uint8_t lf_dir, uint8_t rt_dir)
{
uint8_t ramp_val = 0, step_val = 0;

step_val = abs (hastighet / 4);
för (uint8_t jag = 0; jag < 4; i ++) {
ramp_val += step_val;
motor_left.setSpeed (ramp_val);
motor_right.setSpeed (ramp_val);
motor_left.Run (lf_dir| UTGÅVA);
motor_right.Run (rt_dir| UTGÅVA);
fördröjning (25).
}
}

Se Steg
Relaterade Ämnen

ATTiny2313 multi-mode ledde matrisen klockan

Detta är ett multi-mode klocka projekt baserat på attiny2313. Det använder en 8 x 8 led matris som display. med begränsad upplösning visar detta 12 timmars klocka tiden i 6 olika lägen.kretsen sysselsätter rad och kolumn multiplexing för att driva ly...

Arduino 4WD rover bluetooth kontrolleras av Android telefonen/tablett

Arduino 4WD bluetooth kontrollerad roverDetta är en enkel 4WD rover gjorde jag med Arduino.rover styrs med en android-telefon eller surfplatta via bluetooth. Med denna app kan du styra hastighet (med Arduino's pwm), köra den med accelerometern och må...

5 enkla sovrum Mods för under $100 och gratis råd

jag har använt rullstol för större delen av mitt liv. Jag har också en hyresgästen under större delen av mitt liv. Sammanställt dessa två saker och gränser kommer att drabbas. Hyresvärdar är inte vanligtvis öppna till stora förändringar på deras egen...

Multi-mode nyckel koppel

Varje dag bär är ett mycket omdiskuterat ämne - vad och hur du ska bära essentials. Oavsett hur min redovisade scenario förändringar, antalet en sak jag aldrig lov utan är mina nycklar--åtminstone med dem, jag kan fortfarande komma tillbaka in i huse...

Arduino multi-mode lampa med soft touch switch

i detta baserade Arduino projekt, kommer vi att bygga en lampa med flera lätta skärmar: färg sequencer, ljusreglering ljus, färg chaser, firelight - alla valda av en touch bar på kretskortet.Alla funktioner är gjort i programvaran, inklusive touch se...

NES ledde & fönster mod. Kosta under $5.

Verktyg som behövs:SkyddsglasögonMultimeterlödkolvlimpistolPhilips skruvmejselDremel roterande verktyg med drill bit och glasfiber cutoff hjulkniv att strippa trådtång med fräsarMaterial som behövs:glas bildram ($1 på dollar tree)10 del led-lampor ($...

Rover 5 Tank, Arduino Outdoor programmering utmaning

Hej killar/tjejerDetta projekt startade ursprungligen att se om vi kunde program ut egna avlägsen kontrollerade rover men förvandlas till mer sedan att vi beställde 3 Rover 5 enheter eftersom de verkar ha en mycket lätt att använda drivrutinen styrel...

Magiska lysdioder Box. Entertainment Device

Hej! Detta inlägg är att förklara det arbete under de senaste månaderna till ett ämne. Projektet har utformats och monteras av Eduardo Del Nogal, Pablo Pastor, Carlos Villagrasa, Jose Miguel Rios, Abraham Roldan och Javier Fuentes.Tanken av detta arb...

Boom och gripdon bot

Robotstyrda gripdon har alltid roliga saker att leka med. Lägga till en till en robot är som att ha en fjärrkontroll Tonka leksak från min barndom. I förflutnan, gripdon där en stor hanterar att bygga och konstruera, men med 3d-skrivare, CNC fräsar o...

Bättre CPU kylning

efter några de senaste google-ning och dator uppgraderingar jag har upptäckt ett sätt att få din CPU upp till 7 grader svalare.Steg 1: Delar som behövs För detta instructable behöver du följandeen $5-$10 80 mm eller större fall/CPU fan (jag använde e...

10GbE Mac arbetsstation för Phantom Cinestation

10 Gb Ethernet (multimode SC-LC fiber optic) Mac arbetsstation för användning med Phantom CineStation-X2SR och CineStream-X2SR. Cinestation stöder CineMag I eller II för Phantom Flex och Phantom HD Gold kameror.I detta instructable, jag ger steg för...

Hur till hacka och få HBC & USBLoader GX på 4.3

Hej! Detta är en guide för alla er människor som har få fel och andra saker samtidigt som man försöker att hacka deras 4.3 Wiis. Denna metod är mycket enkelt och det fungerar om du följer alla instruktioner noga! Så låt oss komma igång!Steg 1: Att få...

Mjuk några Wii (Version 1.0-4.3)

vad gör softmodding en wii göra?Jo är svaret på den frågan som... du kan spela backuper av spel om du förlorat din ursprungliga spel... (Som jag gör) Du kan spela N64, SNES och SEGA konsolspel på din wii! Med lämpliga emulatorer... och du kan använda...

Tålig ficklampa med trä Accent

Detta projekt är en fortsättning från min tidigare trä LED ficklampa-projektet. Du kan se länken till denna instructable projektet här:Även om tidigare trä ficklampan var en vacker produkt och hade många bra funktioner, hade den vissa begränsningar n...

Arduino Real tid väckarklocka med temperatur och LED belysning. Fjärrstyrda

Arduino klocka, med batteribackup (realtidsklocka), tid, datum, Alarm, temperatur, LCD utgång, IR-fjärr ingång, viloläge, LED-belysning (10 X) röd och blå multi-mode.Steg 1: Steg 1: delar listaArduino klocka, med batteribackup (realtidsklocka), tid,...

Formbara tyg för docka kläder

När jag var ung, jag ville göra kläder till mina dockor, men jag hade varken skickligheten eller koncentrationsförmåga att sy kläder. Nu när jag har tjejer i min egen, jag tittar på en av mina döttrar försöker drapera bitar av tyg över och runt henne...

Squareinator - en SN76489 Monosynth

Det hela började för några år sedan, när en vän gav mig en gammal RadioShack blisterförpackning från tidigt 1980-talet han fått på en hamfest - en SN76489 soundchip. Viss forskning visade det hade använts i tidiga hemdatorer och video spel system. Ka...

Fars dag LED slips

en slips kanske inte den mest originella fars dag present, men vad far kunde motstå en slips som gör honom stå från mängden som den här:Steg 1: Saker du behöver Detta är en tillämpning av "Tiny bärbara LED Kit" som jag producerat för kit utmanin...

Sätta en Cylon i den!

Förra året komedi skiss show "Portlandia" gjorde narr av en konst- och hantverk trend, där hantverk konstnärer skulle ta vanliga artiklar och "sätta en fågel på den". Jag föll offer för en liknande utveckling i geek folkmassan: ta en v...