Sadržaj:
- Korak 1: Crna kutija
- Korak 2: Arduino
- Korak 3: Priključivanje Arduina na Blackbox
- Korak 4: Ultrazvučni senzor
- Korak 5: Spajanje senzora na matičnu ploču s Arduinom
- Korak 6: Štit motora
- Korak 7: Povezivanje štita motora s Arduinom
- Korak 8: Spajanje 4 motora i baterija na štit
- Korak 9: Programirajte robota
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Kako izgraditi robota koji izbjegava prepreke
Korak 1: Crna kutija
prvi korak sam koristio crnu kutiju kao bazu za svog robota.
Korak 2: Arduino
Arduino je mozak cijelog sustava i orkestrira naše motore
Korak 3: Priključivanje Arduina na Blackbox
Spojio sam arduino na crnu kutiju vrućim ljepilom
Korak 4: Ultrazvučni senzor
Da bismo napravili robota koji se može sam kretati, potrebna nam je neka vrsta ulaza, senzora koji odgovara našem cilju. Ultrazvučni senzor je instrument koji mjeri udaljenost do objekta pomoću ultrazvučnih zvučnih valova. Ultrazvučni senzor koristi pretvarač za slanje i primanje ultrazvučnih impulsa koji prenose povratne informacije o blizini objekta
Korak 5: Spajanje senzora na matičnu ploču s Arduinom
Koristio sam žice za povezivanje veze između matične ploče i arduina.
Obratite pažnju da vaš ping senzor može imati drugačiji raspored pinova, ali bi trebao imati naponski pin, pin za uzemljenje, okidač i echo pin.
Korak 6: Štit motora
Arduino ploče ne mogu same upravljati istosmjernim motorima, jer su struje koje generiraju preniske. Za rješavanje ovog problema koristimo štitnike motora. Štitnik motora ima 2 kanala, što omogućuje upravljanje s dva istosmjerna motora, ili 1 koračni motor. … Adresiranjem ovih pinova možete odabrati kanal motora za pokretanje, odrediti smjer motora (polaritet), postaviti brzinu motora (PWM), zaustaviti i pokrenuti motor i pratiti trenutnu apsorpciju svakog kanala
Korak 7: Povezivanje štita motora s Arduinom
Jednostavno pričvrstite štitnik motora na arduino sa zgužvanim žicama senzora
Korak 8: Spajanje 4 motora i baterija na štit
Svaki štit motora ima (najmanje) dva kanala, jedan za motore, a jedan za izvor napajanja, povežite ih međusobno
Korak 9: Programirajte robota
pokrenite ovaj kod
#include #include
Sonar NewPing (TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motora1 (1, MOTOR12_1KHZ); AF_DCMotor motora2 (2, MOTOR12_1KHZ); AF_DCMotor motora3 (3, MOTOR34_1KHZ); AF_DCMotor 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; int udaljenost = 80; int speedSet = 0;
void setup () {
myservo.attach (10); myservo.write (115); odgoda (2000); udaljenost = readPing (); kašnjenje (100); udaljenost = readPing (); kašnjenje (100); udaljenost = readPing (); kašnjenje (100); udaljenost = readPing (); kašnjenje (100); }
void loop () {int distanceR = 0; int udaljenostL = 0; kašnjenje (40); if (udaljenost <= 15) {moveStop (); kašnjenje (50); moveBackward (); kašnjenje (150); moveStop (); kašnjenje (100); distanceR = lookRight (); kašnjenje (100); udaljenostL = lookLeft (); kašnjenje (100);
if (distanceR> = distanceL) {turnRight (); moveStop (); } else {turnLeft (); moveStop (); }} else {moveForward (); } udaljenost = readPing (); }
int lookRight () {myservo.write (50); kašnjenje (250); int udaljenost = readPing (); kašnjenje (50); myservo.write (100); povratna udaljenost; }
int lookLeft () {myservo.write (120); kašnjenje (300); int udaljenost = readPing (); kašnjenje (100); myservo.write (115); povratna udaljenost; kašnjenje (100); }
int readPing () {odgoda (70); int cm = sonar.ping_cm (); ako (cm == 0) {cm = 200; } return cm; }
void moveStop () {motor1.run (RELEASE); motor2.run (RELEASE); motor3.run (RELEASE); motor4.run (RELEASE); } void moveForward () {
if (! goesForward) {goesForward = true; motor1.run (NAPRIJED); motor2.run (NAPRIJED); motor3.run (NAPRIJED); motor4.run (NAPRIJED); for (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); kašnjenje (5); }}}
void moveBackward () {goesForward = false; motor1.run (NAZAD); motor2.run (NAZAD); motor3.run (NAZAD); motor4.run (NAZAD); for (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); kašnjenje (5); } void turnLeft () {motor1.run (NAZAD); motor2.run (NAZAD); motor3.run (NAPRIJED); motor4.run (NAPRIJED); kašnjenje (500); motor1.run (NAPRIJED); motor2.run (NAPRIJED); motor3.run (NAPRIJED); motor4.run (NAPRIJED); }
void turnLeft () {motor1.run (NAZAD); motor2.run (NAZAD); motor3.run (NAPRIJED); motor4.run (NAPRIJED); kašnjenje (500); motor1.run (NAPRIJED); motor2.run (NAPRIJED); motor3.run (NAPRIJED); motor4.run (NAPRIJED); }