الأربعاء، 14 مارس 2018

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

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

اردوينو اونو
شاشة 128X64 OLED
حساس DHT22 للحرارة والرطوبة
اسلاك التوصيل - لوحة الربط

في هذا المشروع ، سنقوم بعمل ميزان حرارة و مقياس رطوبة OLED من اردوينو. سوف نقرأ درجة الحرارة والرطوبة من مستشعر DHT22 ثم نعرض البيانات على شاشة OLED.





كود اردوينو

#include   
#include "DHT.h"
#define DHTPIN 7 
#define DHTTYPE DHT22 
DHT sensor(DHTPIN, DHTTYPE);

U8GLIB_SH1106_128X64 oled (13, 11, 10, 9, 8);  

void setup() 
{
sensor.begin(); 
oled.firstPage();  
do 
{
oled.setFont(u8g_font_fur14);    //setting the font size
//Printing the data on the OLED   
oled.drawStr(20, 15, "Welcome"); 
oled.drawStr(40, 40, "To");
oled.drawStr(5, 60, "DIYHACKING");  
}  while( oled.nextPage() );
delay(5000);
}

void loop()
{
float h = sensor.readHumidity();   //Reading the humidity value
float t = sensor.readTemperature();   //Reading the temperature value
float fah = sensor.readTemperature(true); //Reading the temperature in Fahrenheit
if (isnan(h) || isnan(t) || isnan(fah)) {  //Checking if we are receiving the values or not
Serial.println("Failed to read from DHT sensor!");
return;
}
float heat_index = sensor.computeHeatIndex(fah, h); //Calculating the heat index in Fahrenheit
float heat_indexC = sensor.convertFtoC(heat_index);    //Calculating the heat index in Celsius

oled.firstPage();  
do 
{
oled.setFont(u8g_font_fub11);    //setting the font size
//Printing the data on the OLED
oled.drawStr(0, 15, "Temp: ");
oled.drawStr(0, 40, "Hum: ");
oled.drawStr(0, 60, "Hi: ");
oled.setPrintPos(72, 15);       //setting the dimensions to print the temperature
oled.print(t, 0);
oled.println("C"); 
oled.setPrintPos(72, 40);  //setting the dimensions to print the humidity
oled.print(h, 0);     
oled.println("%");
oled.setPrintPos(72, 60);  //setting the dimensions to print the heat index
oled.print(heat_indexC, 0);
oled.println("%");
}  
while( oled.nextPage() );
delay(2000);  
}

الجمعة، 9 مارس 2018

صنع قصب الذكي للمعاقين بصريا بواسطة اردوينو

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

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

اردوينو اونو
بطارية 9 فولت
حافظة بطارية
صافرة
اسلاك التوصيل
مفتاح التشغيل
هزاز ( يمكن استخراجه من هاتف قديم)
انبوب ماء مطاطي


بعد استخراج الهزاز يربط على لوح كالاتي

تربط المكونات كالاتي


المحصلة النهائية للدائرة تكون كالاتي


كود الاردوينو


#define trigPin 13 #define echoPin 12 #define motor 7 #define buzzer 6 void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(motor, OUTPUT); pinMode(buzzer,OUTPUT); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2) / 29.1; if (distance < 70) // Checking the distance, you can change the value { digitalWrite(motor,HIGH); // When the the distance below 100cm digitalWrite(buzzer,HIGH); } else { digitalWrite(motor,LOW);// when greater than 100cm digitalWrite(buzzer,LOW); } delay(500); }


الاثنين، 5 مارس 2018

ركن السيارة في المرأب( كراج ) باستخدام اردوينو

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

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



ربط الاجزاء




الربط النهائي


كود البرمجة
int trigPin = PD5; 

int echoPin = PD6; // Sensor Echo pin connected to Arduino pin D6

int redLED = PD2; // Red LED connected to pin D2

int yellowLED = PD3; // Yellow LED connected to pin D3

int greenLED = PD4; // Green LED connected to pin D4

int buzzer = A0; // Buzzer connected to Analogue pin A0

