سنسور آلتراسونیک، از سری سنسورهای پرمصرف و کاربردی برای تشخیص مانع، استفاده در ساخت مایع ریز، ساخت ربات و تولید موج آلتراسونیک است. از همین رو بسیاری از کاربران اقدام به راه اندازی آن با تمامی میکروکنترلرهای محبوب میکنند. در این آموزش روش راه اندازی و تست آلتراسونیک با رزبری پای پیکو را یاد خواهیم گرفت. در ادامه با مرجع تخصصی رزبری پای به زبان فارسی، دیجی اسپارک همراه باشید.
رزبری پای پیکو
برد رزبری پای پیکو از کوچکترین قطعات برای پشتیبانی از تراشه RP2040 استفاده کرده است از کریستال گرفته تا منبع تغذیه. اکثر پایه های میکروکنترلر RP2040 از چپ و راست به برد و پایه های IO آورده شده و چهار پایه IO از RP2040 برای عملکردهای داخلی استفاده میشود. تکنولوژی ساخت برد رزبری پای پیکو و پایه های GPIO به صورتی است که قابلیت نصب بر روی مکان های دیگر برای اجرا و ساخت پروژه ها را دارد. برای اینکار از ۴۰ ردیف پین هدر استاندارد با فاصله ی ۰٫۱ از یکدیگر قرار گرفته شده است و حتی متناسب با تمامی برد بردهای استاندارد میباشد. پیکو از یک BUCK-BOOST SMPS برای تامین ولتاژ ۳٫۳ ولت برای تعذیه RP2040 و مدار داخلی بهره میبرد. به همین دلیل انعطاف پذیری قابل توجهی برای اعمال ولتاژ وجود دارد و به راحتی میتوانید از تغذیه باتری لیتیومی تک سل و یا باتری ۳ سل AA استفاده کنید.
سنسور آلتراسونیک SRF
سنسور آلتراسونیک SRF Ultrasonic با استفاده از امواج صوتی فاصله شی را اندازه گیری میکند. سنسور آلتراسونیک به واسطه یک مبدل پالس ها را ارسال و دریافت میکند تا اطلاعات مربوط به فاصله یک شی را اندازه گیری کرده و ارسال کند. سنسورهایی که در دسترس ما هستند تنها از یک مبدل جهت ارسال پالس و دریافت اکو Echo استفاده میکنند. با اندازه گیری فاصله زمانی بین دریافت و ارسال پالس آلتراسونیک فاصله تا شی مورد نظر را اندازه گیری میکند. از سنسورهای آلتراسونیک در طراحی ربات ها جهت تشخیص مجاورت با شی، تشخیص سطح مانند سطح آب، تشخیص موقعیت و تشخیص فاصله میتوان استفاده کرد. از سنسورهای آلتراسونیک در طراحی ربات ها جهت تشخیص مجاورت با شی، تشخیص سطح مانند سطح آب، تشخیص موقعیت و تشخیص فاصله میتوان استفاده کرد. جهت اندازه گیری فاصله سنسور، از فرمول خاصی استفاده میکند که سرعت صوت در رفت و برگشت را محاسبه کرده و با تبدیل متر بر ثانیه به واحد میکرو در سانتی متر، فاصله را نمایش میهد:
Distance (in cm) = (elapsed time * sound velocity (340 m/s)) / 100 / 2
ویژگی های SRF04
- ولتاژ کاری :+۵V DC
- جریان : <2mA
- جریان کاری: ۱۵mA
- زاویه دید: <15°
- رنج تشخیص فاصله : ۲cm – ۴۰۰ cm/1″ – ۱۳ft
- رزولوشن : ۰٫۳ cm
- اندازه گیری زاویه: ۳۰ degree
- ورودی پهنای باند پایه تریگر: ۱۰uS
- ابعاد : ۴۵mm x 20mm x 15m
سنسور آلتراسونیک مدل SRF04 از چهار پایه تشکیل شده است.
- پایهی ترنسمیتر پایه ی تریگر ارسال سیگنال میکند.
- زمانیکه سیگنال یک شی را تشخیص داد، منعکس میشود.
- سپس پایه ی ترنسمیتر یعنی پایه ECHO آن را دریافت میکند.
- زمان بین ارسال و دریافت سیگنال به ما این اجازه را میدهد تا فاصله تا شی را محاسبه کنیم.
پایه های آلتراسونیک
- VCC: +5VDC
- Trig : Trigger (INPUT)
- Echo: Echo (OUTPUT)
- GND: GND
کدنویسی و تحلیل پایتون
برای کدنویسی میکروپایتون در قدم اول کتابخانه های Pin و Timer را فراخوانی میکنیم.
from machine import Pin, Timer import utime
در قدم بعدی یک تایمر تنظیم می کنیم تا بتوانیم تابعی را که به طور منظم در یک بازه زمانی فراخوانی می شود ، استفاده کنیم.
timer = Timer()
در قدم بعدی پایه ی تریگر ترنسمیتر که برای ارسال سیگنال استفاده میشود را به عنوان خروجی در برنامه تعریف میکنیم.
trigger = Pin(14, Pin.OUT)
سپس پایه ی ترنسمیتر یعنی پایه ECHO سیگنال را دریافت کرده و بع عنوان ورودی در برنامه تعریف میشود.
echo = Pin(15, Pin.IN)
همچنین از یک ال ای دی برای خروجی جهت اجرای دستورات شرطی به صورت خروجی در برنامه تعریف میکنیم.
led = Pin(16, Pin.OUT)
سپس یک فانکشن برای دریافت فاصله از سنسور آلتراسونیک مینویسیم که با Timer رابطه ی مستقیمی دارد.
distance = 0 def get_distance(timer): global distance
سپس پایه ی تریگر High شده و برای مدت چند ثانیه صبر میکنیم.
trigger.high() utime.sleep(0.00001)
سپس پایه echo LOW شده و تا زمانیکه سیگنال اکو توسط پایه ECHO تشخیص داده شود، صبر میکند.
trigger.low()
در این بخش از دو تابع حلقه برای اندازه گیری مدت زمان ECHO استفاده میکنیم. برای اندازه گیری دقیق پارامتر از تابع utime.ticks_us() استفاده میکنیم.
تابع utime یک فانکشن برای دریافت زمان و تاریخ دقیق و اینتروال و برای تاخیرها برای ما در برنامه فراهم میکند.
while echo.value() == 0: start = utime.ticks_us() while echo.value() == 1: stop = utime.ticks_us()
تفاوت بین زمان شروع و زمان پایان پایه echo، مدت زمان پالس اکو را برای ما محاسبه میکند. باتوجه به اینکه سنسور آلتراسونیک از صدا استفاده می کند می توانیم با آگاهی از سرعت صدا در هوا ، فاصله بین مانع و سنسور را محاسبه کنیم.
duration = stop - start distance = (duration * 0.0343 ) /2 print("Distance:",distance,"cm") return distance
اکنون تایمر را مقدار دهی اولیه می کنیم و فرمان هر یک ثانیه اجرا شدن را به آن میدهیم.
timer.init(freq=1, mode=Timer.PERIODIC, callback=get_distance)
حال اگر بخواهیم دستورات شرطی به برنامه اضافه کنیم، به عنوان مثال اگر فاصله تشخیص شی کمتر یا بیشتر از ۱۰ سانتی متر باشد، یک خروجی برای ما فعال شود، از تابع if else استفاده میکنیم.
یک متغیر برای وضعیت تابع ال ای دی مشخص میکنیم، اگر led.value مقدار یک باشد، فعال و اگر led.value صفر باشد، غیرفعال است.
while True: if distance < 10: led.value(1) else: led.value(0)
کد کامل برنامه پایتون
from machine import Pin, Timer import utime timer = Timer() trigger = Pin(14, Pin.OUT) echo = Pin(15, Pin.IN) led = Pin(16, Pin.OUT) distance = 0 def get_distance(timer): global distance trigger.high() utime.sleep(0.00001) trigger.low() while echo.value() == 0: start = utime.ticks_us() while echo.value() == 1: stop = utime.ticks_us() duration = stop - start distance = (duration * 0.0343 ) /2 print("Distance:",distance,"cm") return distance timer.init(freq=1, mode=Timer.PERIODIC, callback=get_distance) while True: if distance < 10: led.value(1) else: led.value(0)
تصویر برنامه در Thonny به صورت زیر است.
برای اجرای برنامه ی نوشته شده آن را در ابتدا ذخیره کنید. دو روش برای ذخیره وجود دارد.
- ذخیره بر روی سیستم مورد استفاده
- ذخیره بر روی رزبری پای پیکو Raspberry Pi Pico
سپس F5 را زده یا بر روی Run Current Script کلیک کنید. برنامه اجرا شده و در shell فاصله ی اندازه گیری شده نمایش داده میشود.
اتصال آلتراسونیک به رزبری پای پیکو
برای اتصال سنسور آلتراسونیک به رزبری پای پیکو فقط به چهار پایه نیاز داریم.
- VCC
- GND
- TRIGGER
- ECHO
پایه های رزبری پای پیکو به صورت زیر است که ما فقط به پایه های GP و ۳٫۳OUT و GND نیاز داریم.
- پایه TRIGGER به پایه GP14 متصل شده است.
- پایه ECHO به پایه GP15 متصل شده است.
- پایه VCC به پایه ۳V3OUT متصل شده است.
- پایه GND به پایه GND متصل شده است.
وسایل مورد نیاز
رزبری پای پیکو RASPBERRY PI PICO
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.
سلام ممنون که این اموزش ها رو میگذارین..واقعا تنظیم کردن این اموزش ها زحمت زیادی داره و وقت زیادی ازادم میگیره…فک کنم کاربا اردینوRP2040 راحت تراز رزبری بیکو باشه من با لایبری هاش مشکل دارم شما از کجا دانلود کردید
با سلام
سپاس از همراهی شما کاربر گرامی
هر دو جذابیت و تجربه های خاص خودشان را دارند که میتوانید ایده های متفاوتی را اجرا کنید. چه کتابخانه ای مد نظرتان است؟
Pin, Timer
با سلام
سوال خود را مطرح کنید تا راهنمایی شود.
سلام امیدوارم خوب باشید
لینک دانلود کتابخانه Pin وTimer میخواستم
سپاس
با سلام
هر دو جز کتابخانه های پیشفرض هستند و نیازی به دانلود نیست.
با سلام
نمونه کدهایی در اینترنت دیدم کمتر از تابع def استفاده شده آیا دلیلی برای استفاده شما وجود دارد
با سلام
نوشتن تابع در برنامه کد را منسجم و یکپارچه تر خواهد کرد.
خوبیش اینه همون تکنیک آردوینو رو میشه اینجا هم پیاده کرد و سرعت یادگیری بیشتر میشه
با سلام
کاربر گرامی سپاس از همراهی شما
از اینکه تجربه خود را با دیگر کاربران به اشتراک میگذارید، صمیمانه سپاسگزاریم.