404

الصفحه التي تبحث عنها غير موجوده

تصميم روبوت متتبع للخط طافئ للحرائق

0

 بسم الله الرحمن الرحيم

بعد ان قمنا بتصميم روبوت الغرض منه اطفاء الحرائق وتصميم روبوت متتبع للخط يمكن الإطلاع عليه من هنا:
سنقوم اليوم بدمج هذه المشاريع مع بعضها البعض حيث سنحصل علي روبوت يقوم بتتبع الخط وعندما يتحسس وجود اي حرائق يقوم باطفاء الحريق


اولا الأدوات:

flame sensor
3x tracking sensor
Arduino
2x dc motors
h-bridge
battery 9v

 line sensor

يعتبر من الحساسات المهمة مع الأردوينو حيث انه يتحسس من اللون الأسود والأبيض
فيعطى واحد عند استشعاره للون الأسود يعطى صفر وعند استشعاره للون الأبيض يعطى واحد
سنستخدم منه ثلاثة للسماح للروبوت بمعرفه اتجاه الخط فإذا كان الخط يسير بإتجاه مستقيم 
فإن الحساس الأوسط سيعطى صفر
وإذا واتجه الخط ناحية اليمين يقرء الحساس الأيمن صفر
وإذا اتجه الخط ناحية اليسار يقرأ الحساس الأيسر صفر

dc motor

هذا نوع من المواتير وهو المستخدم غالبا فى الروبوتات الخاصة بالأردوينو 
سنستخدم فى هذا المشروع هذا النوع من المواتير


h-bridge 

تعتبر هذه الشريحة التى تتحكم بالمواتير 
يمنع منعا باتا توصيل الأردوينو بطريقة مباشرة مع المواتير 
والا سيتم حرق الأردوينو
تأخذ هذه الشريحة مصدر طاقة خارجى وغالبا ما يكون بطارية 9 فولت
تأخذ الإشارة من الأردوينو لبدء عمل اي موتور مع تحديد اتجاه دورانه

Arduino

المتحكم المستخدم للقيام بمعالجة البيانات

flame sensor

حساس اللهب وهو مفيد في معرفة اذا كان هناك حرائق ام لا

ثانيا التوصيلات:


يتكون متتبع الخط من 3 منافذ منفذ الطاقة  5 فولت ومنفذ السالب الي السالب ومنفذ الإشارة حيث يتم توصيل منفذ الإشارة الخاص بالحساس الأيمن الي منفذ رقم 8 الرقمي وتوصيل الحساس الأوسط منفذ الإشارة الي منفذ رقم 9 وتوصيل منفذ الإشارة الخاص بالحساس الأيسر الي منفذ رقم 7 
ويتم توصيل حساس اللهب كالاتي منفذ الطاقة الي 5 فولت ومنفذ السالب الي السالب ومنفذ الإشارة الي 6 الرقمي
يتم توصيل المضخة الخاصة بضخ المياه عن طريق ترانزيستور npn فحيث يتم توصيل emiter الي السالب الخاص بالمضخة وتوصيل collector الي السالب الخاص ببطارية 9 فولت وتوحيد الطرف السالب مع توصيل سالب اﻷردوينو معهم و توصيل base الخاص بالترانزيستور الي منفذ 5 الرقمي
وتوصيل المواتير dc الي h-bridge وتوصيل منافذ الإشارة الخاصة ب h-bridge الي المنافذ رقم A0,A1,A2,A3,A4

مجسم الروبوت 

المجسم الذى سنستخدمه اليوم سيكون بهذا الشكل
نقوم بلصق المواتير بهذا الشكل


بعد ذلك قوموا بوضع باقى المكونات على حسب مهارتكم

يجب وضع حساس الخط فى مقدمة الروبوت وجعل مسافة 1 سم بين الحساس والأرض
ويجب وضع حساس فى اقصي يمين مقدمة الروبوت 
ووضع اخر فى اقصى يسار مقدمة الروبوت
ووضع الأخير فى وسط مقدمة الروبوت
فى الجزء المواجه الى الأرض

