Obsah:
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
Ako postaviť robot, ktorý sa vyhýba prekážke
Krok 1: Čierna skrinka
v prvom kroku som ako základ svojho robota použil čiernu skrinku.
Krok 2: Arduino
Arduino je mozgom celého systému a organizuje naše motory
Krok 3: Pripojenie Arduina k Blackboxu
Arduino som pripevnil na blackbox pomocou horúceho lepidla
Krok 4: Ultrazvukový senzor
Na to, aby sme robota, ktorý sa dokáže sám pohybovať, potrebujeme nejaký vstup, senzor, ktorý vyhovuje nášmu cieľu. Ultrazvukový senzor je nástroj, ktorý meria vzdialenosť k objektu pomocou ultrazvukových zvukových vĺn. Ultrazvukový senzor používa prevodník na odosielanie a príjem ultrazvukových impulzov, ktoré prenášajú späť informácie o blízkosti objektu
Krok 5: Breadboard pripojenie senzora k Arduinu
Na prepojenie medzi doskou a arduinom som použil drôty.
Dávajte pozor, aby váš snímač ping mal iné rozloženie pinov, ale mal by mať napäťový pin, uzemňovací kolík, spúšťací kolík a echo kolík.
Krok 6: Motorový štít
Dosky Arduino nedokážu ovládať jednosmerné motory samy, pretože prúdy, ktoré generujú, sú príliš nízke. Na vyriešenie tohto problému používame štíty motora. Štít motora má 2 kanály, čo umožňuje ovládanie dvoch jednosmerných motorov alebo 1 krokový motor. … Adresovaním týchto pinov môžete vybrať kanál motora, ktorý chcete spustiť, určiť smer motora (polaritu), nastaviť otáčky motora (PWM), zastaviť a naštartovať motor a monitorovať prúdovú absorpciu každého kanála
Krok 7: Pripojenie štítu motora k Arduinu
Jednoducho pripevnite štít motora na arduino pomocou zvlnených vodičov snímača
Krok 8: Pripojenie 4 motorov a batérií k štítu
Každý štít motora má (najmenej) dva kanály, jeden pre motory a jeden pre zdroj energie, prepojte ich navzájom
Krok 9: Naprogramujte robota
spustite tento kód
#include #include
NewPing sonar (TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DC Motor motora1 (1, MOTOR12_1KHZ); AF_DC Motor motora2 (2, MOTOR12_1KHZ); AF_DC Motor motora3 (3, MOTOR34_1KHZ); AF_DC Motor motora4 (4, MOTOR34_1KHZ); Servo myservo;
#define TRIG_PIN A2 #define ECHO_PIN A3 #define MAX_DISTANCE 150 #define MAX_SPEED 100 #define MAX_SPEED_OFFSET 10
boolean goesForward = false; vnútorná vzdialenosť = 80; int speedSet = 0;
neplatné nastavenie () {
myservo.attach (10); myservo.write (115); oneskorenie (2000); vzdialenosť = readPing (); oneskorenie (100); vzdialenosť = readPing (); oneskorenie (100); vzdialenosť = readPing (); oneskorenie (100); vzdialenosť = readPing (); oneskorenie (100); }
prázdna slučka () {int vzdialenosťR = 0; int vzdialenosťL = 0; oneskorenie (40); if (vzdialenosť <= 15) {moveStop (); oneskorenie (50); moveBackward (); oneskorenie (150); moveStop (); oneskorenie (100); vzdialenosťR = lookRight (); oneskorenie (100); vzdialenosťL = lookLeft (); oneskorenie (100);
if (distanceR> = distanceL) {turnRight (); moveStop (); } else {turnLeft (); moveStop (); }} else {moveForward (); } vzdialenosť = readPing (); }
int lookRight () {myservo.write (50); oneskorenie (250); int vzdialenosť = readPing (); oneskorenie (50); myservo.write (100); vzdialenosť návratu; }
int lookLeft () {myservo.write (120); oneskorenie (300); int vzdialenosť = readPing (); oneskorenie (100); myservo.write (115); vzdialenosť návratu; oneskorenie (100); }
int readPing () {oneskorenie (70); int cm = sonar.ping_cm (); ak (cm == 0) {cm = 200; } vrátiť cm; }
void moveStop () {motor1.run (RELEASE); motor2.run (UVOĽNENIE); motor3.run (UVOĽNENIE); motor4.run (UVOĽNENIE); } void moveForward () {
if (! goesForward) {goesForward = true; motor1.run (Vpred); motor2.run (Vpred); motor3.run (Vpred); motor4.run (Vpred); pre (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); oneskorenie (5); }}}
void moveBackward () {goesForward = false; motor1.run (BACKWARD); motor2.run (BACKWARD); motor3.run (BACKWARD); motor4.run (BACKWARD); pre (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); oneskorenie (5); } void turnLeft () {motor1.run (BACKWARD); motor2.run (BACKWARD); motor3.run (Vpred); motor4.run (Vpred); oneskorenie (500); motor1.run (Vpred); motor2.run (Vpred); motor3.run (Vpred); motor4.run (Vpred); }
void turnLeft () {motor1.run (BACKWARD); motor2.run (BACKWARD); motor3.run (Vpred); motor4.run (Vpred); oneskorenie (500); motor1.run (Vpred); motor2.run (Vpred); motor3.run (Vpred); motor4.run (Vpred); }