الجمعة، 13 أبريل 2018

تشغيل واطفاء دايود ضوئي عن طريق زر واحد بطريقة milliSeconds

هل لديك تطبيق حيث تريد عدة أزرار لإدخالات المستخدم المختلفة؟ ربما لديك جهاز توقيت وتريد زر واحد للدقائق وآخر لساعات.

ولكن هناك مشكلة - لديك فقط مساحة لزر واحد!

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

اردوينو من اي نوع كان
اسلاك التوصيل
مقاومة 220 اوم
دايود ضوئي



كود البرمجة


int optionOne_milliSeconds = 100;
int optionTwo_milliSeconds = 2000;        
//The Pin your button is attached to
int buttonPin = 2;
//Pin your LEDs are attached to
int ledPin_Option_1 = 13;
int ledPin_Option_2 = 12;
void setup(){
  pinMode(buttonPin, INPUT_PULLUP);    
  //set the LEDs pins as outputs
  pinMode(ledPin_Option_1, OUTPUT);
  pinMode(ledPin_Option_2, OUTPUT);
  Serial.begin(9600);                                    
} // close setup
void loop() {
  while (digitalRead(buttonPin) == LOW ){
    delay(100);  
    Serial.print("ms = ");
    Serial.println(pressLength_milliSeconds);
  if (pressLength_milliSeconds >= optionTwo_milliSeconds){
    digitalWrite(ledPin_Option_2, HIGH);    
  }
  else if(pressLength_milliSeconds >= optionOne_milliSeconds){
    digitalWrite(ledPin_Option_1, HIGH);  
  }






الجمعة، 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);
    }    
}