ثالثا الكود : 

const int LeftMotorForward =A0;
const int LeftMotorBackward =A1;
const int RightMotorForward =A2;
const int RightMotorBackward =A3;
const int EnableAB =A4;

const int sensor_right = 8;
const int sensor_middle = 9;
const int sensor_left = 7;

const int flamese = 6;
const int pump = 5;

void mforward()
  //to make robot move forward
  digitalWrite(LeftMotorForward, HIGH);
  digitalWrite(RightMotorForward, HIGH);
  digitalWrite(LeftMotorBackward, LOW);
  digitalWrite(RightMotorBackward, LOW);
  Serial.println("go forward!");
}
void mleft()
{
  //to move robot left
  digitalWrite(RightMotorForward, HIGH);
  digitalWrite(LeftMotorForward, LOW);
  Serial.println("go left!");
}
void mright()
{
  //to move robot right
  digitalWrite(LeftMotorForward, HIGH);
   digitalWrite(RightMotorForward, LOW);
}
void mstop()
{
 //to stop the robot
  digitalWrite(RightMotorForward, LOW);
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);
  digitalWrite(LeftMotorBackward, LOW);
  Serial.println("Stop!");
}
void setup()
{   
  pinMode(RightMotorForward, OUTPUT);
  pinMode(LeftMotorForward, OUTPUT);
  pinMode(LeftMotorBackward, OUTPUT);
  pinMode(RightMotorBackward, OUTPUT);
  pinMode(EnableAB,OUTPUT);
  digitalWrite(EnableAB,1);
  delay(100);
}
void loop()
{
  int right_state = digitalRead(sensor_right);
  int left_state = digitalRead(sensor_left);
  int middle_state = digitalRead(sensor_middle);
  if(right_state == 0 && left_state == 1 &&       middle_state == 1)
  {
    mright();}
  if(right_state == 1 && left_state == 0 && middle_state == 1)
  {
    mleft();}
    if(right_state == 1 && left_state == 1 && middle_state == 0)
  {
  mforward(); }
  if(right_state == 1 && left_state == 1 && middle_state == 1)
  {
  mstop();}}
void fire_fight(){
  int x = digitalRead(flamese);
  if(x==1){
    digitalWrite(pump,1);
  }else{
    digitalWrite(pump,0);}}
في البداية يجب تعريف المتغيرات الأساسية مثل منافذ المواتير والحساسات ومنفذ المضخة وتعريف المدخلات والمخرجات
ثم القيام بعمليات مقارنة هل الخط يتجه لليمين تحرك الروبوت لليمين هل الخط متجه للأمام حرك الروبوت للامام هل الخط يتجه لليسار تحرك الروبوت ناحية اليسار و اذا كانت هناك اي اشارة من حساس اللهب قم بتشغيل المضخة علي الفور 

لتحميل الكود اضغط هنا 

تصميم وبرمجة : بلال حسان سعدي

تصميم روبوت طافئ للنار fire fighter

0

بسم الله الرحمن الرحيم 

بعد اخر مشروع صممناه وهو التحكم بسيارة باستخدام ir remote

ويمكن الإطلاع عليه من هنا  



سنقوم اليوم بتصميم احد التطبيقات المهمه لروبوت السيارة وهو طافئ الحريق حيث سنقوم بتصميم روبوت سيارة يتنقل فى المكان ويتعقب اماكن النيران الى ان يصل اليها ثم يضخ المياه لإطفاءها


اولا الأدوات :

3x flame sensor

Arduino uno

2x motor dc

h-bridge

transistor pnp

pump 9v

battery 9v

flame sensor 

او حساس اللهب ولهذا الحساس القدرة على تعقب اماكن النيران

