Seed sprida Robot (60 / 65 steg)

Steg 60: Program



Programmera Arduino med följande kod:

/*

Utsäde sprida Robot exempelkod

För mer information besök:

Denna kod är i public domain.

*/

int motorRotateCounter = 0; räknaren för antal motor rotationer
int hallState = 0; aktuell status för hall effekt sensor
int lastHallState = 0; tidigare tillstånd av hall effekt sensorn

fastställa variabler för varaktigheten av ping,
och avstånd resultatet i tum och centimeter:
lång varaktighet, tum, cm;

servo2 är ansluten till Arduino pin10
#define servo2control OCR1B

servo konstanter--trim som behövs
#define servo2null 2980

//////////

CONST int pingPin = 7.

//////////

int StoredMotorData = 0;

ändra detta nummer om du vill ändra mängden vänster / höger rotation - i millisekunder
int LeftRotation = 900;
int RightRotation = 1000;

hur snart roboten bromsar från hinder - i tum
int wallDistance = 15.

tätheten av ränder över gräsmattan
int nextRow = 1000;

void setup() {
pinMode (5, ingång); Hall effekt
pinMode(10,OUTPUT); servo PWM stift

TCCR1B = 0b00011010; Snabb PWM, topp i ICR1, /8 prescale (.5 uSec)
TCCR1A = 0b00100010; tydlig på Jämför match, snabb PWM
Om du använder pin 9 som normala ingång eller utgång, använda TCCR1A = 0b00100010
Om du använder stift 10 som normala ingång eller utgång, använda TCCR1A = 0b10000010
ICR1 = 39999; 40.000 klockor @.5 oss = 20mS
servo2control = servo2null; kontroller chip pin 16 ARDUINO stift 10

Setup kanal A
pinMode (12, OUTPUT); Initierar Motor kanal A stift
pinMode (9, OUTPUT); Initierar broms kanal A stift

Ställa in kanal B
pinMode (13, OUTPUT); Initierar Motor kanal A stift
pinMode (8, OUTPUT); Initierar broms kanal A stift

vänta 5 sekunder innan du går
Delay(5000);

ställa in inches ovanför ena foten
inches = 24.

Serial.BEGIN(9600);
}

void loop() {
disengageBrake();
driva fram
Forward();

Starta frö spridare servo
servo2control = 2000.
Delay(10);

checkForRotation();

PingRead();

PING sensor test
Serial.println(inches);

IF(inches < wallDistance) {

sluta köra
engageBrake();

stoppa utsäde spridaren
servo2control = servo2null;

vänta två sekunder
Delay(2000);

Kontrollera avståndet igen.
Detta är att redogöra för saker och ting framför den kort
och felaktiga avläsningar
PingRead();

om det är fortfarande något framför den, är det förmodligen staketet
IF(inches < wallDistance) {

vi spela in hur många rotationer motorn att få över gräsmattan
StoredMotorData = motorRotateCounter;

och sedan vi återställa räknaren motor rotation
motorRotateCounter = 0;

Aktivera motorn att flytta
disengageBrake();

Låt oss vända rätt
Right();

denna försening avgör mängden rotation.
från tester på trägolv är 1 sekund (1000 mikrosekunder) ungefär 90 grader.
måste förmodligen vara tweeked för gräsmatta. Ändra rotation värde ovan
att ange rotation fördröjning för hela koden.
Delay(RightRotation);

sluta köra
engageBrake();

//
DRIVA FRAM LITE HÄR
//
Delay(100);
disengageBrake();
Forward();
Delay(nextRow);
engageBrake();

//
Kolla avstånd - om väggen inom avstånd -> sedan stopp!!!
//

IF(inches < wallDistance) {

vänta två sekunder
Delay(2000);

Kontrollera avståndet igen.
Detta är att redogöra för saker och ting framför den kort
och felaktiga avläsningar
PingRead();

om det är fortfarande något framför den, är det förmodligen staketet
IF(inches < wallDistance) {

While(1) {};
}
}

//
rätt igen
//
Delay(500);
disengageBrake();
Right();
Delay(RightRotation);
engageBrake();

//
KÖRA FRAMÅT MOTORROTATIONS
ENGAGERA SERVO
//
servo2control = 2000.
disengageBrake();
medan ((StoredMotorData + 5) > motorRotateCounter) {
Forward();
Delay(50);
checkForRotation();
}

motorRotateCounter = 0;
StoredMotorData = 0;
engageBrake();
servo2control = servo2null;

//
Sväng vänster
//

Delay(500);
disengageBrake();
Left();
Delay(LeftRotation);
engageBrake();

//
DRIVA FRAM LITE HÄR
//
Delay(100);
disengageBrake();
Forward();
Delay(nextRow);
engageBrake();

//
Kolla avstånd - om väggen inom avstånd -> sedan stopp!!!
//

IF(inches < wallDistance) {

vänta två sekunder
Delay(2000);

Kontrollera avståndet igen.
Detta är att redogöra för saker och ting framför den kort
och felaktiga avläsningar
PingRead();

om det är fortfarande något framför den, är det förmodligen staketet
IF(inches < wallDistance) {

While(1) {};
}
}

//
vänster igen
//
Delay(500);
disengageBrake();
Left();
Delay(LeftRotation);
engageBrake();

vänta två sekunder innan de kör bil tillbaka
Delay(2000);
}
}
}

