Smart robotic car

Cílem projektu Smart Car, je Arduino platforma a dva krokové motory, které se řídí podle ultrazvukového senzoru.Pokud senzor detekuje překážku ve stanovené vzdálenosti, Arduino provede odpovídající akci, například zastaví vozítko nebo změní jeho směr, aby se vyhnulo kolizi. Tento projekt umožní studentům a nadšencům získat praktické zkušenosti s programováním, řízením motorů a prací se senzory v reálných podmínkách, čímž přispěje k rozvoji jejich znalostí v oblasti robotiky a automatizace.

Kód:

#include <AccelStepper.h>
// Definice pinů pro krokové motory
#define motor1Pin1 2
#define motor1Pin2 3
#define motor1Pin3 4
#define motor1Pin4 5
#define motor2Pin1 6
#define motor2Pin2 7
#define motor2Pin3 8
#define motor2Pin4 9
// Definice pinů pro ultrazvukový senzor
#define trigPin 10
#define echoPin 11
// Rychlost a akcelerace motorů
#define MOTOR_SPEED 900  // Rychlost motorů (v krocích za sekundu)
#define MOTOR_ACCEL 200  // Akcelerace motorů
// Definice vzdálenosti překážky (v cm)
#define OBSTACLE_DISTANCE 4
// Inicializace motorů
AccelStepper motor1(AccelStepper::FULL4WIRE, motor1Pin1, motor1Pin2, motor1Pin3, motor1Pin4);
AccelStepper motor2(AccelStepper::FULL4WIRE, motor2Pin1, motor2Pin2, motor2Pin3, motor2Pin4);
// Funkce pro měření vzdálenosti pomocí ultrazvukového senzoru
long measureDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);
  long distance = duration * 0.034 / 2;  // Převod na centimetry
  return distance;
}
// Nastavení pro krokové motory
void setupMotors() {
  motor1.setMaxSpeed(MOTOR_SPEED);
  motor1.setAcceleration(MOTOR_ACCEL);
  motor1.moveTo(-10000);  // Pohyb dopředu
  motor2.setMaxSpeed(MOTOR_SPEED);
  motor2.setAcceleration(MOTOR_ACCEL);
  motor2.moveTo(10000);  // Pohyb dopředu
}
void setup() {
  // Inicializace motorů a senzorů
  setupMotors();
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  Serial.begin(9600);
}
void loop() {
  // Měření vzdálenosti
  long distance = measureDistance();
  Serial.println(distance);
  // Pokud je před překážkou, popojeď dozadu a otoč se
  if (distance < OBSTACLE_DISTANCE) {
    // Zastavení motorů
    motor1.stop();
    motor2.stop();
    // Krátký pohyb dozadu
    motor1.move(-600);
    motor2.move(-600);
    while (motor1.distanceToGo() != 0 || motor2.distanceToGo() != 0) {
      motor1.run();
      motor2.run();
    }
    // Otočení o X stupňů (přibližně, podle krokového motoru uprav kroky)
    motor1.move(50);   // Jeden motor jede dopředu
    motor2.move(-50);  // Druhý motor jede dozadu
    while (motor1.distanceToGo() != 0 || motor2.distanceToGo() != 0) {
      motor1.run();
      motor2.run();
    }
    // Po otočení se zase rozjedeme dopředu
    motor1.moveTo(10000);
    motor2.moveTo(10000);
  }
  // Normální jízda dopředu
  motor1.run();
  motor2.run();
}

Další podobné články

Saimon říká:

Hra „Simon říká“ realizovaná pomocí Arduina je skvělým projektem, jehož cílem je spojit zábavu s učením a rozvojem technických dovedností. Hráč se snaží zapamatovat a správně zopakovat sekvenci světelných nebo zvukových signálů, čímž si trénuje paměť, koncentraci a rychlé reakce.

ROBOTICKÉ RAMENO

Stavebnice obsahuje všechny potřebné díly na sestavení robotnického ramene včetně spojovacího materiálu, pouze je nutné dokoupit čtyři kusy MIKRO SERV SG90. Dále je nutné dokoupit řídící jednotku já jsem použil domácí zásoby ARDUINO NANO a pro něho pak modul ARDUINO NANO IO SHIELD pro jednoduchost zapojení. Díly pro sestavení ramene jdou dobře tzv. vylamovat „vypadávají skoro sami. K servům pokud použijete nové tak doporučuji je před montáží odzkoušet zda jsou funkční v plném rozsahu tj. od 0° do 180°, po namontování a zjištění že servo nefunguje to pak opravdu dost zahýbá s nervy.