Sadržaj:
- Korak 1: Crna kutija
- Korak 2: Arduino
- Korak 3: Priključivanje Arduina na Blackbox
- Korak 4: Ultrazvučni senzor
- Korak 5: Povezivanje senzora na Arduino na matičnoj ploči
- 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 izmjena: 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 sistema i orkestrira naše motore
Korak 3: Priključivanje Arduina na Blackbox
Priključio 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: Povezivanje senzora na Arduino na matičnoj ploči
Koristio sam žice da povežem vezu 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 pin napona, uzemljenje, okidač i eho 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 štitove motora. Štitnik motora ima 2 kanala, što omogućava kontrolu 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 motorni štit 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
NewPing sonar (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_DCMotorni motor4 (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); kašnjenje (2000); distance = readPing (); kašnjenje (100); distance = readPing (); kašnjenje (100); distance = readPing (); kašnjenje (100); distance = 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); distanceL = lookLeft (); kašnjenje (100);
if (distanceR> = distanceL) {turnRight (); moveStop (); } else {turnLeft (); moveStop (); }} else {moveForward (); } distance = 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 () {kašnjenje (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); }