void checkForRotation() {
Läs ingångsstift hall effekt:
hallState = digitalRead(5);

Jämför tillståndet hall effekt till sitt tidigare tillstånd
om (hallState! = lastHallState) {
om staten har förändrats, öka räknaren
om (hallState == hög) {
om det aktuella läget är hög då sensorn
wend från av till på:
motorRotateCounter ++;
Serial.Print ("antal halva rotationer skjuter:");
Serial.println(motorRotateCounter);
}
}
spara det aktuella läget som den förra staten,
för nästa gång genom öglan
lastHallState = hallState;
}

/////////////////////???? ////
kör motoriska funktioner / /
/////////////////////////////

void engageBrake() {
digitalWrite 8, hög. Engagera sig bromsen för kanal A
digitalWrite (9, hög). Engagera sig bromsen för kanal B
}

void disengageBrake() {
digitalWrite 8, låg. Engagera sig bromsen för kanal A
digitalWrite (9, låg). Engagera sig bromsen för kanal B
}

void forward() {

Motor en framåt @ full fart
digitalWrite 12, låg. Upprättar riktning framåt av kanal A
digitalWrite (9, låg). Lossa bromsen för kanal A
analogWrite (3, 255); Snurrar motorn på kanal A i full fart

Motor B bakåt @ halvfart
digitalWrite 13, hög. Upprättar bakåt riktning av kanal B
digitalWrite 8, låg. Lossa bromsen för kanal B
analogWrite (11, 255); Snurrar motorn på kanal B på halvfart

}

void backward() {

Motor en framåt @ full fart
digitalWrite 12, hög. Upprättar riktning framåt av kanal A
digitalWrite (9, låg). Lossa bromsen för kanal A
analogWrite (3, 255); Snurrar motorn på kanal A i full fart

Motor B bakåt @ halvfart
digitalWrite 13, låg. Upprättar bakåt riktning av kanal B
digitalWrite 8, låg. Lossa bromsen för kanal B
analogWrite (11, 255); Snurrar motorn på kanal B på halvfart

}

void left() {

Motor en framåt @ full fart
digitalWrite 12, hög. Upprättar riktning framåt av kanal A
digitalWrite (9, låg). Lossa bromsen för kanal A
analogWrite (3, 255); Snurrar motorn på kanal A i full fart

Motor B bakåt @ halvfart
digitalWrite 13, hög. Upprättar bakåt riktning av kanal B
digitalWrite 8, låg. Lossa bromsen för kanal B
analogWrite (11, 255); Snurrar motorn på kanal B på halvfart

}

