404

الصفحه التي تبحث عنها غير موجوده

تصميم نظام حماية والدمج مع انظمة السمارت هوم

0

 بسم الله الرحمن الرحيم

بعد ان قمنا بتصميم عدة مشاريع عن المنزل الذكي سنصمم مشاريع الغرض منها حماية المنزل ودمجها مع مشاريع السمارت هوم 
هذا المشروع الغرض منه هو حماية المنزل عن طريق استخدام keypad و موتور سيرفو

ملحوظة : تم الإستغناء عن جزء الخاص بانذار الحرائق 


الأدوات :

Arduino uno
keypad
motor servo

Arduino uno

المتحكم الذي استخدمته ويمكن استبداله باي متحكم اخر 


keypad

لوحة المفاتيح وهي مخصصة للتعامل مع الأردوينو وتحتوي علي 4 صفوف و 4 اعمده

motor servo

موتور السيرفو الذي سيتم استخدامه في فتح او غلق القفل الخاص بالباب

ثانيا التوصيلات :


يحتوي keypad علي 8 منافذ 
4 منافذ للصفوف و 4 منافذ للأعمدة يتم توصيلهم جميعا الي المنافذ الرقمية الخاصه بالأردوينو 
وموتور سيرفو يحتوي علي 3 منافذ منفذ الإشارة يتم توصيله الي المنفذ الرقمي ومنفذ الطاقة الي 5 فولت ومنفذ السالب الي السالب

ثالثا الكود :

