الجمعة، 30 مارس 2018

التحكم بالاردوينو عن طريق ساعة بلوتوث - Smartwatch - Arduino LED Control


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

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

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





كود اردوينو

# include <SoftwareSerial.h>
SoftwareSerial bt_serial(2, 3);
String peticion = "";
char c = ' ';

void setup() {
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  digitalWrite(4, LOW);
  digitalWrite(5, LOW);
  digitalWrite(6, LOW);
  digitalWrite(7, LOW);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  bt_serial.begin(38400);
  bt_serial.setTimeout(5);
  Serial.begin(9600);
}

void loop() {
  if (bt_serial.available() > 0) {
    while (bt_serial.available() > 0) {
      c = bt_serial.read();
      peticion += c;
    }
    Serial.println(peticion);
    if (peticion == "act1on") {
      digitalWrite(4, HIGH);
      Serial.println("Uno on");
    }
    if (peticion == "act1off") digitalWrite(4, LOW);
    if (peticion == "act2on") digitalWrite(5, HIGH);
    if (peticion == "act2off") digitalWrite(5, LOW);
    if (peticion == "act3on") digitalWrite(6, HIGH);
    if (peticion == "act3off") digitalWrite(6, LOW);
    if (peticion == "act4on") digitalWrite(7, HIGH);
    if (peticion == "act4off") digitalWrite(7, LOW);
    if (peticion == "act5on") digitalWrite(8, HIGH);
    if (peticion == "act5off") digitalWrite(8, LOW);
    if (peticion == "act6on") digitalWrite(9, HIGH);
    if (peticion == "act6off") digitalWrite(9, LOW);
    if (peticion == "act7on") digitalWrite(10, HIGH);
    if (peticion == "act7off") digitalWrite(10, LOW);
    if (peticion == "act8on") digitalWrite(11, HIGH);
    if (peticion == "act8off") digitalWrite(11, LOW);
  }
    peticion = "";
    c = ' ';
}





الأربعاء، 28 مارس 2018

تحكم البيت الذكي بواسطة اردوينو مع جي اس ام - GSM Based Home Automation using Arduino

الهاتف المحمول هو اختراع ثوري في القرن. تم تصميمه في الأساس لصنع واستقبال المكالمات والرسائل النصية ، لكنه أصبح العالم كله بعد أن يأتي الهاتف الذكي في الصورة. في هذا المشروع ، نقوم ببناء نظام أتمتة منزلي ، حيث يمكن للمرء التحكم في الأجهزة المنزلية ، وذلك باستخدام هاتف GSM بسيط ، فقط عن طريق إرسال الرسائل القصيرة من خلال هاتفه. في هذا المشروع ، لا حاجة إلى هاتف ذكي ، سيعمل هاتف GSM القديم فقط على تشغيل وإيقاف أي أجهزة إلكترونية منزلية ، من أي مكان.

في هذا المشروع ، يستخدم اردوينو للتحكم في العملية برمتها. هنا قمنا باستخدام الاتصالات اللاسلكية 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);
#define Fan 3
#define Light 4
#define TV 5
int temp=0,i=0;
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 loop()
{
  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;
      }
      }
    }
   }
 }
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);
    }    
}

الخميس، 15 مارس 2018

استخدام اردوينو ووحدة الموجات فوق الصوتية لتحديد مستوى المياه في خزان.

المواد المطلوبة

ATMega328P او اردوينو بأي نوع كان
متحسس الترا سونيك HC-SR04
مقاومة 10K
كرستال 16Mhz
منظم LM7805 5V
بطارية 9V 
مكثف 10uF
اسلاك ربط مع لوحة الربط

معرفة كمية المياه في الخزان العلوي يمكن أن تكون مهمة شاقة. عادة ، سوف ينتهي بك المطاف صعود الدرج إلى الخزان والتحقق من مستوى يدويا أو عليك سماع المياه تفيض من الأعلى. لكن المؤشرات الإلكترونية لمستوى المياه هذه الأيام متاحة لإصلاح هذه المشكلة ، لكنها غالباً ما تأتي مع ثمن باهظ ، وعادة ما يكون من الصعب تثبيتها. تستخدم معظم الأنظمة المتاحة الأقطاب الكهربائية المغمورة أو المفاتيح العائمة ، والتي يمكن أن تكون صداعًا على المدى الطويل. نقدم طريقة مختلفة لمعرفة مستوى المياه باستخدام وحدة الموجات فوق الصوتية مع اردوينو. تكمن ميزة هذه الطريقة في أنها غير تلامسية ، لذا لن تؤثر مشكلات مثل تآكل الأقطاب الكهربائية على هذا النظام. وعلاوة على ذلك ، فإن مؤشر مستوى الماء في اردوينو يكون أسهل في التركيب من الأنظمة العادية.



كود البرمجة

int d = 18; //Enter depth of your tank here in centimeters int trig = 11; // Attach Trig of ultrasonic sensor to pin 11 int echo = 10; // Attach Echo of ultrasonic sensor to pin 10 int pin1 = 2;//Highest level int pin2 = 3; int pin3 = 4; int pin4 = 5; int pin5 = 6; int pin6 = 7;//Lowest evel void setup() { pinMode (pin1, OUTPUT);// Set pins to output for controlling I/O pinMode (pin2, OUTPUT); pinMode (pin3, OUTPUT); pinMode (pin4, OUTPUT); pinMode (pin5, OUTPUT); pinMode (pin6, OUTPUT); } void loop() { digitalWrite(pin1, LOW);//Resetting the LEDs to off state digitalWrite(pin2, LOW); digitalWrite(pin3, LOW); digitalWrite(pin4, LOW); digitalWrite(pin5, LOW); digitalWrite(pin5, LOW); // Establish variables for duration of the ping, // and the distance result in inches and centimeters: long duration, in, cm; //'in' is inches and 'cm' is centimeter // The PING is triggered by a HIGH pulse of 2 or more microseconds. // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: pinMode(trig, OUTPUT); digitalWrite(trig, LOW); delayMicroseconds(2); digitalWrite(trig, HIGH); delayMicroseconds(5); digitalWrite(trig, LOW); // The same pin is used to read the signal from the PING: a HIGH // pulse whose duration is the time (in microseconds) from the sending // of the ping to the reception of its echo off of an object. pinMode(echo, INPUT); duration = pulseIn(echo, HIGH); // Convert the time into a distance in = microsecondsToInches(duration); cm = microsecondsToCentimeters(duration); delay(100);// To save battery,remove if felt inconvenient if (in < 6 * d / 7)// Else is included to light only one led at a level and thus save battery charge digitalWrite(pin1, HIGH); else if (in < 5 * d / 6) digitalWrite(pin2, HIGH); else if (in < 4 * d / 6) digitalWrite(pin3, HIGH); else if (in < 3 * d / 6) digitalWrite(pin4, HIGH); else if (in < 2 * d / 6) digitalWrite(pin5, HIGH); else if (in < 1 * d / 6) digitalWrite(pin5, HIGH); }