يتم التشغيل بواسطة Blogger.

الأحد، 20 مارس 2016

جهاز معرفة مستوى الماء في الخزانات water level indicator




في هذه التجربة سنقوم بعمل جهاز لتحديد لمستوى ( ارتفاع ) الماء في الخزان , يظهر لنا ارتفاع الماء داخل الخزان  و اختيار نوع للتنبيه في حالة كان كان الخزان ممتلئ أو اذا كـان فـارغ !



مـاذا نحتـــاج ؟ 


  1. • متحكــم آردوينو (أي نوع ) .
  2. • حساس ألتـراسونــك ( HC-SR04 , أو اي نوع آخر ) .
  3.   (هذا النوع لا يعمل تحت الماء لذلك تجنب تعريضه للماء و الرطوبة قدر الامكان)
  4. • شاشة LCD 16×2  .
  5. • طنان كهربائي (buzzer) .
  6. • ضوء LED .
  7. • رز تحكم ( push button ) عدد 2 .
  8. • مقاومـة 10K  عدد 2 .
  9. • مقاومـة متغيرة ( potentiometer ) .
  10. • لوجة تجارب مثقبة (breadboard).
  11. • اسلاك توصيل .


• هل تجد صعوبة في توفير القطع الالكترونية باسعار مناسبة ؟ 
اقرأ هذا المقال عن كيفية شراء اقطع الالكترونية من خلال الانترنت




لنبـــدأ :

عمل البرنامج سيكون حسب التسلسل الت :


شــــاهد الفيديو التالـــــي :




لنبدأ مع حساس الألتراسونـــك , يُـمكِـنُـنا هذا الحساس من معرفة المسافة بشكل دقيق بينه و بين الأجسام التي امامه , فهـو يقوم بارسـال موجات فوق صوتيه , و في حال انتقلت هذه الموجات من وسـط الى وسـط آخر تنعكس بعض هذه الموجات الى الحساس فنقوم بحساب الوقت اللازم للعودة الموجة , ولأن سرعة هذه الأمواج في الفراغ ثابته , يمكننــا حســاب المســافــة التي قطعتها الأمــواج !






نوصل  الحساس مع الاردوينو كالتالي :

Trigger  مــــع  ( Pin 10) .

Echo   مــــع  ( Pin 9 ) .

Vcc مــع مصدر تغذية 5V  في الاردوينو .

GND  مـع الارضي في الاردوينو .





في هذه التجربة سيقوم المستخدم بتحديد نوع التنبيه , و يقوم الجهاز ايضاُ بعرض مستوى الماء باستمرار , لذلك نحتاج لأدوات ادخال و اخراج مع الردوينو .
سوف نستخدم الأزرار و شاشة كريستالية 16×2 .


توصيل الشاشة مع الاردوينو يكون حسب المخطط التالــي : 


من السهل جداً التعامل مع هذا النوع من الشاشات , لوجود مكتبة تدعمـه , مما يسهل كتابة الكودات داخل البرنامج الكلي !






نقوم بتوصيل الأزرار مع المقاومة (pull-down) و توصيلها مع الاردوينو على المداخل 6 , 7 !






و نقوم بتوصيل الطنان الكهربائي و ضوء التنبيه على المدخل رقم 13 .

نقوم بتوصيل طرف GND من الطنان على المدخل 13 . اي ان الطنان سوف يعمل عندما تكون حالة المدخل LOW  و منطفئ عندما تكون حالة المدخل HIGH .
و ذلك كي تكون تغذية الاطنان مباشرة من الـ 5 V  و لا تعتمد على تغذية المدخل 13 !
لأن تغذية المدخل قد لا تكفي للطنان و الضوء ( و لا ننسى وجود LED داخلي موصول معه في بطاقة الاردوينو ).

و يكون الشكل النهائي للدارة كما يلي :









البرمجــة :

بعد توصيل كل المكونات و تجهيزهـا , نكتب الكود البرمجي التالي للتحكم فيهــا  :




/*
   Project : Water Level Detector & Alarm !!
   By : Ali Hadabeen , Hashemite University, 2013
   https://www.facebook.com/ali.hadabeen 
*/

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#define trigPin 10
#define echoPin 9
#define alarmPin 13
#define button_1 7
#define button_2 6
int a ; // alarm mode