#include <Servo.h>
#include <Keypad.h>
const byte row = 4;
const byte col = 4;
char keys[row][col]={
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowpin[row]={r1,r2,r3,r4};
byte colpin[col]={c1,c2,c3,c4};
Keypad kpd(makeKeymap(keys),rowpin,colpin,row,col);
Servo servo;
#define serv servopin
char StorePass[]="your password";
int i=0,count=0,number=sizeof(StorePass)-1;
char pass[sizeof(StorePass)-1];
void setup() {
  servo.attach(serv);
}
void loop() {
 char key = kpd.getKey();
  if (key>'0'&&key!='D'){
    pass[i]=key;
    i++;}
  if(key=='D'){
    if(i==number){
      for(int j=0;j<number;j++){
        if(pass[j]==StorePass[j])count++;
     }
      if(count==number){
        servo.write(165);
        delay(2000);
        i=0;
        count=0;}}}
  servo.write(5);}
هذا هو الكود الخاص بمنظومة الحماية وهذا الكود سيكون مدمج مع اكواد التحكم باﻷجهزة التي قمنا بتصميمها من قبل 
في البداية يجب تعريف المكتبات وتعريف الحروف والأرقام الخاصة ب keypad وتعريف منفذ الموتور وتعريف منافذ keypad الصفوف والأعمده وتعريف متغيرات الخاصة بالباسورد ومتغيرات خاصه لبعض العمليات الأخري
#include <Servo.h>
#include <Keypad.h>
const byte row = 4;
const byte col = 4;
char keys[row][col]={
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowpin[row]={r1,r2,r3,r4};
byte colpin[col]={c1,c2,c3,c4};
Keypad kpd(makeKeymap(keys),rowpin,colpin,row,col);
Servo servo;
#define serv servopin
char StorePass[]="your password";
int i=0,count=0,number=sizeof(StorePass)-1;
char pass[sizeof(StorePass)-1];
void setup() {
  servo.attach(serv);}
بعد ذلك تم انشاء متغير لتخزين ما تم ضغطه علي keypad في هذا المتغير
بعد ذلك تخزين ما تم ضغطه داخل مصفوفة ومقارنة عناصر المصفوفة التي قمنا بانشاءها مع عناصر المصفوفة الأخري التي تحتوي علي الباسورد الصحيح وفي حالة تطابق المصفوفتين يتم تحريك موتور السيرفوا بزاوية 165 و الإنتظار ثانيتين و بعد ذلك تحريك الموتور بزاية 5 درجات

وفي النهاية لإدخال الباسورد يجب الضغط علي حرف D فهو بمثابة زر enter في لوحة المفاتيح 

هناك نوع من القفول الأوتوماتيكيى التى تعمل على 12 فولت والتى يمكن إستخدامها مع الأردوينو بإستعمال ترانزيستور 

لتحميل الكود :

تصميم وبرمجة : بلال حسان سعدي

تصميم منزل ذكي باستخدام ريموت التحكم

0

 بسم الله الرحمن الرحيم

بعد ان قمنا بتصميم عدة مشاريع عن المنزل الذكي ومنها التحكم عن طريق الواي فاي من اي مكان في العالم و التحكم من داخل الشبكة عن طريق شريحة nodemcu والتحكم عن طريق البلوتوث من عن طريق الأردوينو 
وللإطلاع علي المشاريع السابقة


لكن سنقوم اليوم بتصميم مثل هذا المشروع حيث سنتحكم بالأجهزة عن طريق الريموت كنترول و بالإَضافة الي نظام انذار الحرائق وتسرب الغازات


اولا الأدوات : 

Arduino uno
pizo
TMP35 temperature sensor
mq sensor
relay 4 channel
ir remote

Arduino uno

شريحة المتحكم الذكي التي تقوم بمعالجة كل البيانات

pizo

سماعه لإخراج انذار في حالة وجود حريق

TMP35 temperature sensor

حساس الحرارة التماثلي يقوم باعطاء معلومات عن درجة الحرارة البيئة المحيطة به بمثابة تيار كهربائي

mq sensor

حساس mq هو حساس لديه القدرة علي استشعار غازات ولديه العديد من الأنواع حيث يتخصص كل نوع في نوع معين من الغازات
  • MQ-2 - Methane, Butane, LPG, smoke
  • MQ-3 - Alcohol, Ethanol, smoke
  • MQ-4 - Methane, CNG Gas
  • MQ-5 - Natural gas, LPG
  • MQ-6 - LPG, butane gas
  • MQ-7 - Carbon Monoxide
  • MQ-8 - Hydrogen Gas
  • MQ-9 - Carbon Monoxide, flammable gasses
  • MQ131 - Ozone
  • MQ135 - Air Quality (CO, Ammonia, Benzene, Alcohol, smoke)
  • MQ136 - Hydrogen Sulfide gas
  • MQ137 - Ammonia
  • MQ138 - Benzene, Toluene, Alcohol, Acetone, Propane, Formaldehyde gas, Hydrogen
  • MQ214 - Methane, Natural gas
  • MQ216 - Natural gas, Coal gas

relay 4 channel

الريلاي هو مكون الكتروني لديه القدرة في التحكم في تيارات وجهود كبيرة بواسطه جهود قليلة (5 فولت)

ir remote

ريموت التحكم وهو يعمل علي الإشارات التحت حمراء

ثانيا التوصيلات :


يتم توصيل الريلاي بهذه الطريقة 
vcc to 5v
in1 to 7 
in2 to 6
in3 to 5
in4 to 4
gnd to gnd
ويتم توصيل المستلم الخاص بريموت ir الموجب الي الموجب و منفذ الإشارة الي منفذ 3 الرقمي والسالب الي السالب
السماعه تحتوي علي منفذان الموجب يتم توصيله الي المنفذ الرقمي رقم 8 والسالب الي السالب
ويحتوي الحساس mq علي 4 منافذ الموجب يتم توصيله الي موجب والسالب الي السالب و الخرج التماثلي الي منفذ رقم A0
وحساس الحرارة يحتوي علي 3 منافذ الموجب الي مصدر الطاقة والسالب الي السالب و منفذ الإشارة الي A1

ثالثا الكود :

 للعمل مع ir remote نقوم بتنزيل مكتبة خاصة به 
للتنزيل اضغط هنا

والأن نتجه الى الكود 

فى البداية يجب معرفة الأكود التى يرسلها الريموت الى المستشعر لكى نستطيع التمييز بينها 

بواسطة هذا الكود 
والذى يمكنكم تحميله من هنا 
بعد رفع الكود الى الاردوينو نذهب الى صفحة السيريال مونيتور 
ونبدء الضغط على الريموت ضغطة سريعة على الأزرار التى تريد تعيينها للتحكم بالأجهزة 
نحن سنقوم بتجهيز كود للتعامل مع اربعة ازرار من الريموت للتحكم فى جهازين 

عند الذهاب على السيريال مونيتور ونضغط على اى زر فى الريموت يأتى هذا الرمز

وهذا الرمز يختلف من زر الى زر ومن ريموت الى ريموت 
فهذا الرمز تم ارساله الريموت عند الضغط على زر رقم 2
فيجب معرفة كل الرموز الأزرار التى ستسخدمونها للتحكم فى الأجهزة 

وننتقل الي الكود الفعلي بعد ان قمنا بجمع الرموز كلها:
#include <IRremote.h>
IRrecv rec(pin);
decode_results res;
int relay1 = relaypin1 ;
int relay2 = relaypin2 ;
int relay2 = relaypin3 ;
int relay2 = relaypin4 ;
int gasen =A0;
int tmsen =A1;
int sp =4 , valgs , valtm;
void setup(){
  pinMode(relay1,OUTPUT);
  pinMode(relay2,OUTPUT);
  pinMode(relay3,OUTPUT);
  pinMode(relay4,OUTPUT);
  rec.enableIRIn();
  Serial.begin(9600);
  pinMode(sp,OUTPUT);}
void loop(){
  if(rec.decode(&res)){
    if(res.value == 0xzzzzzz) {
     digitalWrite(relay1,LOW);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay1,HIGH);}
    if(res.value == 0xzzzzzz) {
     digitalWrite(relay2,LOW);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay2,HIGH);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay3,LOW);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay3,HIGH);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay4,LOW);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay4,HIGH);}              
  rec.resume();}}