long TempDistance = 0; // A variable to store the temporary distance

int counter = 0; // Counter value to check if the object has stopped moving

void setup() {

Serial.begin(9600);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(redLED, OUTPUT);

pinMode(greenLED, OUTPUT);

pinMode(yellowLED, OUTPUT);

pinMode(buzzer, OUTPUT);

}

void loop() {

long duration, Distance;

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

Distance = (duration/2) / 74; // Distance in Inches

if(counter < 20){ // Do the rest if the car is still moving

if (Distance > 200) { // Nothing in the garrage

turnThemAllOff();

}

if ((Distance > 55) && (Distance <= 200)) { // Turn on Green LED

digitalWrite(greenLED, HIGH);

digitalWrite(yellowLED, LOW);

digitalWrite(redLED, LOW);

noTone(buzzer);

}

if ((Distance > 15) && (Distance <= 55)) { // Turn on Yellow LED

digitalWrite(yellowLED, HIGH);

digitalWrite(redLED, LOW);

digitalWrite(greenLED,LOW);

noTone(buzzer);

}

if (Distance <= 15) { // Turn on Red LED

digitalWrite(redLED, HIGH);

digitalWrite(greenLED,LOW);

digitalWrite(yellowLED, LOW);

noTone(buzzer);

}

if (Distance < 8) { // Item is way to close - start the buzzer

tone(buzzer, 500);

}

}

if ((Distance == TempDistance) || ((Distance+1) == TempDistance) || ((Distance-1) == TempDistance)){

if(counter >= 20){ // Turn off the lights if the object hasn't moved for 20 cycles (no change in distance)

Serial.println("No movement detected, turning off the lights");

turnThemAllOff();

} else {

counter++;

}

} else {

counter = 0; // Reset counter if there is a movement

}

TempDistance = Distance;

Serial.print(Distance);

Serial.println(" inches");

Serial.print("Counter : ");

Serial.println(counter); delay(500); }

// Function to turn the LEDs off

void turnThemAllOff(){

digitalWrite(redLED, LOW);

digitalWrite(greenLED,LOW);

digitalWrite(yellowLED, LOW);

noTone(buzzer);

}

الثلاثاء، 27 فبراير 2018

تسجيل بيانات درجة الحرارة بواسطة اردوينو

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

Arduino Uno

DS3231 Real Time Clock
Mini SD card module
LM35 temperature sensor

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




تربط  DS3231 مع اردوينو  على النحو التالي:

  • GND مع GND الاردوينو
  • VCC ل DS3231 مع 5فولت في الاردوينو 
  • SDA ل DS3231 مع A4 في الاردوينو 
  • SCL مع   A5 في اردوينو
ربط SD مع الاردوينو
CS يربط مع المنفذ 10 على الاردوينو
SCK يربط مع المنفذ 13 على الاردوينو
MOSI يربط مع المنفذ 11 على الاردوينو
MISO يربط مع المنفذ 12 على الاردوينو
VCC يربط مع المنفذ 5V على الاردوينو
GND  يربط مع المنفذ GND على الاردوينو

ربط متحسس الحرارة LM35 مع اردوينو

VCC يربط مع المنفذ 5V على الاردوينو
OUT يربط مع المنفذ A0 على الاردوينو
GND  يربط مع المنفذ GND على الاردوينو


كود الوقت

#include <DS3231.h>

DS3231  rtc(SDA, SCL);




void setup()

{  

  rtc.begin();

   rtc.setDOW(WEDNESDAY);     

  rtc.setTime(12, 0, 0);     

  rtc.setDate(1, 1, 2014);   

}




void loop()

{

}
الكود
#include <SD.h>

#include <SPI.h>

#include <DS3231.h>

File data_file;

DS3231  rtc(SDA, SCL);




const int lm35_pin = A0; 

int temperature;  

int chip_select_pin = 10;     //pin 53 for arduino mega 2560




