الجمعة، 11 سبتمبر 2020

مكتشف المسافة بالموجات فوق الصوتية في الزمن الحقيقي

 في هذا المشروع ، سنقوم بعمل مكتشف عن بعد قائم على جهاز استشعار بالموجات فوق الصوتية ، ولكن في الزمن الحقيقي ، أي - كائن قادم أو بعيدًا.

Ultra sonic distance finder with live status


الأشياء المستخدمة في هذا المشروع

جهاز الاستشعار بالموجات فوق الصوتية - HC-SR04 

اردوينو نانو R3


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

من خلال هذا المشروع ، يمكننا معرفة ما إذا كان الجسم يتقدم أو يقترب ، أو أنه في نفس النقطة - إنه لا يتحرك.

في هذا المشروع ، نستخدم فقط 2mainhardware وهي:

يمكن استخدام أي نوع من لوحات Arduino (uno ، nano ، mega ، إلخ) ، ولكن يجب أن يكون لها خرج 5 فولت. لقد استخدمت اردوينو نانو.

جهاز استشعار بالموجات فوق الصوتية (HC-SRO-4)

ملامح المشروع:

This is HC-SR04


This is mother board:  (Arduino nano)


لبدء

1) كيف يعمل جهاز الاستشعار بالموجات فوق الصوتية؟

إنه يعمل عن طريق إرسال موجة صوتية ، موجة استقبال منعكسة بواسطة الكائن. وإذا لم يكن هناك جسم فلن تكون هناك موجة منعكسة.

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

إذا كنت بحاجة إلى قياس المسافة المحددة من المستشعر الخاص بك ، فيمكن حساب ذلك بناءً على هذه الصيغة:

المسافة = ½ T x C

T = الوقت و C = سرعة الصوت)

عند 20 درجة مئوية (68 درجة فهرنهايت) ، تبلغ سرعة الصوت 343 مترًا / ثانية (1125 قدمًا / ثانية) ، لكن هذا يختلف تبعًا لدرجة الحرارة والرطوبة.

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

إنه يعمل عن طريق إرسال موجة صوتية ، موجة استقبال منعكسة بواسطة الكائن. وإذا لم يكن هناك جسم فلن تكون هناك موجة منعكسة.

connections

استكشاف الأخطاء وإصلاحها

تحقق من منفذ com أثناء التحميل.

تأكد من تحديد لوحة الكتابة.

تأكد من تحديد برنامج Wright bootloader.

// ---------------------------------------------------------------- //
// made by rho sigma electronics
// Arduino Ultrasoninc Sensor HC-SR04
// Using Arduino IDE 1.8.7
// Using HC-SR04 Module
// ---------------------------------------------------------------- //

#define echoPin 2 // attach pin D2 Arduino to pin Echo of HC-SR04
#define trigPin 3 //attach pin D3 Arduino to pin Trig of HC-SR04

// defines variables
long duration; // variable for the duration of sound wave travel
float distance, distance1, diff;//variable forthedistancemeasuremenorother
int i=0;

void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an OUTPUT
pinMode(echoPin, INPUT); // Sets the echoPin as an INPUT
Serial.begin(9600); // // Serial Communication is starting with 9600 of baudrate speed
Serial.println("Ultrasonic Sensor HC-SR04 Test"); // print some text in Serial Monitor
Serial.println("with Arduino");
}
void loop() {
// Clears the trigPin condition
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin HIGH (ACTIVE) for 10 microseconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2; // Speed of sound wave divided by 2 (go and back)
// Displays the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");

if(distance <= 5.0){
Serial.println(" object is near");
}
if(distance >= 100.0){
Serial.println(" object is far");
}
if((distance < 100.0) && (distance >5.0)){
Serial.println(" object is in green zone");
}

if(i != 0)
{
diff=abs(distance-distance1);

if(diff > 0.4) //because sensor has an eorrer of 0.3 cm
{
if(distance < distance1)
Serial.println(" object is coming closer");
else
{
if(distance > distance1)
Serial.println(" object is going farther");
else
Serial.println(" object is not moving");
}
}
else
Serial.println(" object is not moving"); //print object is not moving
}

distance1=distance;
i=i+1;              

delay(1000); // delay 1 second
}