void fire_alarm(void){
  valgs=analogRead(gasen);
  valtm=analogRead(tmsen);
  valtm=valtm * 0.48828125;
  if(valgs>400){
    tone(sp,250);}
  if(valtm>60){
    tone(sp,250);}
  noTone(sp); }
ينقسم الكود الي ثلاثة اقسام القسم الأول وهو التعريفات حيث تم اضافة المكتبة اللازمة والمتغيرات وتعريف المخارج والمداخل وتعريف الريموت داخل المكتبة ويجب كتابة المنفذ الخاص بالريموت بدلا من كلمة pin
#include <IRremote.h>
IRrecv rec(pin);
decode_results res;
int relay1 = relaypin1 ;
int relay2 = relaypin2 ;
int relay2 = relaypin3 ;
int relay2 = relaypin4 ;
int gasen =A0;
int tmsen =A1;
int sp =4 , valgs , valtm;
void setup(){
  pinMode(relay1,OUTPUT);
  pinMode(relay2,OUTPUT);
  pinMode(relay3,OUTPUT);
  pinMode(relay4,OUTPUT);
  rec.enableIRIn();
  Serial.begin(9600);
  pinMode(sp,OUTPUT);}
القسم الثاني هو التحكم بالأجهزة حيث يتم التاكد من ان الريموت متاح وعمل مقارنه للبيانات التي يتم استلامها من قبل الريموت عن طريق
 if(rec.decode(&res)){
    if(res.value == 0xzzzzzz) {
     digitalWrite(relay1,LOW);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay1,HIGH);}
    if(res.value == 0xzzzzzz) {
     digitalWrite(relay2,LOW);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay2,HIGH);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay3,LOW);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay3,HIGH);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay4,LOW);}
    if(res.value == 0xzzzzzz){
     digitalWrite(relay4,HIGH);}     
