در این پروژه فاصله سنج که وابسته به سایت ic2cloud هست شما با استفاده از سنسور آلتراسونیک DS18B20 قادر به سنجش فاصله هستید . در مطالب قبلی درمورد نحوه کار با این سایت ( + و +) اشاره کردیم .سخت افزار استفاده شده در این پروژه عبارت است از Arduino Uno و Arduino Ethernet Shield و سنسور Ultrasonic DS18B20
همونطور که میدونید هر سنسور آلتراسونیک دارای یه فرستنده و یک گیرنده التراسونیک میباشد و زمانی که امواج آلتراسونیک توسط فرستنده موقع برخورد به جسم و مانع به سمت گیرنده که در کنار فرستنده قرار دارد برگشت داده میشه و با محاسبه زمان رفت و برگشت این موج بر اساس سرعت صوت میتوان فاصله تا مانع مورد نظر رو بدست آورد.
![](https://yazdkit.com/wp-content/uploads/2018/09/RangeIoT-01-Components-1024x768.jpg)
همونطور که در عکس بالا مشاهده میکنید ماژول آلتراسونیک در سمت راست عکس قرار گرفته ، البته شما میتونید سنسور آلتراسونیک رو خودتون خریداری کنید ولی استفاده از ماژول مقرون به صرفه تر و ساده تر هست. در ادامه به معرفی مختصر ماژول آلتراسونیک DS18B20 میپردازیم.
![](https://www.ic2cloud.com/documents/10181/11738/Arduino+Ultrasonic+Sensor+HC-SR04+Pinout.png/aa93babe-9934-4cb6-99dd-4e502b5d07b1?t=1425868157000) |
Ultrasonic Sensor |
Pin |
Description |
GND |
Ground |
Echo |
Receive the Echo pulse |
Trig |
Trigger the ultrasonic pulse |
Vcc |
۵V |
|
همونطور که در عکس بالا مشاهده میکنید این ماژول دارای ۴ پایه هست ، که ۲ پایه مربوط به تغذیه و ۲ پایه مربوط به سنسور های آلتراسونیک هست . شما زمانی که میخواهید به کمک آلتراسونیک فاصله تا مانع رو پیدا کنید ابتدا یه پالس به پایه trig ( دومی از سمت چپ ) میدین و پالس التراسونیک ارسال میشه و با تایمر زمان رو محاسبه میکنید و به محض دریافت پالس برگشتی از پایه Echo تایمر رو استپ کرده و زمان رفت و برگشت پالس رو بدست میارین .
حالا طبق سرعت صوت در محیط که در هوای خشک و در دمای ۲۰ درجه سانتیگراد (۶۸ درجه فارنهایت)، سرعت صوت ۳۴۳٫۲ متر بر ثانیه میتونید زمان رفت و برگشت صوت رو بر اساس تایمر بدست بیارین و فاصله پیموده شده توسط صوت را بدست بیارین. البته باید نتیجه نهایی رو تقسیم بر ۲ کنید چون این زمان مربوط به ارسال صوت به مانع و بازگشت آن از مانع به سنسور شماست . البته اگر میخواین دقت فاصله بدست آمده شما در هر دمایی بدون خطا باشه لازمه تا دمای محیط رو به کمک سنسور دما بدست بیارین و در فرمول زیر جایگذاری کنید تا سرعت صوت در دمای محیط فعلی رو بدست بیارین
فرمول سرعت صوت در دماهای مختلف :
V = V0 + 0.6TC
در این فرمول V0 سرعت صوت در دمای صفر درجه که برابر با ۳۳۱٫۲ است و TC برابر است با دمای مورد نظر[۱]
جهت اتصال ماژول آلتراسونیک به برد آردوینو خودتون میتونید از نقشه شماتیک زیر استفاده کنید .
![](https://yazdkit.com/wp-content/uploads/2018/09/RangeIoT-04-Wiring-Diagram.png)
همونطور که میدونید این پروژه بر اساس برد آردوینو برنامه نویسی شده است و برنامه لازم جهت راه اندازی این برد در ادامه آورده شده است و لازمه مقادیر مربوط به device id و auth رو طبق مطلب قبلی (+) در برنامه جایگذاری کنید.
#include <SPI.h>
#include <Ethernet.h>
#define echoPin ۸ // Echo Pin
#define triggerPin ۹ // Trigger Pin
// Network settings
byte mac[] = { 0xDE, 0xED, 0xDD, 0xDD, 0xFE, 0xED };
EthernetClient eth;
char server[] = "www.ic2pro.com"; // Wiring Cloud host name
int port = 80;
String devId = "111-222-333"; // Device ID. CREATE YOUR OWN GUID; Use this http://www.guidgenerator.com/
String auth = "dXNlcjpwYXNzd29yZA=="; // Authentication credentials Create a string from <email_address>:<API_Password> and encode it base64
// The sample here "dXNlcjpwYXNzd29yZA==" is the encoding for "user:password"
void setup() {
// start serial monitoring
Serial.begin(115200);
// set-up pins
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
// start network communication
Ethernet.begin(mac);
delay(1000);
Serial.println("Start...");
}
void loop() {
long duration, distance;
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
duration = pulseIn(echoPin, HIGH);
// Calculate the distance (in cm) based on the speed of sound.
// distance = duration * speed of sound / 2
// We divided by two because the sound travels to destination and
// comes back which is twice the distance we measure
distance = duration * ۰.۰۳۴ / ۲;
if(distance > 0 && distance < 1000)
sendRange(String(distance));
delay(1000);
}
void sendRange(String range) {
Serial.println(range);
if (eth.connect(server, port)) { // connect to server
eth.println("GET http://" + String(server) + ":" + String(port) + "/Wire/connector/set?id=" + devId + "&RANGE=" + range + " HTTP/1.1"); // send range to server
eth.println("Authorization: Basic " + auth);
eth.println("Connection: close");
eth.println();
eth.stop();
}
else {
Serial.println("Connection Error");
}
}
|
درصورتی که نیاز به اطلاعات بیشتر داشتید میتونید به پست اصلی این مطلب در سایت اصلی ic2cloud مراجعه کنید و در آخر فایل مربوط به نسخه موبایل و برنامه آردوینو جهت دانلود برای شما قرار داده شده است.
Download “Range-Finder-IoT.zip”Range-Finder-IoT.zip – 0 بار دانلود شده است – 68 KB