Questions? E-mail

Questions? Comments?
Send e-mail to: ahmadsaad2011@gmail.com

Thursday, November 15, 2018

اردوينو: تمرين 8: البيت الذكي :عمل ساعة ضوئية داخل البيت باستخدام حساس الميل


تمرين 8: عمل ساعة ضوئية في اردوينو
Digital Hour Glass

يضيء اول ليد بعد 10 دقائق وكل 10 دقائق يضيء التالي حتي يضيئوا جميعا بعد مرور ساعة وهكذا

قم بتغيير الكود ليضيئ كل ليد بعد 10 ثواني  وهكذا...


القطع المطلوبة:
  tilt switch
led
10k ohm resistor
220 ohm resistor


tilt switch: حساس استشعار الميل
حساس أستشعار الميل يستخدم للكشف عن الميلان او عن الاتجاه, يتميز حساس استشعار الميل  بأنه سهل الاستخدام والبرمجة و لا يستهلك الكثير من الطاقة ، لهذا الحساس استخدامات مختلفة في حياتنا إلىومية فهي تستخدم غالبا في الالعاب او الأجهزة الحركية للكشف عن مقدار ميلان الجهاز ويمكن استخدامه بعدة تطبيقات في البيت الذكي.

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


شكل التوصيل:









الكود جاهز هنا:


// named constant for the switch pin
const int switchPin = 8;

unsigned long previousTime = 0; // store the last time an LED was updated
int switchState = 0; // the current switch state
int prevSwitchState = 0; // the previous switch state
int led = 2; // a variable to refer to the LEDs

// 600000 = 10 minutes in milliseconds
long interval = 600000; // interval at which to light the next LED

void setup() {
  // set the LED pins as outputs
  for (int x = 2; x < 8; x++) {
    pinMode(x, OUTPUT);
  }
  // set the tilt switch pin as input
  pinMode(switchPin, INPUT);
}

void loop() {
  // store the time since the Arduino started running in a variable
  unsigned long currentTime = millis();

  // compare the current time to the previous time an LED turned on
  // if it is greater than your interval, run the if statement
  if (currentTime - previousTime > interval) {
    // save the current time as the last time you changed an LED
    previousTime = currentTime;
    // Turn the LED on
    digitalWrite(led, HIGH);
    // increment the led variable
    // in 10 minutes the next LED will light up
    led++;

    if (led == 7) {
      // the hour is up
    }
  }

  // read the switch value
  switchState = digitalRead(switchPin);

  // if the switch has changed
  if (switchState != prevSwitchState) {
    // turn all the LEDs low
    for (int x = 2; x < 8; x++) {
      digitalWrite(x, LOW);
    }

    // reset the LED variable to the first one
    led = 2;

    //reset the timer
    previousTime = currentTime;
  }
  // set the previous switch state to the current state
  prevSwitchState = switchState;
}




No comments:

Post a Comment