الأحد، 6 سبتمبر 2020

نظام تنبيه لأمن الباب بالاردوينو

 في هذه المقالة ، سوف نتعلم كيفية إنشاء نظام تنبيه نصي SMS باستخدام وحدة Arduino و SIM800L.

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

PCBWay Custom PCB

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

10kمقاومة  

Reed Switch Sensor 

Arduino UNO

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

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

سيتم إرسال هذه الرسالة من خلال وحدة SIM800L GSM. يتم عرض الدائرة في الشكل 1.

circuit_sim800l_arduino.png

الآن ، ستتعلم كيفية إنشاء المشروع خطوة بخطوة.

المشروع خطوة بخطوة

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

عند فتح الباب ، يتحرك المغناطيس بعيدًا عن مستشعر مفتاح القصب وسيفتح. بهذه الطريقة ، سيكتشف النظام أن الباب قد تم فتحه وسيقوم بإرسال رسالة نصية قصيرة عبر SIM800L للمستخدم.

يتم عرض الدائرة في اللوح أدناه.

detected-opened-door.jpg


الكود المصدري للمشروع

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

#include <SoftwareSerial.h>
SoftwareSerial chip(10, 11);

String SeuNumero = "+xxxxxxxxxxxxx";

#define sensor 12

bool ValorAtual = 0, ValorAnterior = 0;

void setup()
{
  Serial.begin(9600);
  Serial.println("Inicializando Sistema...");
  delay(5000);
  chip.begin(9600);
  delay(1000);

  pinMode(sensor, INPUT); //Configura o Pino do Sensor como Entrada
}

void loop()
{
  //Le o valor do pino do sensor
  ValorAtual = digitalRead(sensor);

  if(ValorAtual == 1 && ValorAnterior == 0)
  {
      ClosedDoor();
      ValorAnterior == 1;
  }

  if(ValorAtual == 1 && ValorAnterior == 0)
  {
      OpenedDoor();
      ValorAnterior == 0;
  }

}

void OpenedDoor() //Funcao para enviar mensagem de alerta Umidade Baixa
{
  chip.println("AT+CMGF=1");
  delay(1000);
  chip.println("AT+CMGS=\"" + SeuNumero + "\"\r");
  delay(1000);
  String SMS = "Opened Door!";
  chip.println(SMS);
  delay(100);
  chip.println((char)26);
  delay(1000);
}

void ClosedDoor()//Funcao para enviar mensagem de alerta Umidade Normal
{
  chip.println("AT+CMGF=1");
  delay(1000);
  chip.println("AT+CMGS=\"" + SeuNumero + "\"\r");
  delay(1000);
  String SMS = "Closed Door!";
  chip.println(SMS);
  delay(100);
  chip.println((char)26);
  delay(1000);
}
    

السبت، 29 أغسطس 2020

كيفية بناء ساعة ناطق من اردوينو باستخدام RTC وتحويل النص إلى كلام

 تعلم كيفية إنشاء ساعة قائمة على Arduino باستخدام RTC IC الذي يعبر عن الوقت والتاريخ عند الطلب!

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

باستخدام RTC IC

سنقوم بنشر IC على مدار الساعة في الوقت الحقيقي (RTC) بدلاً من استخدام IC المؤقت 555 العادي. يقوم RTC بتتبع الوقت حتى بدون طاقة. يحتوي على دائرة مدمجة لاستشعار الطاقة والتي تتعقب حالات انقطاع التيار وتتحول تلقائيًا إلى مصدر الطاقة الاحتياطية.

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

سنقوم بواجهة Arduino و RTC لإرسال البيانات إلى هاتف ذكي باستخدام وحدة Bluetooth التي تسمح بنطق البيانات عبر تطبيق تحويل النص إلى كلام.


الأجهزة المطلوبة

اردوينو UNO

وحدة DS1307 RTC

اللوح

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

مزود الطاقة