ويحتوى على 4 منافذ سبق لنا وقمنا بشرحه فى الدروس المتوسطه


arduino uno

المتحكم الذي سنستخدمه لقيام بمعالجه البيانات



motor dc

المواتير التى سنستخدمها لكى يستطيع الروبوت الحركة


water pump

مضخة المياه التى سنستخدمها لإطفاء اللهب

h-bridge

شريحة من اهم الشرائح التى سنستخدمها والتى منها سيتم التحكم بالمواتير و عملها واتجاه دورانها 


ثانيا التوصيلات :




تحتوى حساسات flame على 4 منافذ نحن سنستخدم 3 فقط

منفذ الطاقة ومنفذ السالب ومنفذ الخرج التماثلى يتم توصيل منفذ الطاقة الى 5 فولت وتوصيل منفذ السالب الى السالب وتوصيل منفذ الخرج التماثلي الى الأردوينو 

من ثم توصيل المواتير الى h-bridge كما هو موضح فى الأعلى

من ثم توصيل منافذ الداتا الى الأردوينو منافذ in الخاصه H-bridge

من ثم توصيل شريحة h-bridge بالطاقة من بطارية 9 فولت 

من ثم توصيل المضخه الى emiter الخاص بالترانزيستور وتوصيل collecotr الى البطارية 9 فولت +

وتوصيل الطرف السالب من المضخة الى -

وفى النهاية توصيل base الى الأردوينو

ثالثا المجسم :

ونتجه الأن الى تركيب جسم الروبوت 
اولا نحضر مثل هذا المجسم لا تهم المادة المصنعة لكن المهم هو ان تكون المادة وزنها خفيف 

ونقوم بتوصيل المواتير بالعجلات كما هو موضح بالصورة
ونقوم بلصق المواتير كما هو موضح فى الصورة


فينتج لدينا هذا الشكل 
كل ما عليكم وضع باقى التوصيلات على هذا المجسم وهذا الأمر يقف على حسب مهارتكم


رابعا الكود :-


#define IN1 6

#define IN2 5

#define IN3 4

#define IN4 3

#define EN1 7


const int pump = 8;

const int sensor_right = A2;

const int sensor_middle = A0;

const int sensor_left = A1;


void forward()

{

  digitalWrite(IN1, HIGH);

  digitalWrite(IN2, LOW);

  digitalWrite(IN3, HIGH);

  digitalWrite(IN4, LOW);

}


void reverse()

{

  digitalWrite(IN1, LOW);

  digitalWrite(IN2, HIGH);

  digitalWrite(IN3, LOW);

  digitalWrite(IN4, HIGH);

}


void left()

{

  digitalWrite(IN1, LOW);

  digitalWrite(IN2, LOW);

  digitalWrite(IN3, HIGH);

  digitalWrite(IN4, LOW);

}


void right()

{

  digitalWrite(IN1, HIGH);

  digitalWrite(IN2, LOW);

  digitalWrite(IN3, LOW);

  digitalWrite(IN4, LOW);

}


void stoprobot()

{

  digitalWrite(IN1, LOW);

  digitalWrite(IN2, LOW);

  digitalWrite(IN3, LOW);

  digitalWrite(IN4, LOW);

}

void setup()

  

  pinMode(IN1, OUTPUT);

  pinMode(IN2, OUTPUT);

  pinMode(IN3, OUTPUT);

  pinMode(IN4, OUTPUT);

  pinMode(EN1,OUTPUT);

  pinMode(pump,OUTPUT);

  digitalWrite(EN1,1);

  delay(100);

}

void loop()

{

  int right_state = analogRead(sensor_right);

  int left_state = analogRead(sensor_left);

  int middle_state = analogRead(sensor_middle);


  if(right_state > left_state && right_state > middle_state)

  {

    right();

  }

  if(left_state > right_state && left_state > middle_state)

  {

    left();

  }

   if(middle_state < 800)

  {

   forward(); 

  }

  if(middle_state > 800)

  {

  digitalWrite(pump,1);

  }

  else{

    digitalWrite(pump,0);

    stoprobot();

  }

}

