Kazalo:
- Korak: Črna škatla
- 2. korak: Arduino
- Korak: Priključitev Arduina na Blackbox
- 4. korak: Ultrazvočni senzor
- 5. korak: Povezava senzorja na ploščici z Arduinom
- 6. korak: Ščit motorja
- Korak 7: Povežite ščit motorja z Arduinom
- 8. korak: Priključite 4 motorje in baterije na ščit
- 9. korak: Programirajte robota
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Kako zgraditi robota, ki se izogiba oviram
Korak: Črna škatla
prvi korak sem uporabil črno škatlo kot osnovo za svojega robota.
2. korak: Arduino
Arduino so možgani celotnega sistema in orkestrirajo naše motorje
Korak: Priključitev Arduina na Blackbox
Arduino sem pritrdil na črno škatlo z vročim lepilom
4. korak: Ultrazvočni senzor
Za izdelavo robota, ki se lahko sam premika, potrebujemo nekakšen vhod, senzor, ki ustreza našemu cilju. Ultrazvočni senzor je instrument, ki z ultrazvočnimi zvočnimi valovi meri razdaljo do predmeta. Ultrazvočni senzor uporablja pretvornik za pošiljanje in sprejemanje ultrazvočnih impulzov, ki prenašajo nazaj informacije o bližini predmeta
5. korak: Povezava senzorja na ploščici z Arduinom
Uporabil sem žice za povezovanje povezave med ploščo in arduinom.
Bodite pozorni, da ima lahko vaš ping senzor drugačno razporeditev zatičev, vendar mora imeti napetostni, ozemljitveni, sprožilni in odmevni zatič.
6. korak: Ščit motorja
Arduino plošče ne morejo same krmiliti enosmernih motorjev, ker so tokovi, ki jih ustvarjajo, prenizki. Za rešitev tega problema uporabljamo ščitnike motorjev. Ščit motorja ima 2 kanala, kar omogoča krmiljenje dveh enosmernih motorjev ali 1 koračni motor. … Z naslavljanjem teh zatičev lahko izberete kanal motorja za zagon, določite smer motorja (polarnost), nastavite hitrost motorja (PWM), ustavite in zaženete motor ter spremljate absorpcijo toka vsakega kanala
Korak 7: Povežite ščit motorja z Arduinom
Enostavno pritrdite ščit motorja na arduino z žicami senzorja
8. korak: Priključite 4 motorje in baterije na ščit
Vsak motorni ščit ima (vsaj) dva kanala, enega za motorje in enega za vir energije, povežite ju med seboj
9. korak: Programirajte robota
zaženite to kodo
#include #include
Sonar NewPing (TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motorja1 (1, MOTOR12_1KHZ); AF_DCMotor motorja2 (2, MOTOR12_1KHZ); AF_DCMotor motorja3 (3, MOTOR34_1KHZ); AF_DCMotor motorja4 (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 razdalja = 80; int speedSet = 0;
void setup () {
myservo.attach (10); myservo.write (115); zamuda (2000); distance = readPing (); zamuda (100); distance = readPing (); zamuda (100); distance = readPing (); zamuda (100); distance = readPing (); zamuda (100); }
void loop () {int distanceR = 0; int razdaljaL = 0; zamuda (40); if (razdalja <= 15) {moveStop (); zamuda (50); moveBackward (); zamuda (150); moveStop (); zamuda (100); distanceR = lookRight (); zamuda (100); distanceL = lookLeft (); zamuda (100);
if (distanceR> = distanceL) {turnRight (); moveStop (); } else {turnLeft (); moveStop (); }} else {moveForward (); } distance = readPing (); }
int lookRight () {myservo.write (50); zamuda (250); int distance = readPing (); zamuda (50); myservo.write (100); povratna razdalja; }
int lookLeft () {myservo.write (120); zamuda (300); int distance = readPing (); zamuda (100); myservo.write (115); povratna razdalja; zamuda (100); }
int readPing () {zakasnitev (70); int cm = sonar.ping_cm (); če (cm == 0) {cm = 200; } vrnitev cm; }
void moveStop () {motor1.run (RELEASE); motor2.run (RELEASE); motor3.run (RELEASE); motor4.run (RELEASE); } void moveForward () {
if (! goesForward) {goesForward = true; motor1.run (NAPREJ); motor2.run (NAPREJ); motor3.run (NAPREJ); motor4.run (NAPREJ); for (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); zamuda (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); zamuda (5); } void turnLeft () {motor1.run (NAZAJ); motor2.run (NAZAD); motor3.run (NAPREJ); motor4.run (NAPREJ); zamuda (500); motor1.run (NAPREJ); motor2.run (NAPREJ); motor3.run (NAPREJ); motor4.run (NAPREJ); }
void turnLeft () {motor1.run (NAZAJ); motor2.run (NAZAD); motor3.run (NAPREJ); motor4.run (NAPREJ); zamuda (500); motor1.run (NAPREJ); motor2.run (NAPREJ); motor3.run (NAPREJ); motor4.run (NAPREJ); }