void right() {

Motor en framåt @ full fart
digitalWrite 12, låg. Upprättar riktning framåt av kanal A
digitalWrite (9, låg). Lossa bromsen för kanal A
analogWrite (3, 255); Snurrar motorn på kanal A i full fart

Motor B bakåt @ halvfart
digitalWrite 13, låg. Upprättar bakåt riktning av kanal B
digitalWrite 8, låg. Lossa bromsen för kanal B
analogWrite (11, 255); Snurrar motorn på kanal B på halvfart

}

/////////////////////////////////
distansera sensor funktioner / /
/////////////////////////////////

void PingRead() {

PING))) utlöses av en hög puls av 2 eller fler mikrosekunder.
Ge en kort låg puls förhand för att säkerställa en ren hög puls:
pinMode (pingPin, produktionen);
digitalWrite (pingPin, låg);
delayMicroseconds(2);
digitalWrite (pingPin, hög);
delayMicroseconds(5);
digitalWrite (pingPin, låg);

Samma PIN-koden används för att läsa signalen från PING))): en hög
puls vars längd är tid (i mikrosekunder) från den sändande
ping till mottagning av dess eko av ett objekt.
pinMode (pingPin, ingång);
längd = pulseIn (pingPin, hög);

konvertera tiden till ett avstånd
tum = microsecondsToInches(duration);

Delay(100);

}

för PING andra till tum konvertering

lång microsecondsToInches(long microseconds)
{
Enligt Parallaxs datablad för PING))), det finns
73.746 mikrosekunder per tum (dvs. ljud resor på 1130 fot per
det andra). Detta ger vägsträcka som ping, utgående
och tillbaka, så vi delar med 2 att få distansera av hindret.
Se: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
återvända mikrosekunder / 74 / 2;
}

Se Steg
Relaterade Ämnen

RC lastbil på Arduino Robot w / flera sensorer

detta instructable täcker omvandling av en RC lastbil till en Arduino kontrollerade robot. Min avsikt när början detta projekt var att A) Läs mer om Arduino och programmering B) bygga en pålitlig låg kostnad plattform att utveckla C) spenderar mer pe...

PulleyBot: En remskiva Driven Robot

PulleyBot är en enkel, enhetlig manöverdonet 3D tryckta leksak med en växellåda som helt består av trissa system. Detta instructable är en handledning om hur man monterar PulleyBot, men om du är intresserad av remskiva, kabel och kedjan mekanismer, d...

Barns Robot kostym med ljudeffekter, godis detektor och mer

jag gjorde min dotter denna robot kostym till halloween. Jag blev inspirerad av denna Kid Robot kostym. Jag tog mig i lite av en annan riktning och till några mer nyheter såsom lampor i antenner och öron, en big button-kontrollen med en ljudeffekt fö...

Sprida kärlek med robotar

en byggsats för kärlek...Idén om en "kärlek Robot" ursprungligen planterades i mitt huvud av min dotter Moraḯtika arbete "En Robot gjord av kärlek och med kärlek", som visas i den tredje bilden nedan. Så jag började göra små robotar so...

Arduino "Pick N plats" Android Robot

Plocka N plats robot är en grundläggande nivå robot för nybörjare och ledare att lära dig allt om lagar & begrepp av fysik, elektronik och mekanik därav det hjälper en att ärva denna kunskap som man genomför den. Det hjälper dig att få en känsla av v...

BIGFOOT Robot

So I give you The Bigfoot. BIGFOOT står för Ballistically jagmprovised Grund Fltet Operated Omni ändamål Tank (Duh!). Om du vill läsa mer om BIGFOOT projektet, vänligen följ denna länk till min hemsida och gärna diskutera några frågor har du här elle...

Adafruit Adabot Robot hjärtat Plushie