خامسا شرح الكود :-

الكود كما هو موضح فى الأعلى يؤدى الغرض الأتي : 

في البداية تعريف المنافذ الخاصه بالموتور 

#define IN1 6

#define IN2 5

#define IN3 4

#define IN4 3

#define EN1 7


من ثم تعريف منافذ الحساسات والمضخه 

const int pump = 8;

const int sensor_right = A2;

const int sensor_middle = A0;

const int sensor_left = A1;

من ثم انشاء الدالات المسئولة عن تحريك الموتور

void forward()

{

  digitalWrite(IN1, HIGH);

  digitalWrite(IN2, LOW);

  digitalWrite(IN3, HIGH);

  digitalWrite(IN4, LOW);

}


void reverse()

{

  digitalWrite(IN1, LOW);

  digitalWrite(IN2, HIGH);

  digitalWrite(IN3, LOW);

  digitalWrite(IN4, HIGH);

}


void left()

{

  digitalWrite(IN1, LOW);

  digitalWrite(IN2, LOW);

  digitalWrite(IN3, HIGH);

  digitalWrite(IN4, LOW);

}


void right()

{

  digitalWrite(IN1, HIGH);

  digitalWrite(IN2, LOW);

  digitalWrite(IN3, LOW);

  digitalWrite(IN4, LOW);

}


void stoprobot()

{

  digitalWrite(IN1, LOW);

  digitalWrite(IN2, LOW);

  digitalWrite(IN3, LOW);

  digitalWrite(IN4, LOW);

}

ومن بعد ذلك القيام بتعريف جميع المنافذ السابقة كخرج ماعدا منافذ الحساسات التى لا يجب تعريفها لان المنافذ التماثليلة تمكون معرفة مسبقا كدخل

  pinMode(IN1, OUTPUT);

  pinMode(IN2, OUTPUT);

  pinMode(IN3, OUTPUT);

  pinMode(IN4, OUTPUT);

  pinMode(EN1,OUTPUT);

  pinMode(pump,OUTPUT);


من ثم انشاء ثلاثة متغيرات والقراءة من ثلاث حساسات وجعل القيمة كل حساس فى احد المتغيرات الثلاثة 

int right_state = analogRead(sensor_right);

 int left_state = analogRead(sensor_left);

 int middle_state=analogRead(sensor_middle);


بعد ذلك القيام بالشروط :

فإذا كانت قراءة الحساس الأيمن هى الأكبر قم بدوران ناحية اليمين

اذا كانت قراءة الحساس الأيسر هى الأكبر قم بدوران ناحية اليسار

اذا كانت قراءة الحساس الأوسط اقل من 800 قم بالتقدم الى الأمام

اذا كانت قراءة الحساس الأوسط اكبر من 800 قم بتشغيل المضخة واطفاء الروبوت 


لتحميل الكود اضغط هنا 

تصميم وبرمجة : بلال حسان سعدى

تصميم روبوت التحكم عن طريق ir remote

0

 بسم الله الرحمن الرحيم  

بعد ان قمنا بتصميم العديد من المشاريع التى لها علاقة بسيارة الروبوت  :- 

روبوت متتبع الخط line follower

روبوت التحكم عن طريق البلوتوث 

تصميم روبوت التحكم به عن طريق الصوت

تصميم روبوت التحكم به بالصوت عن طريق البلوتوث 


ولكن اليوم سنقوم ببعض التطويرات على هذا المشروع حيث سنتحكم بهذا الروبوت باستخدام ريموت كنترول 

اولا الأدوات 

ir remote reciever and sender

arduino uno

2 motor dc

l239d driver 

battery

ir remote reciever and sender

