Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Jak postavit robota, který se vyhýbá překážkám
Krok 1: Black Box
v prvním kroku jsem jako základ svého robota použil černou skříňku.
Krok 2: Arduino
Arduino je mozek celého systému a orchestruje naše motory
Krok 3: Připojení Arduina k Blackboxu
Arduino jsem připevnil na blackbox pomocí horkého lepidla
Krok 4: Ultrazvukový senzor
Abychom mohli robota, který se dokáže sám pohybovat, potřebujeme nějaký vstup, senzor, který odpovídá našemu cíli. Ultrazvukový senzor je nástroj, který měří vzdálenost k předmětu pomocí ultrazvukových zvukových vln. Ultrazvukový senzor používá snímač k odesílání a přijímání ultrazvukových impulsů, které přenášejí zpět informace o blízkosti objektu
Krok 5: Breadboard připojení senzoru k Arduinu
Použil jsem dráty k propojení spojení mezi prkénkem a arduinem.
Dávejte pozor, aby váš snímač ping měl jiné rozložení pinů, ale mělo by mít napěťový pin, zemnící pin, trigonový pin a echo pin.
Krok 6: Motorový štít
Desky Arduino nemohou samy řídit stejnosměrné motory, protože generované proudy jsou příliš nízké. K vyřešení tohoto problému používáme stínění motoru. Štít motoru má 2 kanály, což umožňuje ovládání dvou stejnosměrných motorů nebo 1 krokový motor. … Adresováním těchto pinů můžete vybrat kanál motoru, který chcete spustit, určit směr motoru (polaritu), nastavit otáčky motoru (PWM), zastavit a spustit motor a sledovat absorpci proudu každého kanálu
Krok 7: Připojení štítu motoru k Arduinu
Jednoduše připevněte stínění motoru k arduinu se zalomenými dráty senzoru
Krok 8: Připojení 4 motorů a baterií k štítu
Každý štít motoru má (alespoň) dva kanály, jeden pro motory a jeden pro zdroj energie, propojte je navzájem
Krok 9: Naprogramujte robota
spusťte tento kód
#include #include
NewPing sonar (TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DC Motor motoru1 (1, MOTOR12_1KHZ); AF_DC Motor motoru2 (2, MOTOR12_1KHZ); AF_DC Motor motoru3 (3, MOTOR34_1KHZ); AF_DC Motor motoru4 (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 vzdálenost = 80; int speedSet = 0;
neplatné nastavení () {
myservo.attach (10); myservo.write (115); zpoždění (2000); vzdálenost = readPing (); zpoždění (100); vzdálenost = readPing (); zpoždění (100); vzdálenost = readPing (); zpoždění (100); vzdálenost = readPing (); zpoždění (100); }
void loop () {int vzdálenostR = 0; int vzdálenostL = 0; zpoždění (40); if (vzdálenost <= 15) {moveStop (); zpoždění (50); jít zpět(); zpoždění (150); moveStop (); zpoždění (100); distanceR = lookRight (); zpoždění (100); vzdálenostL = lookLeft (); zpoždění (100);
if (distanceR> = distanceL) {turnRight (); moveStop (); } else {turnLeft (); moveStop (); }} else {moveForward (); } vzdálenost = readPing (); }
int lookRight () {myservo.write (50); zpoždění (250); int vzdálenost = readPing (); zpoždění (50); myservo.write (100); návratová vzdálenost; }
int lookLeft () {myservo.write (120); zpoždění (300); int vzdálenost = readPing (); zpoždění (100); myservo.write (115); návratová vzdálenost; zpoždění (100); }
int readPing () {zpoždění (70); int cm = sonar.ping_cm (); if (cm == 0) {cm = 200; } vrátit cm; }
void moveStop () {motor1.run (RELEASE); motor2.run (RELEASE); motor3.run (RELEASE); motor4.run (RELEASE); } void moveForward () {
if (! goesForward) {goesForward = true; motor1.run (VPŘED); motor2.run (VPŘED); motor3.run (VPŘED); motor4.run (VPŘED); for (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); zpoždění (5); }}}
void moveBackward () {goesForward = false; motor1.run (BACKWARD); motor2.run (BACKWARD); motor3.run (BACKWARD); motor4.run (BACKWARD); for (speedSet = 0; speedSet <MAX_SPEED; speedSet += 2) {motor1.setSpeed (speedSet); motor2.setSpeed (speedSet); motor3.setSpeed (speedSet); motor4.setSpeed (speedSet); zpoždění (5); } void turnLeft () {motor1.run (BACKWARD); motor2.run (BACKWARD); motor3.run (VPŘED); motor4.run (VPŘED); zpoždění (500); motor1.run (VPŘED); motor2.run (VPŘED); motor3.run (VPŘED); motor4.run (VPŘED); }
void turnLeft () {motor1.run (BACKWARD); motor2.run (BACKWARD); motor3.run (VPŘED); motor4.run (VPŘED); zpoždění (500); motor1.run (VPŘED); motor2.run (VPŘED); motor3.run (VPŘED); motor4.run (VPŘED); }