vi < 3 Adafruit. Precis som det finns legioner av iblers som är fans av instructables, för lojala fans av Adafruit (Jösses, vad du kallar dem, adafruits?) gör din egen Adafruit Adabot Robot hjärtat Plushie. Alla behöver en kram.(lim är inte torr på g...

Modulära Robotic Hand & Arm (med Extended Range of Motion) (3D tryckt)

Hej alla! Detta är min prototyp hand och arm protes som jag har designat i flera månader nu. Det är fortfarande lite av ett pågående arbete, och [[eftersom jag slutar upp med college klasser för terminen]] jag ännu inte har haft tid att utveckla alla...

Noren ingen biru japanska Bricobart öl Instructables Robot Banner

Domo arigato, Instructables Roboto. Meddela till besökare att du kör ett välrenommerade etablissemang... vänta, åtminstone en som har öl. Noren är traditionella japanska banners/gardiner hängs upp i dörröppningar eller entréer. De är utilitaristiskt...

Robot-O Awesome-O skiva-O Disco roboten (dekoration)

Min systerdotter kommer att ha en Disco tema födelsedagsfest, och som lyser upp disco dekorationer kan vara dyrt, beslöt jag att göra några häftiga dekorationer själv. Under semestern fanns det en TV kommersiell featuring en disco robot http://www.yo...

Elektriskt ledande gummi: Göra Touch känsliga Robot hud

göra elektriskt ledande gummi och använda den för att skapa en flexibel touch känsliga robot hud. Den resulterande hud kan sträckte sig över en ram eller monterade på fasta ytor. Det kan också monteras på böjda ytor eller kläder.Det är beröringskänsl...

Tank Robot: Kör en tank med motorer och styrenheter drivs av Kinoma skapa

Vi byggde en mini tank och styrenheter med två Kinoma skapa enheter som kommunicerar över CoAP (begränsad Application Protocol). Handtagen rotera potentiometrar som effekt spänning utdata. Förändringar i spänning översätts till varierande hastigheter...

Livet Seeder - göra en inomhus seed starter

Hej alla,i denna instrucable kommer jag att dela med dig min nyaste design, liv seeder..vad? livet seeder är en enkel inomhus frö startar maskinen. den har en grundläggande ram med inbyggda lampor och fläktar. Det är helt justerbar eftersom anläggnin...

Rymden Robot barns Halloween kostym - (hela kroppen)

Halloween kommer närmare och närmare, och barnen behöver sina egna nya Halloween kostymer! Gör det lätt att farkosten, billig robot kostym som kommer att göra ditt barn stå från mängden!Steg 1: Vad du behöver Material:- 1 gul hink som borde passa per...

Limning med E6000 - Instructable Robot Magnet

Jag använder lim på, ganska mycket, dagligen. Om det är att reparera objekt, costuming eller bara skapa, den förbrukar en stor del av tiden. Missförstå mig inte, jag älskar att limma saker tillsammans. Jag har funnit att E6000 lim är lämplig för de f...

PicAxe MakerFaire särskilda Robot

detta är en speciell Maker Faire edition robot kit designad av Låt oss göra robotar och Raket varumärke Studios, och baserat på PICAXE-08 Motor förare ombord.Syftet med denna robot kit är att ge nya robot beslutsfattare tillgång till en snabb och enk...

Ada Robotic Hand - Open Bionics

Detta är en steg för steg guide om hur man gör en öppen Bionics Ada robotic hand. Detta härrör från Dextrus robotic hand, Öppna Hand projekt. Det förutsätts du ha antingen beställde Ada robotic hand kit eller har tillgång till en 3D-skrivare och plan...

Robotic Wheatley

Hey Guys! Så detta är det största projektet som jag har arbetat på hittills, kombinera alla min konstruktion, elektroniska och målning färdigheter. Jag hade en absolut skitkul att göra den här killen, jag lärt mig så mycket under detta projekt och vi...

Instructables Robot stickad disktrasa

Jag har nyligen upptäckt glädjen av stickning disktrasor. Jag publicerade tidigare hur man gör en mycket grundläggande stickade disktrasa och nu vill jag dela med mig av Instructables Robot mönstret jag gjorde upp. Det är bara min andra ursprungliga...