حيث يتم استبدال zzzzzzzz بالأكواد التي حصلنا عليها من قبل قليل
والقسم الأخير هو قسم انذار الحرائق حيث يتم قراءة البيانات الناتجة من الحساساتوعمل مقارنات عليها وفي حالة تخطي قيمة احد الحساسات القيمة المرجعية سيتم اصدار انذار من السماعه
void fire_alarm(void){
  valgs=analogRead(gasen);
  valtm=analogRead(tmsen);
  valtm=valtm * 0.48828125;
  if(valgs>400){
    tone(sp,250);}
  if(valtm>60){
    tone(sp,250);}
  noTone(sp); 
وهكذا نصل الي نهاية المشروع تجربة ممتعه
لتحميل الكود اضغط هنا 
تصميم وبرمجة : بلال حسان سعدي

تصميم منزل ذكي التحكم من خلال البلوتوث

0

 بسم الله الرحمن الرحيم

بعد ان قمنا بتصميم مشروع للتحكم في منزل الذكي عن طريق blynk و التخكم من داخل الشبكة عن طريق شريحة nodemcu
وللإطلاع علي هذه المشاريع
سنقوم اليوم بتصميم مشروع مشابه لهذه المشاريع ولكن التحكم عن طريق البلوتوث


اولا الأدوات : 

Arduino uno
pizo
TMP35 temperature sensor
mq sensor
relay 4 channel
hc-05 Bluetooth module

Arduino uno

شريحة المتحكم الذكي التي تقوم بمعالجة كل البيانات

pizo

سماعه لإخراج انذار في حالة وجود حريق

TMP35 temperature sensor

حساس الحرارة التماثلي يقوم باعطاء معلومات عن درجة الحرارة البيئة المحيطة به بمثابة تيار كهربائي

mq sensor

حساس mq هو حساس لديه القدرة علي استشعار غازات ولديه العديد من الأنواع حيث يتخصص كل نوع في نوع معين من الغازات
  • MQ-2 - Methane, Butane, LPG, smoke
  • MQ-3 - Alcohol, Ethanol, smoke
  • MQ-4 - Methane, CNG Gas
  • MQ-5 - Natural gas, LPG
  • MQ-6 - LPG, butane gas
  • MQ-7 - Carbon Monoxide
  • MQ-8 - Hydrogen Gas
  • MQ-9 - Carbon Monoxide, flammable gasses
  • MQ131 - Ozone
  • MQ135 - Air Quality (CO, Ammonia, Benzene, Alcohol, smoke)
  • MQ136 - Hydrogen Sulfide gas
  • MQ137 - Ammonia
  • MQ138 - Benzene, Toluene, Alcohol, Acetone, Propane, Formaldehyde gas, Hydrogen
  • MQ214 - Methane, Natural gas
  • MQ216 - Natural gas, Coal gas

relay 4 channel

الريلاي هو مكون الكتروني لديه القدرة في التحكم في تيارات وجهود كبيرة بواسطه جهود قليلة (5 فولت)

hc-05 Bluetooth module

شريحة البلوتوث والتي تعد بمثابة مستقبل للاوامر من التطبيق في التحكم في اﻷجهزة

ثانيا التصميم :





في البداية يتم توصيل شريحة البلوتوث هكذا
rx to 2D
tx to 3D
vcc to 5v
gnd to gnd
ويتم توصيل الريلاي هكذا
vcc to 5v
IN1 TO 8
IN2 TO 7
IN3 TO 6
IN4 TO 5
وتوصيل حساس الحرارة منفذ الطاقة الي الطاقة والسالب الي السالب ومنفذ الإشارة الي A1
وحساس MQ توصيل + الي + والسالب الي السالب والإِشارة الي المنفذ رقم A0
وتوصيل السماعه الموجب الي المنفذ الرابع والسالب الي السالب

ثالثا الكود : 

#include<SoftwareSerial.h>
SoftwareSerial bt(2,3);
void fire_alarm(void);
#define IN1 5
#define IN2 6
#define IN3 7
#define IN4 8
int gasen =A0;
int tmsen =A1;
int sp =4 , valgs , valtm;
void setup() {
  bt.begin(9600);
  for(int i=4;i<9;i++){
    pinMode(i,OUTPUT);
  }}
void loop() {
  fire_alarm();
  if(bt.available()>0){
    char data = bt.read();
    switch(data){
      case 'a':
        digitalWrite(IN1,HIGH);
        break;
      case 'b':
        digitalWrite(IN1,LOW);
        break;
      case 'c':
        digitalWrite(IN2,HIGH);
        break;
      case 'd':
        digitalWrite(IN2,LOW);
        break; 
      case 'e':
        digitalWrite(IN3,HIGH);
        break; 
      case 'f':
        digitalWrite(IN3,LOW);
        break;
      case 'g':
        digitalWrite(IN4,HIGH);
        break;
      case 'h':
        digitalWrite(IN4,LOW);
    } }}
void fire_alarm(void){
  valgs=analogRead(gasen);
  valtm=analogRead(tmsen);
  valtm=valtm * 0.48828125;
  if(valgs>400){
    tone(sp,250); }
  if(valtm<60){
    tone(sp,250); }
  noTone(sp); }
ينقسم الكود الي 3 اقسام رئيسية 
قسم التعريفات حيث تم اضافة المكتبة وتعريف المتغيرات الأساسية وتعريف المنافذ كمخارج او مداخل
#include<SoftwareSerial.h>
SoftwareSerial bt(2,3);
void fire_alarm(void);
#define IN1 5
#define IN2 6
#define IN3 7
#define IN4 8
int gasen =A0;
int tmsen =A1;
int sp =4 , valgs , valtm;
void setup() {
  bt.begin(9600);
  for(int i=4;i<9;i++){
    pinMode(i,OUTPUT);
  }}
القسم الثاني هو انذار الحرائق حيث قراءة بيانات الحساسات ومرجعتها ببيانات مرجعية وفي حالة وجود حريق يقوم الجهاز باصدار الإنذار
  valgs=analogRead(gasen);
  valtm=analogRead(tmsen);
  valtm=valtm * 0.48828125;
  if(valgs>400){
    tone(sp,250); }
  if(valtm<60){
    tone(sp,250); }
  noTone(sp); }