void setup() {

  Serial.begin(9600);

  rtc.begin();  

  pinMode(lm35_pin, INPUT);

  pinMode(chip_select_pin, OUTPUT);

  if (SD.begin())

  {

    Serial.println("Initialization Successful. Ready to use");

  } else

  {

    Serial.println("Initialization failed. Check your pin connections or change your SD card");

    return;

  }

    

}




void loop() {

  temperature = analogRead(lm35_pin);

  temperature = (temperature*500)/1023;

  data_file = SD.open("test.txt", FILE_WRITE);

  if (data_file) {    

    Serial.print(rtc.getTimeStr());

    data_file.print(rtc.getTimeStr());

    Serial.print(",");

    data_file.print(",");    

    Serial.println(temperature);

    data_file.println(temperature);

    data_file.close();

  }

  

  else {

    Serial.println("error opening your SD card file. Try again");

  }

  delay(3000);

}


الاثنين، 26 فبراير 2018

السيطرة على عمل محرك باستخدام متحسس الحرارة + اردوينو

جعل مروحة  تدور تلقائيا عند درجة حرارة الغرفة تصل إلى درجة معينة.

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

اردوينو اونو 1

شاشة LCD 2*16
متحسس الحرارة والرطوبة DHT22
محرك تيار مستمر
بطارية 9 فولت
مقاومة متغيرة 10K
لوحة الربط

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


أولا وقبل كل شيء تربط  الشاشة الكرستالية مع اردوينو على النحو التالي:
اربط VSS مع الارضي
اربط VDD مع +5V
اربط V0 مع المقاومة المتغيرة ( الرجل الوسطي) الارجل الاخرى للمقاومة المتغيرة (على الجوانب) تربط احداها مع 5V والاخرى مع الارضي
اربط RS مع المنفذ 2 في الاردوينو
اربط R/W مع ارضي
اربط E مع المنفذ 3 في الاردوينو
اربط من D4 الى D7 مع المنافذ 4, 5, 6, 7
اربط المنفذ 15 مع 5V من خلال مقاومة 220ohm
اربط المنفذ 16 مع الارضي

يربط المرحل ( ريلاي) على النحو التالي

VCC مع 5V
IN مع المنفذ 9 في الاردوينو
GND مع الارضي
الطرف الاخر من المرحل يربط مع الموجب في البطارية والنقطة المشتركة للمرحل يربط مع النقطة NC الى السالب
كما ويربط المتحسس كما يلي
المنفذ 1 من المتحسس يربط مع VCC في الاردوينو
المنفذ 2 من المتحسس يربط مع المنفذ 8 في الاردوينو
المنفذ 4 يربط مع الارضي في الاردوينو



الكود
#include "DHT.h" #include "LiquidCrystal.h" LiquidCrystal lcd(7, 8, 9, 10, 11 ,12); #define DHTPIN 6 #define DHTTYPE DHT22 DHT sensor(DHTPIN, DHTTYPE); int relay_pin = 9; void setup() { lcd.begin(16,2); sensor.begin(); pinMode(relay_pin, OUTPUT); digitalWrite(relay_pin, HIGH); } void loop() { lcd.clear(); float t = sensor.readTemperature(); //reading the temperature from the sensor // Checking if the sensor is sending values or not if (isnan(t)) { lcd.print("Failed"); delay(1000); return; } lcd.setCursor(0,0); lcd.print("Temp: "); lcd.print(t); lcd.print(" C"); if (t > 35){ digitalWrite(relay_pin, LOW); lcd.setCursor(0,1); lcd.print("Fan is ON "); delay(10); } else{ digitalWrite(relay_pin, HIGH); lcd.setCursor(0,1); lcd.print("Fan is OFF "); } delay(2000); }

السبت، 7 أكتوبر 2017

مشروع نظام الامن والانذار باستخدام اردوينو

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

المكونات المطلوبة
لوحة Arduino 
 متحسس التراسونيك ultrasonic sensor
شاشة LCD 
4×4 keypad
منبه




ربط الدائرة

