بسماللهالرحمنالرحیم
در بعضی از مواقع در انجام پروژههای مختلف از قبیل صنعتی و یا آزمایشگاهی ممکن است که نیاز به اندازهگیری مسافت داشته باشید. در این مواقع راهحلی که به ذهن اکثریت مهندسین الکترونیک میرسد استفاده از سنسورها است، که در این پروژه از سری پروژه های آردوینو میخواهیم یکی از همین سنسورها را که سنسور معروف آلتراسونیک SR04 است، را به همراه سختافزار آردوینو راهاندازی کنیم و نحوه عملکرد سنسور آلتراسونیک SR04 را در سریال مانیتور آردوینو مشاهده کنیم.
خب قبل از اینکه وارد بحث شماتیک و کدنویسی شویم نیاز است که به صورت کاملا مختصر، به عملکرد این سنسور بپردازیم (باور کنید دید بهتری رو میده بهتون از من گفتن بود.)
سنسور آلتراسونیک چیست؟
اساس کار حسگرهای فراصوت (آلتراسونیک) مشابه رادار یا ردیاب صوتی، تشخیص ویژگیهای هدف از طریق تحلیل بازتاب امواج رادیویی یا صوتی میباشد. حسگرهای فراصوت امواج صوتی با فرکانس بالا ایجاد میکنند و موج بازتاب شده را دریافت و تحلیل میکنند. این حسگرها با محاسبهٔ زمان بین فرستادن سیگنال و گرفتن بازتاب، فاصلهٔ جسم را محاسبه میکنند. از این فناوری میتوان در اندازهگیری سرعت و جهت باد یا میزان پر بودن یک مخزن استفاده کرد. برای اندازهگیری سرعت و جهت، یک دستگاه از چندین گیرنده استفاده میکند و از روی فاصلهٔ نسبی آنها سرعت را اندازه میگیرد. برای اندازهگیری میزان مایع داخل یک مخزن نیز کافیست فاصله از سطح مایع اندازه گرفته شود. کاربردهای دیگر شامل ردیابهای صوتی(sonar)، بخورها (Humidifier)، فراوانگاری (سونوگرافی فراصوت)، دزدگیرها و آزمایشهای غیر مخرب میشود.
بهطور معمول از فرستنده و گیرندههایی استفاده میشود که با تبدیل انرژی الکتریکی به صوتی امواج صوتی بالاتر از ۲۰ کیلوهرتز ایجاد میکنند و با دریافت بازتاب امواج، صوت را بار دیگر به انرژی الکتریکی تبدیل میکنند تا قابل اندازهگیری و نمایش باشند.
خب پس از اینکه متوجه شدیم تقریبا چه اتفاقی درون این سنسورها از جمله سنسور SR04 میافتد نوبت به راهاندازی این سنسور توسط سختافزار آردوینو میرسد. برای این کار ابتدا پروژه را به دو بخش سختافزار و نرمافزار تقسیم میکنیم.
سختافزاری که برای راهاندازی سنسور آلتراسونیک SR04 نیاز داریم شامل موارد زیر میشود.
سنسور آلتراسونیک SR04
برد آردوینو (نوع برد مهم نیست از هر نوعی که دارید اشکالی نداره)
ترجیحا بردبرد و چند عدد سیم بردبردی
تا اینجا بخش سختافزار پروژه به اتمام رسید.
نرمافزاری که برای این پروژه موردنیاز است فقط نصب نرمافزار آردوینو است. که اگر با عنوان ” دانلود نرمافزار آردوینو ” در گوگل سرچ کنید به راحتی میتوانید این نرمافزار را دانلود و نصب کنید.
پس از فراهم کردن مواردی که گفته شد نوبن به راهاندازی سنسور توسط برد آردوینو میرسد.
شماتیک سنسور آلتراسونیک SR04
پس از اینکه نحوه اتصالات را به درستی انجام دادیم حال نوبت به نوشتن کد موردنظر برای سختافزار مورد نظرمان میرسد.
کدنویسی سنسور SR04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | int trigPin = 9; //Trig - green Jumper int echoPin = 12; //Echo - yellow Jumper long duration, cm, inches; void setup() { //Serial Port begin Serial.begin (9600); //Define inputs and outputs pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { // The sensor is triggered by a HIGH pulse of 10 or more microseconds. // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Read the signal from the sensor: a HIGH pulse whose // duration is the time (in microseconds) from the sending // of the ping to the reception of its echo off of an object. pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH); // convert the time into a distance cm = (duration/2) / 29.1; inches = (duration/2) / 74; Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(250); } |
عملکرد کد به نحوی است که دو پین از آردوینو یکی ورودی و دیگری خروجی تعریف شده است چرا؟ برای اینکه اگر به توضیحاتی که دادیم یکی زمان رفت و یکی زمان برگشت را اندازهگیری میکند و در نهایت میتوان توسط پالسی که ایجاد میکند تشخیص دهد که آیا مانعی وجود دارد یا خیر؟
و در واقع مهمترین کاری که برنامهنویس باید در این پروژه باید انجام دهد محاسبه تبدیلات است. (حالا بگید تئوری کاربرد نداره) که این کار برای دو واحد سانتیمتر و اینچ نوشته شده است. (برای تمرین میتونید تبدیلات واحدهای دیگه رو هم انجام بدید.)
در نهایت هم اگر دقت کنید واحدهای in و cm نمایش داده میشود.
خب حالا وقت تست سختافزار به همراه کدی است که نوشتهایم. اگر تمامی مواردی که گفتیم به درستی صورت گرفته باشد باید به خروجی زیر برسید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 1000in, 2545cm 1001in, 2547cm 1001in, 2547cm 1001in, 2546cm 1001in, 2547cm 1001in, 2546cm 1001in, 2547cm 12in, 31cm 12in, 31cm 7in, 19cm 5in, 15cm 23in, 59cm 7in, 18cm 6in, 15cm 4in, 10cm 1004in, 2554cm 1006in, 2559cm 1006in, 2560cm 1006in, 2559cm 1002in, 2549cm 12in, 31cm 13in, 33cm 1001in, 2546cm 1001in, 2546cm 1000in, 2545cm 1001in, 2545cm 1000in, 2543cm 1000in, 2543cm 1000in, 2543cm |
امیدوارم که این آموزش هم برای شما مفید واقع شده باشد.
سلام با تشکر از ایت خوبتون خاستم بگم که نقشه شماتیک پایه تریگ باید به شماره 11 وصل میشده طبق کد ولی به نه وصل شده
بله درسته – ممنوم برای توجه تون 🙂
اصلاح میکنیم
تشکر
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=2ahUKEwjq-6bw0tXjAhXQwKQKHYzlAGsQFjAAegQIABAC&url=https%3A%2F%2Fcdn.sparkfun.com%2Fdatasheets%2FSensors%2FProximity%2FHCSR04.pdf&usg=AOvVaw1iQg0OJ6MFfs9MrkZYGAB4
سلام دوست عزیز
خواهش میکنم
امیدوارم که همیشه بتونیم نظر شما مخاطبین عزیز رو جلب کنیم.
موفق باشید
ببخشید من کد مربوط به این عملکرد رو میخواستم
در صورت قرار داشتن یک شیء در مقابل سنسور آاتراسونیک hc-SR04 اگر فاصله از عدد مورد نظر کمتر شده یک استپ موتور را چپگرد کند و در غیر اینصورت راستگرد و اگر برابر عدد مورد نظر بود استپ موتور بایستد در ضمن درایو استپ موتور من l298n هستش
در ضمن فاصله ها را هم بر روی ال سی دی که داراری ماژول i2c است نشان دهد
و در نهایت باید بگویم من از خارج از ایران همیشه مطالب مفیدتون رو دنبال میکنم و برای اکثر دوستانم که فارس زبان نیستند هم ترجمه میکنم .
مجددا ممنون
سلام دوست عزیز
ممنون از شما بابت حمایتتون
اگر رشته شما الکترونیک هست به نظرم پله پله خودتون اینها را وصل کنید تا بتونید کاکردش را متوجه بشید و بتونید پروژه خودتون را شخصی سازی کنید
هر جایی هم مشکل بود اینجا بپرسید
سلام
هنگامیکه میخواهم فاصله ها را که از طریق سنسور آلتراسونیک خوانده میشود را بر روی lcdنمایش دهم فقط عدد اول را نشان میدهد
حتی یا عبارت ثابت را هم که در دستور lcd.print قرار میدهم فقط حرف اول آن را نشان میدهد
موقعیت قرار گیری عبارت را هم که تغییر میدهم باز در موقعیت مورد نظر فقط حرف اول را نشان میدهد
مثلا در عبارت salam فقط حرف s را نمایش میدهد