القسم الأخير هو قسم التحكم بالأجهزة حيث يتم مراقبة خط البلوتوث وترقب اي بيانات مرسلة وفي حالة تم ارسال البيانات يتم اتخاذ اداء معين حسبا لهذه البيانات
 if(bt.available()>0){
    char data = bt.read();
    switch(data){
      case 'a':
        digitalWrite(IN1,HIGH);
        break;
      case 'b':
        digitalWrite(IN1,LOW);
        break;
      case 'c':
        digitalWrite(IN2,HIGH);
        break;
      case 'd':
        digitalWrite(IN2,LOW);
        break; 
      case 'e':
        digitalWrite(IN3,HIGH);
        break; 
      case 'f':
        digitalWrite(IN3,LOW);
        break;
      case 'g':
        digitalWrite(IN4,HIGH);
        break;
      case 'h':
        digitalWrite(IN4,LOW);
    } }}

رابعا التطبيق :


تطبيق قمت بتصميمه عبر منصة app inventor يجب في البداية الإتصال بشريحة البلوتوث ثم الإستمتاع بتجربة التطبيق والمشروع

لتحميل الكود والتطبيق من هنا


تصميم وبرمجة : بلال حسان سعدي

سلسلة تصميم smart home #2

0

بسم الله الرحمن الرحيم

بعد ان قمنا بتصميم جزء من السمارت هوم يمكنكم الإطلاع عليه من هنا 

سنصمم اليوم احد منظومات الأمان التي يمكن تركيبها في الحدائق اوفي السيارة تعد هذه المنظومة بسيطه نسبيا ويمكننا التطوير عليها فيما بعد


اولا الأدوات :

 power switch

arduino uno

rib sensor

 power switch

سويتش الغرض منه التحكم في تشغيل المنظومة او اطفائها حيث لا يتم تشغيل المنظومة الا في وقت محدد بواسطة المستخدم 

arduino uno

المتحكم الذي استخدمته في معالجة البيانات 


rib sensor

حساس الحركة الذي يمكنه من التحسس بوجود حركة في اي مكان 

ثانيا التوصيلات :





في البداية يحتوي حساس rib علي ثلاث منافذ منفذ + الي 5 فولت ومنفذ السالب الي السالب ومنفذ الإشارة الرقمية الي منفذ 5
وتوصيل السويتش الي طرف السالب والطرف الأخر الي 6
وتوصيل السماعه السالب الي السالب وتوصيل الموجب الي منفذ رقم 4 بالأردوينو

ثالثا الكود : 

int sw = 6;
int sen = 5;
int sp = 4;
void setup(){
  pinMode(sw,INPUT_PULLUP);
  pinMode(sp,OUTPUT);
  pinMode(sen,INPUT);}
void loop(){
 int val = digitalRead(sen);
 int val2 = digitalRead(sw);
 if(val2 == 0){
   if(val == 1){
    tone(sp,250); 
   }
   else{
    noTone(sp); 
   } }
 else{
   noTone(sp); }}
