چندین کتابخانه برای سنسور تشخیص فاصله آلتراسونیک HC-SR04 وجود دارد و کتابخانه NewPing نوشته شده توسط Tim Eckel پیشنهاد میشود. کتابخانه NewPing را می توانید با استفاده از روش 3 در پست نصب کتابخانه در IDE Arduino نصب کنید. کدهای نشان داده شده در زیر با دستور # کتابخانه NewPing را در برمیگیرند. توجه داشته باشید که بعد از نام کتابخانه ; وجود ندارد. توابع انتقال صدا و فاصلهیابی با دستور NewPing sonar(trigPin, echoPin, maxdist) مقداردهی اولیه میشوند، این دستور پایههای تریگر، اکو و حداکثر فاصله اندازهگیری مورد انتظار برای اجتناب از نویز را تعریف میکند. فاصله بین نقطه شروع و هدف برابر است با نصف زمان انعکاس ضربدر سرعت صوت (343m/s) و تقسیم بر 104، زمان انعکاس بر حسب میکروثانیه و فاصله برحسب سانتیمتر است.
در زیر دیگر توابع انتقال صدا و فاصلهیابی بیان شده اند:
- ()ping_cm: فاصله بین سونار و نقطه هدف را باز میگرداند، که مقداری صحیح است.
- convert_cm(echotime): مقدار میکروثانیه را به مقدار فاصله برحسب سانتیمتر تبدیل میکند.
- ping_median(number of ob : پس از حذف مقادیر خارج از محدوده زمان انعکاس متوسط را برای تعداد مشاهدهها، حداقل 5 مشاهده، باز میگرداند.
سرعت صوت
سرعت صوت به دمای هوا بستگی دارد و میتواند بصورتm/s (331.3+0.606temp) ، تخمین زده شود، که در آن temp دما برحسب درجه سلیسیوس است. اگر یک سنسور دما به پایه آنالوگ آردوینو A5 متصل شود، سپس سرعت صوت براساس زمان اکو در یک فاصله مشخص تخمین زده میشود. این فاصله در ابتدای کد تعریف میشود.
#include // include NewPing library
int pinTrig = 6; // trigger pin
int pinEcho = 7; // echo pin
int maxdist = 100; // max scan distance (cm)
int echoTime;
float distance = 15; // known distance to scan (cm)
NewPing sonar(pinTrig, pinEcho, maxdist); // associate sonar with
// NewPing library
int tempPin = A5; // temperature sensor on analog pin A5
float speed, temp, predict;
void setup()
{
Serial.begin(9600); // define Serial output baud rate
analogReference(INTERNAL); // set ADC voltage to 1.1V rather than 5V
}
Void loop(){
echoTime = sonar.ping_median(5); // median echo time (μs)
speed = distance*2.0*pow(10,4)/echoTime; // speed of sound (m/s)
Serial.print(echoTime);Serial.print(" microsecs\t"); // print echo time
Serial.print("speed "); // print text "speed"
Serial.print(speed,1); Serial.print("\t"); // print speed to 1DP and tab
temp = (analogRead(tempPin)*110.0)/1023; // read temperature
predict = 331.3 + 0.606 * temp; // calculate speed of sound
Serial.print("predict ");
Serial.print(predict,1);Serial.println(" m/s"); // print prediction to 1DP
Delay(500);
}
با استفاده از دستور sonar.ping_median (تعداد پژواک ها [, max_cm_distance]) پژواک های چندگانه (پیش فرض 5 پینگ) صورت می گیرند و پژواک های خارج از محدوده حذف شده و حد وسط آنها برحسب میکروثانیه محاسبه می شود. با استفاده از آرگومان [max_cm_distance] می توان به صورت اختیاری حداکثر فاصله جدیدی را تعیین کرد.
دستور pow(x,y) متغیر x را به توان y میرساند لذا pow(10,4) برابر با 104 است.
تیم ردرونیک (redronic) مجموعه ای از آموزش ها و پروژه های مرتبط با آردوینو را برای شما علاقمندان به الکترونیک و برنامه نویسی فراهم کرده است. جهت مشاهده این پروژه ها اینجا کلیک کنید