اضغط الزر

وحدة بلوتوث HC-05

البرامج المطلوبة

اردوينو IDE

تطبيق تحويل النص إلى كلام اردوينو بلوتوث

الوحدة النمطية DS-1307 RTC

DS1307 عبارة عن ساعة في الوقت الحقيقي (RTC) بها ثمانية دبابيس وتستخدم واجهة I2C. إنها ساعة منخفضة الطاقة مع 56 بايت من البطارية الاحتياطية SRAM. توفر الساعة بيانات مؤهلة للثواني والدقائق والساعات واليوم والشهر والسنة. يتم تعديل تاريخ انتهاء كل شهر تلقائيًا ، بما في ذلك الأشهر التي تقل عن 31 يومًا.

Speaking_Clock_RW_MP_image8.jpg


الربط بين RTC و Arduino

RTClib هي مكتبة خفيفة الوزن تستخدم لتحديد تاريخ ووقت Arduino ويمكن تنزيلها من هنـــــــــــــــــا 

يتتبع RTC IC الوقت الحقيقي الحالي الذي يمكن استخدامه لبرمجة الإجراءات في وقت معين. يستخدم المذبذب البلوري في معظم الدوائر المتكاملة RTC بتردد 32.768 كيلوهرتز (نفس التردد المستخدم في ساعات الكوارتز والساعات). هذا التردد يساوي 2 ^ 15 دورة في الثانية.

وحدة بلوتوث HC-05

وحدة Bluetooth HC-05 هي مكون سهل الاستخدام يستخدم بروتوكول المنفذ التسلسلي (SSP). إنه مصمم لإنشاء اتصالات تسلسلية لاسلكية شفافة.

Speaking_Clock_RW_MP_image7.png

هذه الوحدة هي Bluetooth V2 + EDR (معدل بيانات محسّن) ، ولها تعديل 3 ميغابت في الثانية إلى جانب جهاز إرسال واستقبال لاسلكي 2.4 جيجا هرتز ونطاق أساسي. يستخدم جهاز Bluetooth ذو رقاقة أحادية خارجية من bluecore يعتمد على تقنية CMOS ويستخدم ميزة قفز التردد التكيفي (AFH). حجمها صغير مثل 12.7 مم × 27 مم.


ربط HC-05 مع Arduino باستخدام SerialSoftware.h

تم تطوير مكتبة SoftwareSerial لتمكين الاتصال التسلسلي على المسامير (الرقمية الأخرى) في Arduino باستخدام البرنامج لإعادة إنتاج وظائف المنفذ التسلسلي ، ومن هنا جاء اسمه "SoftwareSerial". من الممكن أيضًا أن يكون لديك أكثر من منفذ تسلسلي للبرنامج بسرعات تصل إلى 115200 بت في الثانية.

إعداد تطبيق Arduino Bluetooth لتحويل النص إلى كلام

يتلقى تطبيق الهاتف الذكي هذا رسائل نصية عبر البلوتوث من جهاز Bluetooth مقترن ، أي لوحة Arduino مع وحدة HC-05. ثم يقوم بتحويل النص المستلم إلى كلام.

Speaking_Clock_RW_MP_image10.png


Speaking_Clock_RW_MP_image4.png

تكوين زر الضغط

يتم توصيل زر الضغط عبر المقاوم 10 كيلو أوم ، المعروف باسم المقاوم المنسدل ، من الأرض إلى دبوس التبديل المتصل بـ Arduino. يقوم بتوصيل الدبوس بالأرض عندما يكون المفتاح مفتوحًا ، لذلك يقرأ LOW عندما لا يكون هناك جهد قادم من خلال المفتاح.


عند الضغط على الزر الانضغاطي ، يتم ضبط حالة الزر على HIGH ويتم تكوين إشارة الصوت عبر Bluetooth. بمجرد تحرير الزر ، تنتقل حالة الزر إلى LOW وتنقطع الدائرة.

فيما يلي مخطط الدائرة الذي يوضح وضع الزر الانضغاطي والمقاوم 10 كيلو أوم.

