الهاتف المحمول هو اختراع ثوري في القرن. تم تصميمه في الأساس لصنع واستقبال المكالمات والرسائل النصية ، لكنه أصبح العالم كله بعد أن يأتي الهاتف الذكي في الصورة. في هذا المشروع ، نقوم ببناء نظام أتمتة منزلي ، حيث يمكن للمرء التحكم في الأجهزة المنزلية ، وذلك باستخدام هاتف GSM بسيط ، فقط عن طريق إرسال الرسائل القصيرة من خلال هاتفه. في هذا المشروع ، لا حاجة إلى هاتف ذكي ، سيعمل هاتف GSM القديم فقط على تشغيل وإيقاف أي أجهزة إلكترونية منزلية ، من أي مكان.
في هذا المشروع ، يستخدم اردوينو للتحكم في العملية برمتها. هنا قمنا باستخدام الاتصالات اللاسلكية GSM للتحكم في الأجهزة المنزلية. نرسل بعض الأوامر مثل "# A.light on *" و "# A.light off *" وما إلى ذلك للتحكم في الأجهزة المنزلية AC. بعد تلقي أوامر معينة من Arduino عبر GSM ، يرسل Arduino إشارة إلى المرحلات ، لتشغيل أو إيقاف تشغيل الأجهزة المنزلية باستخدام برنامج الترحيل.
المواد المطلوبة
اردوينو أونو
وحدة GSM
ريلاي 5 فولت
توصيل الأسلاك
16x2 LCD شاشة
مزود الطاقة
الهاتف الخلوي
عند بدء البرنامج ، يبدأ البرنامج بمقارنة السلسلة المستلمة بسلسلة محددة بالفعل وإذا تمت مطابقة السلسلة ، فيتم إجراء عملية نسبية باستخدام الأمر المناسب المعطى في الكود.
في هذا المشروع ، يستخدم اردوينو للتحكم في العملية برمتها. هنا قمنا باستخدام الاتصالات اللاسلكية GSM للتحكم في الأجهزة المنزلية. نرسل بعض الأوامر مثل "# A.light on *" و "# A.light off *" وما إلى ذلك للتحكم في الأجهزة المنزلية AC. بعد تلقي أوامر معينة من Arduino عبر GSM ، يرسل Arduino إشارة إلى المرحلات ، لتشغيل أو إيقاف تشغيل الأجهزة المنزلية باستخدام برنامج الترحيل.
المواد المطلوبة
اردوينو أونو
وحدة GSM
ريلاي 5 فولت
توصيل الأسلاك
16x2 LCD شاشة
مزود الطاقة
الهاتف الخلوي
هنا استخدمنا بادئة في سلسلة الأوامر التي هي "#A.". يتم استخدام هذه البادئة لتحديد أن الأمر الرئيسي يأتي بجانبه و * في نهاية السلسلة يشير إلى أنه قد تم إنهاء الرسالة.
عندما نرسل رسالة نصية إلى وحدة GSM عن طريق الجوال ، فإن GSM يتلقى تلك الرسائل ويرسلها إلى Arduino. الآن يقرأ Arduino هذه الرسالة القصيرة واستخراج الأمر الرئيسي من السلسلة المستلمة والمخازن في متغير. بعد ذلك ، قارن اردوينو هذه السلسلة مع سلسلة محددة مسبقا. في حالة حدوث مطابقة ، يرسل Arduino إشارة للتتابع عبر برنامج تشغيل الترحيل لتشغيل الأجهزة المنزلية وإيقاف تشغيلها. والنتيجة النسبية أيضا تطبع على LCD 16X2 باستخدام الأوامر المناسبة.
هنا في هذا المشروع ، استخدمنا 3 لمبة بقدرة صفرية لمظاهرة تشير إلى المروحة والضوء والتلفزيون.
في ما يلي قائمة الرسائل التي نرسلها عبر الرسائل القصيرة SMS ، لتشغيل وإيقاف تشغيل المروحة والضوء والتلفزيون:
ربط الدائرة
كود اردوينو
في الجزء الخاص بالبرمجة من هذا المشروع ، أولاً وقبل كل شيء في البرمجة ، نضم المكتبة لعرض الشاشة الكريستالية السائلة ثم نحدد البيانات ودبابيس التحكم الخاصة بأجهزة LCD والأجهزة المنزلية.
#include<LiquidCrystal.h> LiquidCrystal lcd(6,7,8,9,10,11); #define Fan 3 #define Light 4 #define TV 5 int temp=0,i=0; int led=13;
بعد تهيئة هذا الاتصال التسلسلي على 9600 بت في الثانية ، ويعطي توجيه دبوس المستخدم.
void setup() { lcd.begin(16,2); Serial.begin(9600); pinMode(led, OUTPUT); pinMode(Fan, OUTPUT); pinMode(Light, OUTPUT); pinMode(TV, OUTPUT);
لاستقبال البيانات بشكل تسلسلي ، استخدمنا وظيفتين ، أحدهما هو Serial.available الذي يتحقق مما إذا كانت أي بيانات تسلسلية قادمة وأخرى هي Serial.read التي تقرأ البيانات التي تأتي متسلسلة.
while (Serial.available()) { char inChar=Serial.read();بعد تلقي البيانات بشكل تسلسلي ، قمنا بتخزينها في سلسلة ثم ننتظر إدخال.
void serialEvent() { while(Serial.available()) { if(Serial.find("#A.")) { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); while (Serial.available()) { char inChar=Serial.read(); str[i++]=inChar; if(inChar=='*') { temp=1; return; }
عند بدء البرنامج ، يبدأ البرنامج بمقارنة السلسلة المستلمة بسلسلة محددة بالفعل وإذا تمت مطابقة السلسلة ، فيتم إجراء عملية نسبية باستخدام الأمر المناسب المعطى في الكود.
void check() { if(!(strncmp(str,"tv on",5))) { digitalWrite(TV, HIGH); lcd.setCursor(13,1); lcd.print("ON "); delay(200); } else if(!(strncmp(str,"tv off",6))) { digitalWrite(TV, LOW); lcd.setCursor(13,1); lcd.print("OFF "); delay(200); }الكود كاملة
#include<LiquidCrystal.h>
LiquidCrystal lcd(6,7,8,9,10,11);
LiquidCrystal lcd(6,7,8,9,10,11);
#define Fan 3
#define Light 4
#define TV 5
#define Light 4
#define TV 5
int temp=0,i=0;
int led=13;
int led=13;
char str[15];
void setup()
{
lcd.begin(16,2);
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(Fan, OUTPUT);
pinMode(Light, OUTPUT);
pinMode(TV, OUTPUT);
lcd.setCursor(0,0);
lcd.print("GSM Control Home");
lcd.setCursor(0,1);
lcd.print(" Automaton ");
delay(2000);
lcd.clear();
lcd.print("Circuit Digest");
delay(1000);
lcd.setCursor(0,1);
lcd.print("System Ready");
Serial.println("AT+CNMI=2,2,0,0,0");
delay(500);
Serial.println("AT+CMGF=1");
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fan Light TV ");
lcd.setCursor(0,1);
lcd.print("OFF OFF OFF ");
}
void setup()
{
lcd.begin(16,2);
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(Fan, OUTPUT);
pinMode(Light, OUTPUT);
pinMode(TV, OUTPUT);
lcd.setCursor(0,0);
lcd.print("GSM Control Home");
lcd.setCursor(0,1);
lcd.print(" Automaton ");
delay(2000);
lcd.clear();
lcd.print("Circuit Digest");
delay(1000);
lcd.setCursor(0,1);
lcd.print("System Ready");
Serial.println("AT+CNMI=2,2,0,0,0");
delay(500);
Serial.println("AT+CMGF=1");
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fan Light TV ");
lcd.setCursor(0,1);
lcd.print("OFF OFF OFF ");
}
void loop()
{
lcd.setCursor(0,0);
lcd.print("Fan Light TV");
if(temp==1)
{
check();
temp=0;
i=0;
delay(1000);
}
}
{
lcd.setCursor(0,0);
lcd.print("Fan Light TV");
if(temp==1)
{
check();
temp=0;
i=0;
delay(1000);
}
}
void serialEvent()
{
while(Serial.available())
{
if(Serial.find("#A."))
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
while (Serial.available())
{
char inChar=Serial.read();
str[i++]=inChar;
if(inChar=='*')
{
temp=1;
return;
}
}
}
}
}
{
while(Serial.available())
{
if(Serial.find("#A."))
{
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
while (Serial.available())
{
char inChar=Serial.read();
str[i++]=inChar;
if(inChar=='*')
{
temp=1;
return;
}
}
}
}
}
void check()
{
if(!(strncmp(str,"tv on",5)))
{
digitalWrite(TV, HIGH);
lcd.setCursor(13,1);
lcd.print("ON ");
delay(200);
}
else if(!(strncmp(str,"tv off",6)))
{
digitalWrite(TV, LOW);
lcd.setCursor(13,1);
lcd.print("OFF ");
delay(200);
}
else if(!(strncmp(str,"fan on",5)))
{
digitalWrite(Fan, HIGH);
lcd.setCursor(0,1);
lcd.print("ON ");
delay(200);
}
else if(!(strncmp(str,"fan off",7)))
{
digitalWrite(Fan, LOW);
lcd.setCursor(0,1);
lcd.print("OFF ");
delay(200);
}
else if(!(strncmp(str,"light on",8)))
{
digitalWrite(Light, HIGH);
lcd.setCursor(7,1);
lcd.print("ON ");
delay(200);
}
else if(!(strncmp(str,"light off",9)))
{
digitalWrite(Light, LOW);
lcd.setCursor(7,1);
lcd.print("OFF ");
delay(200);
}
else if(!(strncmp(str,"all on",6)))
{
digitalWrite(Light, HIGH);
digitalWrite(Fan, HIGH);
digitalWrite(TV, HIGH);
lcd.setCursor(0,1);
lcd.print("ON ON ON ");
delay(200);
}
else if(!(strncmp(str,"all off",7)))
{
digitalWrite(Light, LOW);
digitalWrite(Fan, LOW);
digitalWrite(TV, LOW);
lcd.setCursor(0,1);
lcd.print("OFF OFF OFF ");
delay(200);
}
}
{
if(!(strncmp(str,"tv on",5)))
{
digitalWrite(TV, HIGH);
lcd.setCursor(13,1);
lcd.print("ON ");
delay(200);
}
else if(!(strncmp(str,"tv off",6)))
{
digitalWrite(TV, LOW);
lcd.setCursor(13,1);
lcd.print("OFF ");
delay(200);
}
else if(!(strncmp(str,"fan on",5)))
{
digitalWrite(Fan, HIGH);
lcd.setCursor(0,1);
lcd.print("ON ");
delay(200);
}
else if(!(strncmp(str,"fan off",7)))
{
digitalWrite(Fan, LOW);
lcd.setCursor(0,1);
lcd.print("OFF ");
delay(200);
}
else if(!(strncmp(str,"light on",8)))
{
digitalWrite(Light, HIGH);
lcd.setCursor(7,1);
lcd.print("ON ");
delay(200);
}
else if(!(strncmp(str,"light off",9)))
{
digitalWrite(Light, LOW);
lcd.setCursor(7,1);
lcd.print("OFF ");
delay(200);
}
else if(!(strncmp(str,"all on",6)))
{
digitalWrite(Light, HIGH);
digitalWrite(Fan, HIGH);
digitalWrite(TV, HIGH);
lcd.setCursor(0,1);
lcd.print("ON ON ON ");
delay(200);
}
else if(!(strncmp(str,"all off",7)))
{
digitalWrite(Light, LOW);
digitalWrite(Fan, LOW);
digitalWrite(TV, LOW);
lcd.setCursor(0,1);
lcd.print("OFF OFF OFF ");
delay(200);
}
}