Spisu treści:

Zrobotyzowany samochód omijający przeszkodę: 9 kroków
Zrobotyzowany samochód omijający przeszkodę: 9 kroków

Wideo: Zrobotyzowany samochód omijający przeszkodę: 9 kroków

Wideo: Zrobotyzowany samochód omijający przeszkodę: 9 kroków
Wideo: РОБОТ ПЫЛЕСОС YEEDI K650 (YEEDI K651G) - НЕДОРОГОЙ, С УМНОЙ ВЛАЖНОЙ УБОРКОЙ | ПОДРОБНЫЙ ОБЗОР И ТЕСТ 2024, Lipiec
Anonim
Samochód zrobotyzowany omijający przeszkodę
Samochód zrobotyzowany omijający przeszkodę
Samochód zrobotyzowany omijający przeszkodę
Samochód zrobotyzowany omijający przeszkodę

Jak zbudować robota unikającego przeszkód

Krok 1: Czarna skrzynka

Czarna skrzynka
Czarna skrzynka

w pierwszym kroku użyłem czarnej skrzynki jako podstawy dla mojego robota.

Krok 2: Arduino

Arduino
Arduino

Arduino jest mózgiem całego systemu i steruje naszymi silnikami

Krok 3: Podłączanie Arduino do Blackbox

Podłączanie Arduino do Blackbox
Podłączanie Arduino do Blackbox

Arduino przykleiłem do blackboxa za pomocą gorącego kleju

Krok 4: Czujnik ultradźwiękowy

Czujnik ultradźwiękowy
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

Płytka prototypowa Podłączanie czujnika do Arduino
Płytka prototypowa Podłączanie czujnika do Arduino
Płytka prototypowa Podłączanie czujnika do Arduino
Płytka prototypowa Podłączanie czujnika do 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

Osłona silnika
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

Podłączanie osłony silnika do Arduino
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

Podłączanie 4 silników i akumulatorów do osłony
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); }

Zalecana: