الثلاثاء، 19 يونيو 2018

التحكم بتسعة اجهزة عن طريق بلوتوث اردوينو - control 9 devices via arduino bluetoth

ربط الدائرة 




كود البرمجة 

#include <SoftwareSerial.h>

SoftwareSerial BT(10, 11); //TX, RX respetively
String device;

void setup() {
 BT.begin(9600);
 Serial.begin(9600);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);


}
//-----------------------------------------------------------------------// 
void loop() {
  while (BT.available()){  //Check if there is an available byte to read
  delay(10); //Delay added to make thing stable
  char c = BT.read(); //Conduct a serial read
  device += c; //build the string.
  } 
  if (device.length() > 0) {
    Serial.println(device);

  if(device == "1")
  {
    digitalWrite(3, HIGH);
  }

  else if(device == "2")
  {
    digitalWrite(3, LOW);
    
  }

  else if (device == "3")
  {
    digitalWrite (4,HIGH);
    
  }
  
 else if ( device == "4")
 {
   digitalWrite (4, LOW);
 }

 else if (device == "5")
 {
   digitalWrite (5, HIGH);

 }

 else if (device == "6")
 {
   
 digitalWrite (5, LOW);

}

 else if (device == "7")

 {
   
   digitalWrite (6, HIGH);
   
 }

 else if (device == "8")

 {
   
 digitalWrite (6, LOW);

}

else if (device == "9")

 {
   digitalWrite (7, HIGH);
 }

else if (device == "10")

 {
   
 digitalWrite (7, LOW);

}

 else if (device == "11")

 {
   
   digitalWrite (8, HIGH);
   
 }

else if (device == "12")
 {

 digitalWrite (8, LOW);

}

 else if (device == "13")

 {
   digitalWrite (9, HIGH);
   
 }

else if (device == "14")

 {
   
   digitalWrite (9, LOW);

 }

  else if (device == "15")
  
 {
   digitalWrite (12, HIGH);
}

else if (device == "17")

 {
   digitalWrite (12, LOW);
   
}

 else if (device == "16")

 {
   
   digitalWrite (13, HIGH);
   
 }
   
else if (device == "18")
 {
   digitalWrite (13, LOW);
   }
   
device="";}} //Reset the variable





الأربعاء، 6 يونيو 2018

التحكم التلقائي بالانارة باستخدام اردوينو ---Auto Power Controller (APC



جهاز إنترنت الأشياء (IoT) لتشغيل / إيقاف تشغيل الأجهزة الإلكترونية تلقائيًا بناءً على توفر الكائنات البشرية ، خاصة في الخدمات العامة

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

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

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

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

هناك حالات استخدام شاهدة ، حيث لا يتوفر الأشخاص في الغرف لأكثر من ساعة أو نحو ذلك ، ولكن يتم تشغيل الأجهزة الإلكترونية ، حتى يعودوا إلى الغرفة (أو) حتى نهاية الوقت.

تحكم تلقائي في الطاقة - تقنية Stack:

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

صافي التوفير = عدد وحدات توفير الطاقة * معدل لكل وحدة طاقة (يحددها مزود الطاقة)

جهاز استشعار شرطة التدخل السريع

وحدة المعالجات الدقيقة

PCB Relay 5v

المقاوم 220 أوم (أي المقاوم أدناه 1k أوم)

البطارية (5-9 فولت)

توصيل الأسلاك

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

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


Apc fc auihfrphwf


int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status

void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input

Serial.begin(9600);
}

void loop(){
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
if (pirState == LOW) {
// we have just turned on
Serial.println("Motion detected!");
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (pirState == HIGH){
// we have just turned of
Serial.println("Motion ended!");
// We only want to print on the output change, not state
pirState = LOW;
}
}
}



الاثنين، 4 يونيو 2018

الموقتات الداخلية اردوينو - Internal Timers of Arduino

المكونات

اردوينو اونو او جينون اونو
دايود ضوئي
مقاومة 220 اوم

نظرة عامة
إذا كنت بحاجة إلى حساب وقت دقيق ، فأنت بحاجة إلى استخدام جهاز توقيت ، ولكن عادة ليس من السهل استخدام المؤقتات الداخلية لـ Arduino ، لذا أحاول في هذا البرنامج التعليمي شرح كيفية استخدامها بطريقة سهلة.

من الأهمية بمكان استخدام المؤقتات لأنك لا تستطيع فعل أي شيء أثناء وظيفة التأخير () ، ولكن باستخدام جهاز توقيت ، يمكنك القيام بكل شيء لأنه عندما تصل اللحظة ، تقوم بتنشيط المقاطعة.

أستخدم TIMER0 لأنه هو أسهل توقيت ، وربما أقوم في المستقبل بشرح الموقتات الأخرى.

كيف تعمل
أول شيء يجب أن تراه هو ورقة بيانات ATmega328P.
COUNTER BLOCK DIAGRAM
هذا هو مخطط كتلة العداد ، وبالنظر إلى هذا يمكنك فهم كيفية عمله.

يتلقى جهاز metaler نبضًا من دورة الساعة ثم يمررها إلى Control Logic ، وبالتالي يزيد Log Control من سجل TCNTn بمقدار 1.

الآن يمكننا مقارنة قيمة TCNTn بقيمة محددة. عندما يصل سجل TCNTn إلى هذه القيمة ، ستعرف أنه يتم تمريره في وقت محدد.

هذه الطريقة تسمى وضع CTC لـ "Clear Timer on Compare". تتم مقارنة قيمة سجل TCNTn بسجل OCRn ، عندما تحدث مطابقة مقارنة TOVn يولد مقاطعة.

هناك شيء آخر مهم هو أداة التحضير ، مع هذا يمكنك إنشاء أقسام مختلفة من الساعة ، في الواقع 16MHz هو أكثر من اللازم ، ولكن بفضل وحدة التحضير ، يمكنك إنشاء بعض submultiples منه. هذا يعتمد على تكوين سجل TCCR0B.



شيء آخر مهم هو تحديد قيمة التسجيل OCRn لحساب وقت معين ، تحتاج إلى القليل من الرياضيات.


أعلم أن كل هذا يمكن أن يبدو معقدًا للغاية ولكني متأكد من أن الشفرة أدناه ستوضح كل سؤال.

في هذه الحالة ، نقوم بتنشيط طلب المقاطعة كل 0.1 ثانية.

TCCR0A|=(1<<WGM01);    //Set the CTC mode
 OCR0A=0xF9;            //Set the value for 1ms
 TIMSK0|=(1<<OCIE0A);   //Set the interrupt request
 sei();                 //Enable interrupt
 TCCR0B|=(1<<CS01);    //Set the prescale 1/64 clock
 TCCR0B|=(1<<CS00);
ISR(TIMER0_COMPA_vect){    //This is the interrupt request
}

من المهم تعيين أداة التحذير في النهاية لأنه بعد هذه التعليمات يبدأ الموقت في العد ، إذا احتجت إلى إيقافها ، يجب إعادة ضبط كل بتات TCCR0B.

/*
This program turns on and off a LED on pin 13 each 1 second using an internal timer
*/

int timer=0;
bool state=0;
void setup() {
  pinMode(13,OUTPUT);
    
  TCCR0A=(1<<WGM01);    //Set the CTC mode   
  OCR0A=0xF9; //Value for ORC0A for 1ms 
  
  TIMSK0|=(1<<OCIE0A);   //Set the interrupt request
  sei(); //Enable interrupt
  
  TCCR0B|=(1<<CS01);    //Set the prescale 1/64 clock
  TCCR0B|=(1<<CS00);

 
    
}

void loop() {
  //in this way you can count 1 second because the nterrupt request is each 1ms
  if(timer>=1000){
    state=!state;
    timer=0;
  }
  
  digitalWrite(13,state);
  
}

ISR(TIMER0_COMPA_vect){    //This is the interrupt request
  timer++;
}