وسيلة التواصل التى سنستعملها فى هذا المشروع 

arduino uno

المتحكم الذي سنستخدمه الذي سيقوم بمعالجة البيانات و اتختذ القرار


l239d driver 

هذه الشريحة تشبه شريحة h-bridge فهى تقوم بالتحكم فى محركات dc ويجب استخدام هذه الشريحة 

وان تم توصيل المواتير مباشرة الى الأردوينو سيتم حرق الأردوينو 





ثانيا المجسم :

ونتجه الأن الى تركيب جسم الروبوت 
اولا نحضر مثل هذا المجسم لا تهم المادة المصنعة لكن المهم هو ان تكون المادة وزنها خفيف 

ونقوم بتوصيل المواتير بالعجلات كما هو موضح بالصورة
ونقوم بلصق المواتير كما هو موضح فى الصورة


فينتج لدينا هذا الشكل 
كل ما عليكم وضع باقى التوصيلات على هذا المجسم وهذا الأمر يقف على حسب مهارتكم

ثالثا التوصيلات : 




التوصيلات هى كما موضحه فى الأعلى لم نقوم بشرحها لاننا شرحناها من قبل 

رابعا الكود : 


فى البداية يجب ان نصل الى البيانات التى يقوم الريموت بارسالها عند الضغطة على اى زر
عن طريق هذا الكود 
#include <IRremote.h>
IRrecv rec(8);
decode_results res;
void setup(){
  rec.enableIRIn();
  Serial.begin(9600);
}
void loop(){
  if(rec.decode(&res)){
   Serial.println(res.value , HEX);
   rec.resume();
  }
}
حيث يقوم هذا الكود بقراءة البيانات المرسلة من الريموت وطباعتها فى السيريال مونيتور كل ما عليك تحديد الأزرار التى تريد ان تستعملها 

الكود النهائى :-


#include <IRremote.h>
#define IN1 12
#define IN2 11
#define IN3 10
#define IN4 9
IRrecv rec(8);
decode_results res;
void setup(){
 rec.enableIRIn();
 pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
 pinMode(IN3, OUTPUT);
 pinMode(IN4, OUTPUT);
 digitalWrite(IN1, LOW);
 digitalWrite(IN2, LOW);
 digitalWrite(IN3, LOW);
 digitalWrite(IN4, LOW);
}
void loop(){
  if(rec.decode(&res)){
    if(res.value == 0xZZZZZZZ){
      Serial.print("right");
      right();   }
    rec.resume();
    if(res.value == 0xZZZZZZZ){
      Serial.print("back");
      reverse();  }
    rec.resume();
    if(res.value == 0xZZZZZZZ){
      Serial.print("left");
      left(); }
    rec.resume();
    if(res.value == 0xZZZZZZZ){
      Serial.print("forward");
      forward();    }
    rec.resume();
    if(res.value == 0xZZZZZ){
      Serial.print("stop");
      stoprobot();  }
    rec.resume(); }}
