ماژول های اندازه گیری فاصله التراسونیک ، ماژول هایی هستند که بر پایه ارسال و دریافت امواج صوتی آلتراسونیک کار می کنند . در این ماژول ها یک سیگنال صوتی آلتراسونیک به سمت جسم فرستاده می شود که با اندازه گیری زمان بازتاب آن می توان مقدار فاصله ماژول تا جسم را محاسبه کرد . ماژول های آلتراسونیک مدل های زیادی دارند که به طور کلی شامل دو مدل تک سنسور و دو سنسور می باشند . در مدل های دو سنسور ، یک سنسور به عنوان فرستنده و دیگری به عنوان گیرنده عمل می کند . در مدل های تک سنسور از یک سنسور جهت ارسال و دریافت استفاده می شود . ماژول SRF02 یک ماژوا اندازه گیری فاصله تک سنسور می باشد . این ماژول قادر له اندازه گیری فاصله تا حداکثر 3 متر است . بر خلاف دیگر مدل های آلتراسونیک در این مدل از یک رابط I2C و UART استفاده شده است که کاربر می تواند هر کدان از این ارتباز ها را انتخاب کند . خروجی این ماژول دقیق و کالیبره شده می باشد . به راحتی از طریق یک مبدل USB-TTL می توانید این ماژول را به کامپیوتر متصل کنید .
در تصویر زیر پین های ماژول SR501 نشان داده شده است :
1- VCC پین تغذیه ماژول می باشد
2- SDA پین دیتا در ارتباط I2C و پین RX در ارتباط UART
3- SCL پین پالس ساعت در ارتباط I2C و TX در ارتباط UART
4- Mode جهت تعیین نوع ارتباط می باشد . در حالت زمین ارتباط UART و در حالت یک ارتباط ماژول I2C است .
5- Groundپین زمین ماژول است .
راه اندازی ماژول SRF02 با آردوینو :
برای راه اندازی این مازول باید ابتدا از طریق پین Mode نوع ارتباط مايول را تعیین کنید . در مثال زیر از رابط I2C استفاده شده است .
void SendCmd(unsigned char address,unsigned char cmd) { Serial1.write(address);//set the address of SRF02(factory default is 0) delayMicroseconds(100);//serial data is fixed at 9600,N,8,2,so we need some time to creat the sencond stop bit Serial1.write(cmd);//send the command to SRF02 delayMicroseconds(100);//serial data is fixed at 9600,N,8,2,so we need some time to creat the sencond stop bit } void setup(void) { Serial.begin(9600); Serial1.begin(9600); Serial.println("SRF02 TEST!"); } void loop(void) { unsigned int reading; SendCmd(0x00,0x51);//Real Ranging Mode - Result in centimeters delay(70);//time for SRF02 to measure the range SendCmd(0x00,0x5E);//Get Range, returns two bytes (high byte first) from the most recent ranging. delay(10);//wait for some time,let the Arduino receive 2 bytes data from the TX pin of SRF02 if(Serial1.available()>=2)//if two bytes were received { reading = Serial1.read()<<8;//receive high byte (overwrites previous reading) and shift high byte to be high 8 bits reading |= Serial1.read(); // receive low byte as lower 8 bits Serial.print(reading); // print the reading Serial.println("cm"); } delay(250); // wait a bit since people have to read the output :) }