في البداية يجب تعريف المنافذ 
منفذ السماعه كخرج ومنفذ السويتش كدخل علي مقاومة رفع ومنفذ الحساس كدخل 
وتعريف متغير لوضع فيه الإشارة القادمه من السويتش ومن الحساس 
ثم القيام بمقارنات 
لو تم تشغيل السويتش قم بالقراءة من الحساس هل توجد حركة 
اذا وجدت شغل السماعه اذا اختفت الحركة اوقف السماعه 
اذا اغلق السويتش اوقف السماعه 

لتحميل الكود اضغط هنا 

تصميم وبرمجة : بلال حسان سعدي 



سلسلة تصميم smart home #1

2

 بسم الله الرحمن الرحيم

سنبدأ اليوم سلسلة جديده علي موقعنا وهي سلسلة تصميم smart home
وسنبدا اليوم باول مشاريع هذه السلسلة مشروعنا اليوم عبارة عن باب اوتامتيكي يفتح عندما يقترب جسم منه يمكن تنفيذ هذا المشروع في سلة نفايات تفتح عندما يقترب احد منها 

أولا الأدوات : 

Arduino uno
ultrasonic sensor
servo motor

Arduino uno

المتحكم الذي استخدمته في معالجة البيانات استخدمت في هذا المشروع اردوينو اونو


ultrasonic sensor

حساس التراسونيك او حساس الموجات الفوق صوتيه وهذا الحساس له القدرة علي معرفة اذا كان هناك جسم علي مدي 50 سم منه

servo motor

الموتور الذي سيؤدي وظيفة فتح او غلق الباب او فتح او غلق  سلة المهملات 

ثانيا التوصيلات


يحتوي حساس الموجات الفوق صوتيه علي 4 منافذ 
يتم توصيل الموجب الي 5 فولت والسالب الي السالب 
ومنفذ trig الي 8 و منفذ echo الي 7
ويحتوي الموتور السيرفو علي3 منافذ
منفذ الموجب الي 5 فولت ومنفذ السالب الي السالب 
ومنفذ الإشارة الي 6 

ثالثا الكود : 

#include <Servo.h>
int trig = 8;
int echo = 7;
long duration =0;
int distance=0;
Servo servo;
void setup(){
 servo.attach(6);
 pinMode(trig,OUTPUT);
 pinMode(echo,INPUT);
}
void loop(){
  int dis = 0;
  dis = calculateDistance();
  if(dis<30){
    servo.write(180);
  }
  else{
servo.write(0);}}

