关于Arduino超声波的接法与应用
简单介绍超声波测距模块
SR04超声波传感器:
是利用超声波特性检测距离的传感器,其带有两个超声波探头,分别用作于发射和接收超声波。范围在3-450cm。
工作原理:
超声波发射器向某一方向发射超声波,在发射的同时开始计时;
超声波在空气中传播,途中遇到障碍物则立即返回,超声波接收器收到反射波则立即停止计时。
声波在空气中传播速度为340m/s,根据计时器记录时间t,即可算出发射点距离障碍物的距离S,
即S=340m/s*t/2,这就是所谓的时间差测距法。
代码:
int trigPin = 8;//发出信号int echoPin = 7;//接收信号float v = 331.5+0.6*20;// 若不考虑温度的影响,声波在空气中传播速度为340m/svoid setup() {Serial.begin(115200);//设置波特率pinMode(trigPin,OUTPUT);//设置输出状态。或者写成:pinMode(8,OUTPUT);pinMode(echoPin,INPUT);//设置输入状态pinMode(6,OUTPUT);//蜂鸣器pin6,输出状态}float distanceM(){digitalWrite(trigPin,LOW);//delayMicroseconds(3);//延时3微秒digitalWrite(trigPin,HIGH);delayMicroseconds(5);digitalWrite(trigPin,LOW);/*float tUS = pulseIn(echoPin,HIGH);float t = tUs / 1000.0 / 1000.0 / 2;float d = t*v;return d*100;*/float d =pulseIn(echoPin,HIGH)/58.00; //检测脉冲宽度,并计算出距离**cm. /*pulseIn()单位为微秒,声速340m/s,单片机的晶振频率约为14MHZ,所以距离cm=340*100/(1000000-14000)*pulseIn()/2,及化简为pulseIn()/[(1000000-14000)*2/(340*100)]等于pulseIn()/58.0.*/return d;}void loop(){while(1){int d = distanceM();Serial.println(d,DEC);//BIN、OCT、HEX、DEC分别代表二、八、十六、十进制~~if(d>10){digitalWrite(6,HIGH);//蜂鸣器delay(200);digitalWrite(6,LOW);}delay(200);}}
米思齐:
(.04.14更新)
全国青少年机器人技术等级考试实操考题:
主题:超声波测距
器件:LED灯模块3个,超声波传感器1个,结构件若干(也可以使用普通电子元件结构面包板搭建)
搭建要求:
1、本项目由LED灯,超声波传感器组成;
2、当障碍物距离超声波传感器大于30厘米时,3盏LED灯均处于熄灭状态;
3、当障碍物逐渐接近超声波传感器时,随着距离的减小,3盏LED灯依次点亮(触发距离值由考生自行决定);
4、当障碍物逐渐远离超声波传感器时,3盏LED灯依次熄灭;
5、将超声波传感器返回的当前距离值,显示在串口监视器上。
电路原理图:
示例代码1:
volatile int Tpin;volatile int Epin;volatile int dISTANCE;float checkdistance_Tpin_Epin() {digitalWrite(Tpin, LOW);delayMicroseconds(2);digitalWrite(Tpin, HIGH);delayMicroseconds(10);digitalWrite(Tpin, LOW);float distance = pulseIn(Epin, HIGH) / 58.00;delay(10);return distance;}void setup(){Tpin = 3;Epin = 2;dISTANCE = 0;pinMode(Tpin, OUTPUT);pinMode(Epin, INPUT);Serial.begin(9600);}void loop(){dISTANCE = checkdistance_Tpin_Epin();Serial.print(dISTANCE);Serial.println("CM");}
示例代码2:
volatile int Tpin;volatile int Epin;volatile int R;volatile int G;volatile int B;volatile int dISTANCE;float checkdistance_Tpin_Epin() {digitalWrite(Tpin, LOW);delayMicroseconds(2);digitalWrite(Tpin, HIGH);delayMicroseconds(10);digitalWrite(Tpin, LOW);float distance = pulseIn(Epin, HIGH) / 58.00;delay(10);return distance;}void setup(){Tpin = 3;Epin = 2;R = 7;G = 8;B = 9;dISTANCE = 0;pinMode(Tpin, OUTPUT);pinMode(Epin, INPUT);Serial.begin(9600);}void loop(){dISTANCE = checkdistance_Tpin_Epin();Serial.print(dISTANCE);Serial.println("CM");delay(10);if (dISTANCE < 30) {pinMode(R, OUTPUT);digitalWrite(R,HIGH);delay(1000);pinMode(G, OUTPUT);digitalWrite(G,HIGH);delay(1000);pinMode(B, OUTPUT);digitalWrite(B,HIGH);}if (dISTANCE > 30) {pinMode(R, OUTPUT);digitalWrite(R,LOW);delay(1000);pinMode(G, OUTPUT);digitalWrite(G,LOW);delay(1000);pinMode(B, OUTPUT);digitalWrite(B,LOW);}}