void forward()
{
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}
void reverse()
{
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}
void left()
{
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}
void right()
{
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}
void stoprobot()
{
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

شرح الكود :-


فى البداية قمت باضافة المكتبة الأساسية لكي اتعامل مع ir remote

#include <IRremote.h>
من ثم انشاء متغيرات تحتوى على منافذ الموتور
#define IN1 12
#define IN2 11
#define IN3 10
#define IN4 9
من ثم قمت بانشاء كائنين كائن يتم وضع فيه منفذ الخاص بالمستلم
ثم كائن الأخر يتم انشائه وهو خاص بالبيانات المستلمة من الريموت
IRrecv rec(8);
decode_results res;
من ثم تشغيل المستلم وتهيئته لاستلام البيانات 
 rec.enableIRIn();
بعد ذلك القيام بتعيين جميع منافذ الموتور كخرج واخراج 0 فولت على جميع المنافذ
pinMode(IN1, OUTPUT);
 pinMode(IN2, OUTPUT);
 pinMode(IN3, OUTPUT);
 pinMode(IN4, OUTPUT);
 digitalWrite(IN1, LOW);
 digitalWrite(IN2, LOW);
 digitalWrite(IN3, LOW);
 digitalWrite(IN4, LOW);
بعد هذا بدء استلام البيانات عن طريق هذا الأمر
 if(rec.decode(&res)){
من ثم البدء فى عمل مقارنات من القيمة المرسلة وقيمة الزر الذي قمت بتعيينه ويجب استبدال ZZZZZ بقيمة الزر التى سبق ان قرانها من على السيريال مونيتر مع الحفاظ على وجود 0x
وباقى الكود لن نقوم بشرحه بسبب اننا قمنا بشرحه  العديد من المرات

لتحميل الكود اضغط هنا 

خامسا التجربة النهائية :
تجربة المشروع النهائية على موقع تنكر كاد يمكنك مشاهدة هذا الفيديو 







تصميم وبرمجة : بلال حسان سعدى 



تصميم روبوت التحكم عن طريق الصوت

0

 بسم الله الرحمن الرحيم

بعد ان قمنا فى المشروع السابق بالتحكم بالروبوت بالصوت عن طريق البلوتوث يمكن الإطلاع عليها من هنا


سنفوم اليوم بتصميم مشروع التحكم بالروبوت عن طريق الصوت بدون بلوتوث 

اولا الهدف من المشروع :

الهدف من هذا المشروع هو التحكم باجهزة المنزل مثل المصباح الكهربائى عن طريق الأوامر الصوتية 
وسنتحكم فى هذا المشروع فى 4 اجهزة تعمل على 220 فولت متردد

اولا الأدوات : 

voice recognition module
arduino uno
h-bridge
dc motor

voice recognition module
هذا الموديول هو المسئول عن تفسير الصوت البشرى وعمل مقارنة له عن طريق اصوات مسجله فعلا فى الذاكرة الخاصه به 


arduino uno
المتحكم الدقيق الذى سنستخدمه فى هذا المشروع والذى الغرض منه معالجة البيانات




h-bridge
استخدمت هذه الشريحة لكى يتم التحكم فى مواتير dc 
ويمنع منعا باتا توصيل مواتير dc بطريقة مباشرة مع الأردوينو لتجنب حرق الأردوينو


dc motor
هو احد انواع المواتير التى تستخدم فى تحريك الروبوت والتى سيتم التحكم بها


والبطارية هى منفذ الطاقة الذى سيمد الأردوينو وشريحة h-bridge
بالطاقة 

ثانيا التوصيلات : 


ما تلاحظون التوصيلات ليست بالأمر المعقد ابدا كل ما عليكم اتباع الصور الأتيه
حيث قمت بتوصيل h bridge  بمصدر جهد خارجى وقمت بتوصيل منافذ التحكم الى المنافذ الرقمية الخاصة بالأردوينو
وقمت بتوصيل شريحة مسجل الأصوات الى الأردوينو كما هو موضح فى الأعلى 
يجب توصيل منافذ en الى المنافذ الرقمية وتكون هذه المنافذ هى المسؤلة عن تشغيل المواتير
ونتجه الأن الى تركيب جسم الروبوت 
اولا نحضر مثل هذا المجسم لا تهم المادة المصنعة لكن المهم هو ان تكون المادة وزنها خفيف 

ونقوم بتوصيل المواتير بالعجلات كما هو موضح بالصورة
ونقوم بلصق المواتير كما هو موضح فى الصورة



فينتج لدينا هذا الشكل 
كل ما عليكم وضع باقى التوصيلات على هذا المجسم وهذا الأمر يقف على حسب مهارتكم

ثالثا إضافة الأصوات:

سنستخدم فى اضافة شريحة usb to ttl device
فى البداية يجب توصيل voice recantation مع usb to ttl بهذه الطريقة لتحميل الأصوات الى الكمبيوتر 
ثم توصيل الجانب الأخر من usb to ttl الى الكمبيوتر
ثم الدخول الى manage لمعرفة المنفذ الذى سيتم توصيل به usb to ttl  فى الكمبيوتر
ثم تحميل برنامج stud.com الذى سنستخدمه لرفع الأصوات الى الشريحة 
ويمكن تحميله من الموقع الرسمى من هنا 



كما ترون الواجهه الرئيسية للبرنامج فى البداية يجب تغيير 
من char الى hex التان يوجدان فى المربع الأسود 
ثم اتباع الخطوات التاليه :



فى المربع الأول يجب تغيير المنفذ الى المنفذ الخاص ب usb to ttl الذي حصلنا عليه من manage
ثم تحديد سرعه الإتصال من المربع الثانى والتى ستكون من 9600
ثم تغيير 
char format الى hex format كما هو موضح فى المربع الثالث

ثم التوجه الى المربع فى الأسفل وكتابة الأوامر الأتيه 
اولا : aa36
ثم اضغط على زر send
ثانيا : aa11
ثم اضغط على زر send ثم قم بتحدث واتباع الذى سيعرض امامك
يجب تسجيل الأصوات بترتيب 
forward
back
right 
left
stop
وان اختلف الترتيب سيحدث خلل فى التنفيذ 
ثالثا : aa21
ثم اضغط على زر send يقوم هذا الأمر بتحميل الأصوات التى قمت بتسجيلها على الموديول الخاص بنا
بعد الإنتهاء من هذه العملية قم بتفكيك الموديول من usb to ttl
ملحوظة : يتحمل هذا الموديول حوالى 15 صوت فقط ولكن البرنامج سيبلغك عند امتلاء السعة التخزينية الخاصه بالموديول

رابعا الكود :

#include <SoftwareSerial.h>

SoftwareSerial voice(2,3);

#define IN1 9//controll motor pins
#define IN2 8
#define IN3 7
#define IN4 6
#define ENA 10
#define ENB 5


byte com = 0;


void setup() {
// for voice recognithion module
voice.begin(9600);

voice.write(0xAA);

voice.write(0x37);

delay(1000);

voice.write(0xAA);

voice.write(0x21);
//end of voice reconithation module
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  digitalWrite(ENA, 1);
  pinMode(ENB, 1);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

void loop() {

  while(voice.available()) {
  com = voice.read();
  switch(com) {
      case 0x11:  
       forward();
       break;
      case 0x12:  
       reverse(); 
       break;
      case 0x13:  
       right();
       break;
      case 0x14: 
       left();
       break;
      case 0x15:  
       stoprobot();
       break;
        } }}

void forward()
{
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void reverse()
{
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void left()
{
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void right()
{
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

void stoprobot()
{
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

اولا اضافة مكتبة بروتوكول UART عن طريق  

#include <SoftwareSerial.h>

ثم تعريف المنافذ الخاصه ب الموديول عن طريق

SoftwareSerial voice(8,9);

ثم كتابة الأكواد الأساسية التى الغرض منها تهيئة الموديول  عن طريق
voice.begin(9600);
voice.write(0xAA);
voice.write(0x37);
delay(1000);
voice.write(0xAA);
voice.write(0x21);

من ثم القيام ببعض التعريفات الخاصه بالدرايفر
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  digitalWrite(ENA, 1);
  pinMode(ENB, 1);
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
من ثم عمل مقارنات على الإشارة القادمة من الموديول 
فاذا كانت الإشارة هى للصوت الأول قم بجعل الروبوت يتحرك الى الأمام 
وهكذا الى اخر الكود 

لاى استفسارات اتركها فخانة التعليقات

لتحميل الكود اضغط هنا

تصميم : بلال حسان سعدى