int calculateDistance(){ 
  digitalWrite(trig, LOW); 
  delayMicroseconds(2);
  digitalWrite(trig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duration = pulseIn(echo, HIGH); 
  distance= duration*0.034/2;
  return distance;
}

في البداية يجب اضافة مكتبة servo لكي يتم التعامل مع موتور السيرفو 
#include <Servo.h>
ومن ثم تعريف بعض المتغيرات متغير بمنفذ trig و منفذ echo الخاصين بحساس الموجات الفوق الصوتية و من ثم  تعريف متغيرات لكي يتم  حساب المسافة داخل هذين المتغيرات 
int trig = 8;
int echo = 7;
long duration =0;
int distance=0;
من ثم انشاء كائن باسم servo داخل مكتبة motor servo
Servo servo;
من ثم تعريف منفذ 6 علي انه منفذ الإشارة الخاص بالموتور 
 servo.attach(6);
ومن ثم تعريف منفذ echo علي انه دخل ومنفذ output علي انه خرج
 pinMode(trig,OUTPUT);
 pinMode(echo,INPUT);
من ثم القيام باستدعاء دالة تقوم بحساب المسافة باعتماد علي قانون السرعة وهو السرعة = المسافة علي الزمن 
وفي نهاية نقوم بعمل بعض المقارنات لو ان المسافة اقل من 30 قم باخراج اشارة للموتور واذا كان اكبر من 30 قم بإيقاف هذه الإِشارة

لتحميل الكود اضغط هنا 

تصميم وبرمجة : بلال  حسان سعدي

ماسح حرارة covid-19 مع شاشة oled

0

بسم الله الرحمن الرحيم 

بعد ان قمنا في احد المشاريع السابقة بتصميم مثل هذه المشاريع للإطلاع عليه اضغط هنا
لكن سنقوم اليوم بتصميم هذا المشروع بإستبدال شاشة lcd بشاشة oled


اولا الأدوات :

Arduino nano
mlx sensor
oled screen

Arduino nano

المتحكم الذي سنستخدمه للقيام بعمليات العرض و قياس درجة الحرارة 

mlx sensor

حساس الحرارة الذي يميزه عن الحساس التقليدي انه يمكنه قياس درجة الحرارة بدون لمسه 

oled screen

شاشة oled التي تتميز عن lcd بحيث انه يمكنها عرض صور اكثر دقة عن شاشة lcd وانها تتميز بصغر حجمها


ثانيا التوصيلات : 



تعتمد حساس mlx و شاشة oled في اتصالهم علي بروتوكول i2c
الذي يتعامل مع sda , sck
ويتم توصيل منافذ الطاقة الي الأردوينو 
الموجب الي منفذ الطاقة 5 فولت ومنفذ السالب الي سالب اردوينو

ثالثا الكود :

في البداية يجب ان تقوم بتحميل المكتبات الأساسية
Adafruit_MLX90614
Adafruit_GFX
Adafruit_SSD1306
يمكن اضافة كل هذه المكتبات من manage library في محرر كود arduino ide

ونتجه الأن الي الكود 


#include <Adafruit_MLX90614.h>  //for infrared thermometer
#include <Adafruit_GFX.h>       // Include core graphics library for the display
#include <Adafruit_SSD1306.h>   // Include Adafruit_SSD1306 library to drive the display
#include <Fonts/FreeMonoBold18pt7b.h>  // Add a custom font

Adafruit_SSD1306 display(128, 64);            //Create display
Adafruit_MLX90614 mlx = Adafruit_MLX90614();  //for infrared thermometer
int temp;  // Create a variable to have something dynamic to show on the display

void setup()
{                
  delay(100);  // This delay is needed to let the display to initialize
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // Initialize display with the I2C address of 0x3C
  display.clearDisplay();  // Clear the buffer
  display.setTextColor(WHITE);  // Set color of the text
  mlx.begin();  //start infrared thermometer
}

void loop()
{
  temp++;  // Increase value for testing
  if(temp > 43)  // If temp is greater than 150
  {
    temp = 0;  // Set temp to 0
  }

  temp = mlx.readObjectTempC(); //comment this line if you want to test

  display.clearDisplay();  // Clear the display so we can refresh

  // Print text:
  display.setFont();
  display.setCursor(45,10);  // (x,y)
  display.println("TEMPERATURE");  // Text or value to print

  // Print temperature
  char string[10];  // Create a character array of 10 characters
  // Convert float to a string:
  dtostrf(temp, 3, 0, string);  // (<variable>,<amount of digits we are going to use>,<amount of decimal digits>,<string name>)
  
  display.setFont(&FreeMonoBold18pt7b);  // Set a custom font
  display.setCursor(20,50);  // (x,y)
  display.println(string);  // Text or value to print
  display.setCursor(90,50);  // (x,y)
  display.println("C");  // Text or value to print
  display.setCursor(77,32);  // (x,y)
  display.println(".");  // Text or value to print
  
  // Draw a filled circle:
  display.fillCircle(18, 55, 7, WHITE);  // Draw filled circle (x,y,radius,color). X and Y are the coordinates for the center point

  // Draw rounded rectangle:
  display.drawRoundRect(16, 3, 5, 49, 2, WHITE);  // Draw rounded rectangle (x,y,width,height,radius,color)
                                                  // It draws from the location to down-right
    // Draw ruler step
  for (int i = 6; i<=45; i=i+3){
    display.drawLine(21, i, 22, i, WHITE);  // Draw line (x0,y0,x1,y1,color)
  }
  
  //Draw temperature
  temp = temp*0.43; //ratio for show
  display.drawLine(18, 46, 18, 46-temp, WHITE);  // Draw line (x0,y0,x1,y1,color)

  display.display();  // Print everything we set previously

}


يحتوي الكود علي تفصيل له بجانب كل امر ولن نتطرق الي شرحه 

لتحميل الكود اضغط هنا

تصميم : بلال حسان سعدي

جهاز قارئ لمخطط القلب باستخدام الأردوينو

0

 بسم الله الرحمن الرحيم 

سنقوم اليوم بتصميم احد المشاريع الشهيرة واول مشروع سنستخدم فيه شاشة oled حيث سنستخدم حساس قراءة نبضات القلب وعرض مخطط على الشاشة oled

اولا الأدوات 

Pulse Sensor
Arduino uno
OLED 128×64 

Pulse Sensor

حساس ذو خرج تماثلي الذي لدية القدرة على قراءة نبضات القلب حيث يتم تثبيته على احد الأصابع ويقوم باخراج اشارة تماثلية على حسب عدد دقات القلب 

Arduino uno

المتحكم الذي سيقوم باستلام البيانات من الحساس وعرضها على الشاشة بصورة مخطط مثل الذي فى الأعلى 


OLED 128×64 

الشاشة التى سنستخدمها فى عرض المخطط الذي تم اخذه من الحساس حيث تتميز هذه الشاشة عن lcd انها يمكنها رسم عليها رسومات عالية الدقه نسبيا حيث تعمتد هذه الشاشة على بروتوكول i2c فى البرمجة الذي يستخدم منافذ sda و scl



ثانيا التوصيلات :


تحتوي شاشة oled على 4 منافذ 
منفذ الطاقة يتم توصيله الى 3.3 فولت الخاصه بالأردوينو 
ومنفذ السالب الى السالب
ثم توصيل منفذ sda الى a4 داخل الأردوينو 
وتوصيل منفذ sck الى a5 داخل الأردوينو 
ويحتو حساس القلب على 3 منافذ منفذ الطاقة ويتم توصيله الى 5 فولت ومنفذ السالب يتم توصيله بالسالب ومنفذ الإشارة يتم توصيله الى منفذ A0

ثالثا الكود :

في البداية يجب اضافة المكتبات التى سنحتاجها 
سنحتاج مكتبة Adafruit_SSD1306


ومكتبة Adafruit_GFX


رابعا شرح الكود : 


#include <Adafruit_SSD1306.h>
#define OLED_Address 0x3C // 0x3C device address of I2C OLED. Few other OLED has 0x3D
Adafruit_SSD1306 oled(128, 64); // create our screen object setting resolution to 128x64
 
int a=0;
int lasta=0;
int lastb=0;
int LastTime=0;
int ThisTime;
bool BPMTiming=false;
bool BeatComplete=false;
int BPM=0;
#define UpperThreshold 560
#define LowerThreshold 530
 
void setup() {
oled.begin(SSD1306_SWITCHCAPVCC, OLED_Address);
oled.clearDisplay();
oled.setTextSize(2);
}
 
void loop()
{
if(a>127)
{
oled.clearDisplay();
a=0;
lasta=a;
}
 
ThisTime=millis();
int value=analogRead(0);
oled.setTextColor(WHITE);
int b=60-(value/16);
oled.writeLine(lasta,lastb,a,b,WHITE);
lastb=b;
lasta=a;
 
if(value>UpperThreshold)
{
if(BeatComplete)
{
BPM=ThisTime-LastTime;
BPM=int(60/(float(BPM)/1000));
BPMTiming=false;
BeatComplete=false;
}
if(BPMTiming==false)
{
LastTime=millis();
BPMTiming=true;
}
}
if((value<LowerThreshold)&(BPMTiming))
BeatComplete=true;
 
oled.writeFillRect(0,50,128,16,BLACK);
oled.setCursor(0,50);
oled.print("BPM:");
oled.print(BPM);
 
oled.display();
a++;
}

فى البداية القيام باضافة المكتبات الخاصه بالحساسات 
ثم القيام بتعريف المتغيرات الأساسية الخاصه بشاشة oled وحساس النبضات ثم تعريف الشاشة وعنوان الشاشة فى بروتوكول i2c 
ثم القيام بعمل شروط بحيث كلما يتم تغير في قراءة الحساس هذا يعنى ان القلب نبض نبضه يتم تغيير الرسمة على الشاشة 

لتحميل الكود اضغط هنا 

تصميم : بلال حسان سعدي