void setup() {
  
  lcd.begin(16, 2);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(alarmPin, OUTPUT);
  pinMode(button_1, INPUT);
  pinMode(button_2, INPUT);
  digitalWrite(alarmPin, HIGH);       // the GND line of alarm is connecting to this pin !
  delay (150);
  lcd.clear();
  lcd.print("Level Sensor");
  lcd.setCursor(0, 1);
  delay (150);
  lcd.print("By: Ali Hadabeen");
  delay (5000);
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print("select Alarm");
  lcd.setCursor(5, 1);
  lcd.print("mode");

  while ( digitalRead(button_1) == LOW && digitalRead(button_2) == LOW ) {} 
  if ( digitalRead(button_1) == HIGH )
  { a = 1;} // FULL alarm mode
  else if (digitalRead(button_2) == HIGH)
  { a = 2;} // EMPTY alarm mode
  lcd.clear();
  delay(150);
   if (a == 1 )
   {  lcd.print("FULL Alarm Mode"); }       // turn the LED off by making the voltage LOW
  else if(a==2)
  { lcd.print("EMPTY Alarm Mode");} 

}


void loop() {
  
  delay (2000);
  lcd.clear();
  lcd.print(" Water Level : ");
  lcd.setCursor(5, 1);
  if (a == 1 ){
      while ( a == 1 ){
          int duration, distance;
          digitalWrite(trigPin, HIGH);
          delayMicroseconds(1000);
          digitalWrite(trigPin, LOW);
          duration = pulseIn(echoPin, HIGH);
          distance = (duration/2) / 29.1;
          lcd.setCursor(5, 1);
          lcd.print(100 - distance);
          delay(100);
          if (distance >= 200 || distance <= 0){
            lcd.clear();
            lcd.print("Out of range");
            digitalWrite(alarmPin, LOW); }
          else if (distance <= 10) {
            lcd.clear();
            lcd.print("FULL Tank !");
            digitalWrite(alarmPin, LOW); }
      }
  }
  
if (a == 2) {
    while ( a == 2 ){
          int duration, distance;
          digitalWrite(trigPin, HIGH);
          delayMicroseconds(1000);
          digitalWrite(trigPin, LOW);
          duration = pulseIn(echoPin, HIGH);
          distance = (duration/2) / 29.1;
          lcd.setCursor(5, 1);
          lcd.print(100 - distance);
          delay(100);
          if (distance >= 200 || distance <= 0){
            lcd.clear();
            lcd.print("Out of range");
            digitalWrite(alarmPin, LOW); }
          else if (distance >= 100) {                       // the tank depth = 1 meter (100cm)
            lcd.clear();
            lcd.print("EMPTY Tank !");
            digitalWrite(alarmPin, LOW); }
      }
  }


}
  
  

تثبيت الحساس على الخزان :


• يجب تثبيت الحساس في اعلى الخزان بعيداً عن اي مياه ! لأن هذا الحساس غير مقاوم و سيتلف مباشرة عند ملامسته للماء !

• يجب ان يكون هناك مجرى للماء بعيد عن الحساس في حال امتلأ الخزان !

• قم بقياس المسافة من الحساس  حتى قعر الخزان و اضف القيمة للكود البرمجي .   

• لا تقم بتمديد اسلاك طويلة ( لنقل الشاشة لداخل البيت مثلاً ) , اذا اردت فصل الحساس عن شاشة العرض جرب نقل القراءة لاسلكياً .

____________________________________________________

____________________________________________________

• زاوية الموجات الخارجة من الحساس 30 درجة , تأكد انه لا توجد اي عوائق في طريقها غير الماء !




عندما يقترب مستوى الماء من الحساس , قد يعطي قراءات خاطئة (المسافة تعتمد على نوع الحساس من 3 - 10 سم ) . 

لذلك من الأفضل ( في حالة السوائل ) ان يكون الحساس داخل الخزان , لتجنب حدوث اخطاء عند امتلاء الخزان .




 ◙◙◙◙◙  تــنـبـــيـــه  ◙◙◙◙◙  
الحساس المستخدم في التجربة غير مقاوم للماء ,
و ضعه داخل الخزان سوف يسبب تـلـفـه  ! 
◘◘◘◘◘◘◘◘◘◘◘◘




ليست هناك تعليقات :

إرسال تعليق

تطوير : مدونة حكمات