Robotul arduino - 3

De la ultima înregistrare (www.drive2.ru/b/2540618/), robotul sa schimbat - a devenit o mașină cu patru roți cu valoare totală. Și i-a permis să încerce cel mai simplu lucru pe care-l poate - conduce "programul".

Cel mai simplu lucru care vine în minte este de a face "opt", "pătrate", "cercuri" ...
Nu există nici un motiv să nu încercați!

Dar înainte de a începe să scriu, aș sfătui să citiți:
- despre ce ar trebui să compună schița;
- ce sunt contactele ARDUINO și modul în care pot fi utilizate;
- ce este PWM.
Și, în general, este bine să te familiarizezi cu regulile de formă bună atunci când scrii schițe - se dovedesc a fi acolo!
Pentru aceasta, mai întâi recomand cartea lui Simon Monk "Programarea ARDUINO".

În plus față de această carte, puteți și ar trebui să recomandați cartea celebrului "Arduinchik" Jeremy Bloom "Învățarea ARDUINO": www.bhv.ru/books/book.php?id=193070.

Fiul meu și cu mine, după ce am citit cărțile, am scris o simplă "schiță" pentru a forța ROBOTYAG să meargă în jurul pieței.
Algoritmul "pătratului":
- Drept;
- virați la stânga;
- Drept;
- virați la stânga;
- Drept;
- virați la stânga;
- Drept;
- Stop!

Schița însăși este simplă:
1. Am stabilit numerele PIN-urilor ARDUINO pentru controlul motorului - Vă reamintesc că motoarele șoferului au comenzi înainte și înapoi, viteza de rotație este stabilită de "canale" separate - toate acestea sunt prescrise la începutul schiței.
NOTĂ: Conductoarele de conectare a conducătorului auto în toate schițele sunt aceleași cu cele ale majorității senzorilor.
2. În SETUP:
- Configurați parametrii ieșirilor ARDUINO - definiți-i ca "ieșiri" - OUTPUT.
- Noi scriem "algoritmul" mișcării robotului de-a lungul pătratului, așa cum a scris mai sus ...
Particularitatea acestei schițe este că secțiunea LOOP este goală! Deoarece dacă am plasat "algoritmul" mișcării nu în SETUP, care este executat doar o dată când începe schița și în LOOP, robotul se va mișca de-a lungul "pătratului" infinit ...

schiță:
[Cod]
// Mergem în jurul pieței
// *********************** Setarea terminalelor pentru motoare ********************** ***
int MotorLeftSpeed ​​= 5; // Stânga (A) motor SPEED - ENA
int MotorLeftForward = 4; // motorul stânga (A) FORWARD - IN1
int MotorLeftBack = 2; // motorul stânga (A) BACK - IN2
int MotorRightForward = 8; // Motor dreapta (B) FORWARD - IN3
int MotorRightBack = 7; // Motor dreapta (B) BACK - IN4
int MotorRightSpeed ​​= 6; // Motor dreapta (B) SPEED - ENB

pinMode (MotorRightForward, OUTPUT);
pinMode (MotorRightBack, OUTPUT);
pinMode (MotorRightSpeed, OUTPUT);

// ***************************** Mutarea de-a lungul "Piața" ************** *************
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, HIGH);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, LOW);
analogWrite (MotorRightSpeed, 200);
analogWrite (MotorLeftSpeed, 200);
întârziere (1000);
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, LOW);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, HIGH);
analogWrite (MotorRightSpeed, 140);
analogWrite (MotorLeftSpeed, 140);
întârziere (700); // Ora de "turn" - trebuie să configurați pentru un anumit ROBOT!
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, HIGH);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, LOW);
analogWrite (MotorRightSpeed, 200);
analogWrite (MotorLeftSpeed, 200);
întârziere (1000);
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, LOW);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, HIGH);
analogWrite (MotorRightSpeed, 140);
analogWrite (MotorLeftSpeed, 140);
întârziere (700); // Ora de "turn" - trebuie să configurați pentru un anumit ROBOT!
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, HIGH);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, LOW);
analogWrite (MotorRightSpeed, 200);
analogWrite (MotorLeftSpeed, 200);
întârziere (1000);
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, LOW);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, HIGH);
analogWrite (MotorRightSpeed, 140);
analogWrite (MotorLeftSpeed, 140);
întârziere (700); // Ora de "turn" - trebuie să configurați pentru un anumit ROBOT!
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, HIGH);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorLeftBack, LOW);
analogWrite (MotorRightSpeed, 200);
analogWrite (MotorLeftSpeed, 200);
întârziere (1000);
>
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftForward, HIGH);
digitalWrite (MotorRightBack, HIGH);
digitalWrite (MotorLeftBack, HIGH);
analogWrite (MotorRightSpeed, 0);
analogWrite (MotorLeftSpeed, 0);
>
>
// ***************************** CICLUL ****************** ***************
buclă voidă ()
// Pur și simplu goală - bucla nu se execută
>
[/ code]

În "ideal" ar trebui să se întâmple așa ceva:

Și în viață ... robotul tău se va ridica, orice ... "romb", "trapez", "triunghi", dar nu "pătrat"!
Și am fost așa ... și ceea ce vedeți este rezultatul multor încercări și iate!

Există multe motive!
Începând cu alimentarea bateriei!
Capacitatea bateriei scade treptat ... și dacă ai crezut că robotul este deja configurat ... în câteva călătorii, el începe să „nu dovorachivat» în colțuri ... când am înlocuiți bateria începe să se «predea» ...
Prin urmare, linia "timpului" turnului este marcată în schiță:
întârziere (700); // Ora de "turn" - trebuie să configurați pentru un anumit ROBOT!
ATENȚIE! Timpul în paranteze trebuie selectat individual pentru fiecare robot!

Dar asta nu e tot! Mai există probleme ...
Coeficient de aderență ...
ROBOTYAGA nostru că tipul de rezervor, dar asta e doar o foarte ușoare și cauciuc roți care se angajează în moduri diferite, cu o acoperire ... și nu există nici un ajutor - blocat!

Ei bine și încă un motiv - o diferență de caracteristici ale motoarelor!
Nu toate motoarele sunt la fel de "utile" ... Motive - poate că sa născut în acest fel ... poate că atunci când ați lipit firele la contactele motorului supraîncălzite și periile s-au schimbat ...
Dar această problemă poate fi rezolvată prin înlocuirea motoarelor.

Rezumat.
Datorită caracteristicilor sale, acest robot nu poate conduce "calitativ" programul.
Dar asta nu înseamnă că nu trebuie să încercați această schiță!
În primul rând, aceasta este una dintre cele mai ușoare căi de a anima un robot!
În al doilea rând, aceasta este cea mai simplă schiță care arată cum să controlați motoarele.
În al treilea - este un joc cu un copil - implicarea sa în acest proces - îi dați sarcina de a alege "timpul de întoarcere" care ar fi unghiul de întoarcere ... Începeți să veniți cu figuri noi ...

Ei bine, cum să stăpânești această mișcare, poți trece mai departe ...
Cred că la managementul IR.
www.drive2.ru/b/2818339/

Articole similare