Spisu treści:
- Krok 1: Czarna skrzynka
- Krok 2: Arduino
- Krok 3: Podłączanie Arduino do Blackbox
- Krok 4: Czujnik ultradźwiękowy
- Krok 5: Połączenie płytki prototypowej czujnika z Arduino
- Krok 6: Osłona silnika
- Krok 7: Podłączanie osłony silnika do Arduino
- Krok 8: Podłączanie 4 silników i akumulatorów do osłony
- Krok 9: Zaprogramuj robota
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Jak zbudować robota unikającego przeszkód
Krok 1: Czarna skrzynka
w pierwszym kroku użyłem czarnej skrzynki jako podstawy dla mojego robota.
Krok 2: Arduino
Arduino jest mózgiem całego systemu i steruje naszymi silnikami
Krok 3: Podłączanie Arduino do Blackbox
Arduino przykleiłem do blackboxa za pomocą gorącego kleju
Krok 4: Czujnik ultradźwiękowy
Aby stworzyć robota, który może poruszać się samodzielnie, potrzebujemy pewnego rodzaju wejścia, czujnika, który odpowiada naszemu celowi. Czujnik ultradźwiękowy to przyrząd, który mierzy odległość do obiektu za pomocą ultradźwiękowych fal dźwiękowych. Czujnik ultradźwiękowy wykorzystuje przetwornik do wysyłania i odbierania impulsów ultradźwiękowych, które przekazują informacje o bliskości obiektu
Krok 5: Połączenie płytki prototypowej czujnika z Arduino
Użyłem przewodów do męskiego połączenia między płytką stykową a arduino.
Zwróć uwagę, że twój czujnik ping może mieć inny układ pinów, ale powinien mieć pin napięcia, pin uziemienia, pin wyzwalający i pin echa.
Krok 6: Osłona silnika
Płyty Arduino nie mogą samodzielnie sterować silnikami prądu stałego, ponieważ generowane przez nie prądy są zbyt niskie. Aby rozwiązać ten problem stosujemy osłony silników. Osłona silnika posiada 2 kanały, co pozwala na sterowanie dwoma silnikami prądu stałego lub 1 silnik krokowy. … Adresując te piny, można wybrać kanał silnika do zainicjowania, określić kierunek silnika (polaryzację), ustawić prędkość silnika (PWM), zatrzymać i uruchomić silnik oraz monitorować pobór prądu przez każdy kanał
Krok 7: Podłączanie osłony silnika do Arduino
Po prostu przymocuj osłonę silnika do arduino za pomocą zgniecionych przewodów czujnika
Krok 8: Podłączanie 4 silników i akumulatorów do osłony
Każda osłona silnika ma (co najmniej) dwa kanały, jeden dla silników i jeden dla źródła zasilania, Połącz je względem siebie
Krok 9: Zaprogramuj robota
uruchom ten kod
#włącz #włącz
sonar NewPing (TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motor1(1, MOTOR12_1KHZ); AF_DCMotor motor2(2, MOTOR12_1KHZ); AF_DCMotor motor3(3, MOTOR34_1KHZ); AF_DCMotor motor4(4, MOTOR34_1KHZ); Serwo myservo;
#define TRIG_PIN A2 #define ECHO_PIN A3 #define MAX_DISTANCE 150 #define MAX_SPEED 100 #define MAX_SPEED_OFFSET 10
boolean goForward=false; odległość wewnętrzna = 80; int speedSet = 0;
pusta konfiguracja () {
myservo.attach(10); myservo.write(115); opóźnienie (2000); odległość = readPing(); opóźnienie (100); odległość = readPing(); opóźnienie (100); odległość = readPing(); opóźnienie (100); odległość = readPing(); opóźnienie (100); }
void loop() { int distanceR = 0; int odległośćL = 0; opóźnienie(40); if(odległość<=15) { moveStop(); opóźnienie(50); przesuńWstecz(); opóźnienie(150); przesuńStop(); opóźnienie (100); odległośćR = patrzPrawo(); opóźnienie (100); odległośćL = patrz w lewo(); opóźnienie (100);
if(odległośćR>=odległośćL) { skręt w prawo(); przesuńStop(); }else { turnLeft(); przesuńStop(); } }else { moveForward(); } odległość = readPing(); }
int lookRight() { myservo.write(50); opóźnienie(250); int dystans = readPing(); opóźnienie(50); myservo.write(100); odległość powrotu; }
int lookLeft() { myservo.write(120); opóźnienie(300); int dystans = readPing(); opóźnienie (100); myservo.write(115); odległość powrotu; opóźnienie (100); }
int readPing() { delay(70); int cm = sonar.ping_cm(); jeśli(cm==0) {cm = 200; } powrót cm; }
void moveStop() { motor1.run(RELEASE); motor2.run(RELEASE); motor3.run(RELEASE); motor4.run(RELEASE); } void przesuńdo przodu() {
if(!goesForward) { idzieForward=true; silnik1.uruchom(NAPRZÓD); silnik2.uruchom(NAPRZÓD); motor3.run (DO PRZODU); motor4.run(DO PRZODU); for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) { motor1.setSpeed(speedSet); motor2.setSpeed(speedSet); motor3.setSpeed (speedSet); motor4.setSpeed(speedSet); opóźnienie(5); } } }
void moveBackward() { goForward=false; silnik1.uruchom(WSTECZ); motor2.uruchom(WSTECZ); silnik3.uruchom(WSTECZ); motor4.run(WSTECZ); for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) { motor1.setSpeed(speedSet); motor2.setSpeed(speedSet); motor3.setSpeed (speedSet); motor4.setSpeed(speedSet); opóźnienie(5); } void turnLeft() { motor1.run(BACKWARD); motor2.uruchom(WSTECZ); motor3.run (DO PRZODU); motor4.run(DO PRZODU); opóźnienie (500); silnik1.uruchom(NAPRZÓD); silnik2.uruchom(NAPRZÓD); motor3.run (DO PRZODU); motor4.run(DO PRZODU); }
void turnLeft() { motor1.run(BACKWARD); motor2.uruchom(WSTECZ); motor3.run (DO PRZODU); motor4.run(DO PRZODU); opóźnienie (500); silnik1.uruchom(NAPRZÓD); silnik2.uruchom(NAPRZÓD); motor3.run (DO PRZODU); motor4.run(DO PRZODU); }