كود اردوينو

  1. /*
  2. * Arduino Security and Alarm System
  3. *
  4. * by Dejan Nedelkovski,
  5. * www.HowToMechatronics.com
  6. *
  7. */
  8. #include <LiquidCrystal.h> // includes the LiquidCrystal Library
  9. #include <Keypad.h>
  10. #define buzzer 8
  11. #define trigPin 9
  12. #define echoPin 10
  13. long duration;
  14. int distance, initialDistance, currentDistance, i;
  15. int screenOffMsg =0;
  16. String password="1234";
  17. String tempPassword;
  18. boolean activated = false; // State of the alarm
  19. boolean isActivated;
  20. boolean activateAlarm = false;
  21. boolean alarmActivated = false;
  22. boolean enteredPassword; // State of the entered password to stop the alarm
  23. boolean passChangeMode = false;
  24. boolean passChanged = false;
  25. const byte ROWS = 4; //four rows
  26. const byte COLS = 4; //four columns
  27. char keypressed;
  28. //define the cymbols on the buttons of the keypads
  29. char keyMap[ROWS][COLS] = {
  30. {'1','2','3','A'},
  31. {'4','5','6','B'},
  32. {'7','8','9','C'},
  33. {'*','0','#','D'}
  34. };
  35. byte rowPins[ROWS] = {14, 15, 16, 17}; //Row pinouts of the keypad
  36. byte colPins[COLS] = {18, 19, 20, 21}; //Column pinouts of the keypad
  37. Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
  38. LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)
  39. void setup() {
  40. lcd.begin(16,2);
  41. pinMode(buzzer, OUTPUT); // Set buzzer as an output
  42. pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  43. pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  44. }
  45. void loop() {
  46. if (activateAlarm) {
  47. lcd.clear();
  48. lcd.setCursor(0,0);
  49. lcd.print("Alarm will be");
  50. lcd.setCursor(0,1);
  51. lcd.print("activated in");
  52. int countdown = 9; // 9 seconds count down before activating the alarm
  53. while (countdown != 0) {
  54. lcd.setCursor(13,1);
  55. lcd.print(countdown);
  56. countdown--;
  57. tone(buzzer, 700, 100);
  58. delay(1000);
  59. }
  60. lcd.clear();
  61. lcd.setCursor(0,0);
  62. lcd.print("Alarm Activated!");
  63. initialDistance = getDistance();
  64. activateAlarm = false;
  65. alarmActivated = true;
  66. }
  67. if (alarmActivated == true){
  68. currentDistance = getDistance() + 10;
  69. if ( currentDistance < initialDistance) {
  70. tone(buzzer, 1000); // Send 1KHz sound signal
  71. lcd.clear();
  72. enterPassword();
  73. }
  74. }
  75. if (!alarmActivated) {
  76. if (screenOffMsg == 0 ){
  77. lcd.clear();
  78. lcd.setCursor(0,0);
  79. lcd.print("A - Activate");
  80. lcd.setCursor(0,1);
  81. lcd.print("B - Change Pass");
  82. screenOffMsg = 1;
  83. }
  84. keypressed = myKeypad.getKey();
  85. if (keypressed =='A'){ //If A is pressed, activate the alarm
  86. tone(buzzer, 1000, 200);
  87. activateAlarm = true;
  88. }
  89. else if (keypressed =='B') {
  90. lcd.clear();
  91. int i=1;
  92. tone(buzzer, 2000, 100);
  93. tempPassword = "";
  94. lcd.setCursor(0,0);
  95. lcd.print("Current Password");
  96. lcd.setCursor(0,1);
  97. lcd.print(">");
  98. passChangeMode = true;
  99. passChanged = true;
  100. while(passChanged) {
  101. keypressed = myKeypad.getKey();
  102. if (keypressed != NO_KEY){
  103. if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
  104. keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
  105. keypressed == '8' || keypressed == '9' ) {
  106. tempPassword += keypressed;
  107. lcd.setCursor(i,1);
  108. lcd.print("*");
  109. i++;
  110. tone(buzzer, 2000, 100);
  111. }
  112. }
  113. if (i > 5 || keypressed == '#') {
  114. tempPassword = "";
  115. i=1;
  116. lcd.clear();
  117. lcd.setCursor(0,0);
  118. lcd.print("Current Password");
  119. lcd.setCursor(0,1);
  120. lcd.print(">");
  121. }
  122. if ( keypressed == '*') {
  123. i=1;
  124. tone(buzzer, 2000, 100);
  125. if (password == tempPassword) {
  126. tempPassword="";
  127. lcd.clear();
  128. lcd.setCursor(0,0);
  129. lcd.print("Set New Password");
  130. lcd.setCursor(0,1);
  131. lcd.print(">");
  132. while(passChangeMode) {
  133. keypressed = myKeypad.getKey();
  134. if (keypressed != NO_KEY){
  135. if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
  136. keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
  137. keypressed == '8' || keypressed == '9' ) {
  138. tempPassword += keypressed;
  139. lcd.setCursor(i,1);
  140. lcd.print("*");
  141. i++;
  142. tone(buzzer, 2000, 100);
  143. }
  144. }
  145. if (i > 5 || keypressed == '#') {
  146. tempPassword = "";
  147. i=1;
  148. tone(buzzer, 2000, 100);
  149. lcd.clear();
  150. lcd.setCursor(0,0);
  151. lcd.print("Set New Password");
  152. lcd.setCursor(0,1);
  153. lcd.print(">");
  154. }
  155. if ( keypressed == '*') {
  156. i=1;
  157. tone(buzzer, 2000, 100);
  158. password = tempPassword;
  159. passChangeMode = false;
  160. passChanged = false;
  161. screenOffMsg = 0;
  162. }
  163. }
  164. }
  165. }
  166. }
  167. }
  168. }
  169. }
  170. void enterPassword() {
  171. int k=5;
  172. tempPassword = "";
  173. activated = true;
  174. lcd.clear();
  175. lcd.setCursor(0,0);
  176. lcd.print(" *** ALARM *** ");
  177. lcd.setCursor(0,1);
  178. lcd.print("Pass>");
  179. while(activated) {
  180. keypressed = myKeypad.getKey();
  181. if (keypressed != NO_KEY){
  182. if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
  183. keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
  184. keypressed == '8' || keypressed == '9' ) {
  185. tempPassword += keypressed;
  186. lcd.setCursor(k,1);
  187. lcd.print("*");
  188. k++;
  189. }
  190. }
  191. if (k > 9 || keypressed == '#') {
  192. tempPassword = "";
  193. k=5;
  194. lcd.clear();
  195. lcd.setCursor(0,0);
  196. lcd.print(" *** ALARM *** ");
  197. lcd.setCursor(0,1);
  198. lcd.print("Pass>");
  199. }
  200. if ( keypressed == '*') {
  201. if ( tempPassword == password ) {
  202. activated = false;
  203. alarmActivated = false;
  204. noTone(buzzer);
  205. screenOffMsg = 0;
  206. }
  207. else if (tempPassword != password) {
  208. lcd.setCursor(0,1);
  209. lcd.print("Wrong! Try Again");
  210. delay(2000);
  211. lcd.clear();
  212. lcd.setCursor(0,0);
  213. lcd.print(" *** ALARM *** ");
  214. lcd.setCursor(0,1);
  215. lcd.print("Pass>");
  216. }
  217. }
  218. }
  219. }
  220. // Custom function for the Ultrasonic sensor
  221. long getDistance(){
  222. //int i=10;
  223. //while( i<=10 ) {
  224. // Clears the trigPin
  225. digitalWrite(trigPin, LOW);
  226. delayMicroseconds(2);
  227. // Sets the trigPin on HIGH state for 10 micro seconds
  228. digitalWrite(trigPin, HIGH);
  229. delayMicroseconds(10);
  230. digitalWrite(trigPin, LOW);
  231. // Reads the echoPin, returns the sound wave travel time in microseconds
  232. duration = pulseIn(echoPin, HIGH);
  233. // Calculating the distance
  234. distance = duration*0.034/2;
  235. //sumDistance += distance;
  236. //}
  237. //int averageDistance= sumDistance/10;
  238. return distance;
  239. }