كل المشاريع

روبوت يعمل بالأوامر الصوتية

روبوت ينفّذ أوامر صوتية من تطبيق التعرف على الكلام عبر البلوتوث.

متقدم

صور وفيديو المشروع

نبذة عن المشروع

يحوّل تطبيق الهاتف الكلام إلى نص ويرسله عبر البلوتوث، ويقارن الأردوينو النص مع أوامر محفوظة (تقدم، توقف، يمين، يسار، دوران) وينفّذها. يمكن إضافة أوامر عربية بسهولة في مصفوفة الأوامر.

المكونات المطلوبة

كود Arduino IDE

#include <SoftwareSerial.h>

SoftwareSerial bt(2, 3);

#define IN1 4
#define IN2 5
#define IN3 6
#define IN4 7
#define TRIG 11
#define ECHO 12

String cmd = "";

void drive(bool a1, bool a2, bool b1, bool b2) {
  digitalWrite(IN1,a1); digitalWrite(IN2,a2);
  digitalWrite(IN3,b1); digitalWrite(IN4,b2);
}

long distanceCm() {
  digitalWrite(TRIG, LOW);  delayMicroseconds(2);
  digitalWrite(TRIG, HIGH); delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  long d = pulseIn(ECHO, HIGH, 30000);
  return d == 0 ? 400 : d * 0.034 / 2;
}

void setup() {
  pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT); pinMode(IN4,OUTPUT);
  pinMode(TRIG,OUTPUT); pinMode(ECHO,INPUT);
  bt.begin(9600);
  Serial.begin(9600);
}

void loop() {
  while (bt.available()) {
    char c = bt.read();
    if (c == '#' || c == '\n') {
      cmd.toLowerCase();
      cmd.trim();

      if (cmd == "go" || cmd == "forward")      drive(1,0,1,0);
      else if (cmd == "back")                   drive(0,1,0,1);
      else if (cmd == "left")                   drive(0,1,1,0);
      else if (cmd == "right")                  drive(1,0,0,1);
      else if (cmd == "stop")                   drive(0,0,0,0);
      else if (cmd == "spin") { drive(1,0,0,1); delay(1200); drive(0,0,0,0); }

      Serial.println(cmd);
      cmd = "";
    } else {
      cmd += c;
    }
  }

  // safety: stop if something is too close
  if (distanceCm() < 15) drive(0,0,0,0);
  delay(40);
}