تكوين زر الضغط

يتم توصيل الزر الانضغاطي عبر المقاوم 10 كيلو أوم ، والمعروف باسم المقاوم المنسدل ، من الأرض إلى دبوس التبديل المتصل بـ Arduino. يقوم بتوصيل الدبوس بالأرض عندما يكون المفتاح مفتوحًا ، لذلك يقرأ LOW عندما لا يكون هناك جهد قادم من خلال المفتاح.

عند الغط على الزر الانضغاطي ، يتم ضبط حالة الزر على HIGH ويتم تكوين إشارة الصوت عبر Bluetooth. بمجرد تحرير الزر ، تنتقل حالة الزر إلى LOW وتنقطع الدائرة.

فيما يلي مخطط الدائرة الذي يوضح وضع الزر الانضغاطي والمقاوم 10 كيلو أوم.

Speaking_Clock_RW_MP_image1.png

تجميع الأجهزة

دعنا نربط المكونات الفردية والوحدات الموضحة أعلاه بـ Arduino UNO كما هو موضح في المخطط   التالي.

Speaking_Clock_RW_MP_image9.jpg


Speaking_Clock_RW_MP_image5.jpg


واجهة تحويل النص إلى كلام من Arduino Bluetooth

قم بتحميل كود Arduino من أسفل هذه المقالة. بمجرد التحميل ، افتح إعداد Bluetooth بهاتفك وابحث عن أجهزة Bluetooth. في قائمة أجهزة Bluetooth المتاحة ، قم بإقران هاتفك باسم الجهاز HC-05 باستخدام رمز المرور 1234 أو 0000. ثم افتح تطبيق تحويل النص إلى كلام Arduino Bluetooth. ستظهر لك قائمة الأجهزة المقترنة. حدد HC-05 كما هو موضح في الصور أدناه.

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

Speaking_Clock_RW_MP_image6.png


Speaking_Clock_RW_MP_image11.png


كود المشروع الكامل


#include <Wire.h>
#include <SoftwareSerial.h>
#include "RTClib.h"

//bluetooth variable
SoftwareSerial BT(10,11);

RTC_DS1307 rtc;

//pushbutton declaration
int buttonPin = 7;
int buttonState = 0;
boolean on=false;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
char monthsOfTheYear[13][12] = {"m","January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
void setup () 
{
 while (!Serial); // for Leonardo/Micro/Zero
 Serial.begin(9600);
 Wire.begin();
 rtc.begin();
 BT.begin(9600);
 if (! rtc.begin()) 
 {
   Serial.println("Couldn't find RTC");
   while (1);
 }
 if (! rtc.isrunning()) 
 {
   Serial.println("RTC is NOT running!");
 }
// This line sets the RTC with an explicit date & time, for example to set
// rtc.adjust(DateTime(2020, 1, 21, 19, 47, 36));
 pinMode(buttonPin, INPUT);

 //testing serial monitor
 Serial.print("Date: ");
 Serial.print(__DATE__);
 Serial.print('\n');
 Serial.print("Time: ");
 Serial.print(__TIME__);

}
void loop () {

  buttonState = digitalRead(buttonPin);
  DateTime now = rtc.now();
  if(buttonState == HIGH)
  {
    //Serial.print('test');
      on=true;
      if(on == true)
      {
         digitalWrite(buttonPin, HIGH);
         delay(4000);
         BT.println("Today is");
         delay(3000);
         BT.println(monthsOfTheYear[now.month()]);
         delay(1000);
         BT.println(now.day());
         delay(1000);
         BT.println(now.year());
         delay(3000);
         BT.println("Time in 24 hour clock is");
         delay(3000);
         BT.println(now.hour());
         delay(1000);
         BT.println("hours");
         delay(3000);
         BT.println(now.minute());
         delay(1000);
         BT.println("minutes");
         delay(3000);
         BT.println(now.second());
         delay(1000);
         BT.println("seconds");
        
      }
  }
  else if (buttonState == LOW)
  {
    digitalWrite(buttonPin, LOW);
  }
delay(800);