前邊我們已經詳細的講解了樹莓派控制超聲波模塊測距(http://www.cnblogs.com/yuemo/p/8888342.html)和超聲波控制蜂鳴器模塊發聲(http://www.cnblogs.com/yuemo/p/8906111.html)。
今天我們就來看看怎么把兩個模塊全都應用起來,做一個防盜裝置。
先來看一下各個引腳的連接方式(需要七根母對母的杜邦線):
超聲波模塊:
1.Vcc:接5V電源(接1號引腳)
2.Trig:輸出端口(接16號引腳)
3.Echo:輸入端口(接18號端口)
4.Gnd:接地端(接6號端口)
蜂鳴器模塊
1.GND 接地引腳(接樹莓派14號引腳)
2.I/O 輸入輸出引腳(接樹莓派11號引腳——GPIO.0)
3.VCC 接電源引腳(接樹莓派4號引腳)
接下來附上c語言代碼:
#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>
#define Trig 4
#define Echo 5
#define VOICE 0
void ultraInit(void){
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
pinMode(VOICE,OUTPUT);
}
float disMeasure(void){
struct timeval tv1;
/*
struct timeval{
time_t tv_sec;
suseconds_t tv_usec;
}
*/
struct timeval tv2;
long start=0,stop=0;
digitalWrite(VDICE,LOW);
digitalWrite(Trig,LOW);
delayMicroseconds(2);
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
while(!(digitalRead(Echo) == 1));
gettimeofday(&tv1,NULL);
while(!(digitalRead(Echo) == 0));
gettimeofday(&tv2,NULL);
start = tv1.tv_sec * 1000000 + tv1.tv_usec;
stop = tv2.tv_sec * 1000000 + tv2.tv_usec;
return (float)(stop - start) / 1000000*34000 / 2;
}
void doVoice(void){
for(int i=1;i<=6;i++){
digitalWrite(VOICE,HIGH);
delay(500);
digitalWrite(VOICE,LOW);
delay(1000);
}
}
int main(){
float dis;
float olddis=0;
if(wiringPiSetup() == -1){
printf("setup wiringPi failed!");
return 1;
}
ultraInit();
while(1){
dis = disMeasure();
printf("disMeasure = %0.2f cm\n",dis);
if(olddis==0){
olddis=dis;
continue;
}else{
int s=dis-olddis;
if(s<-30||s>30){
doVoice();
}
olddis=dis;
}
delay(1000);
}
return 0;
}
我們這個程序的思想為利用超聲波測距,記錄上一次超聲波測距的距離,和本次超聲波測距的距離比較,如果距離相差在30cm以上,則蜂鳴器報警。思想和編程都相對簡單。
如果大家在閱讀程序的過程中發現有的函數不清楚效果,請移步博客:https://www.cnblogs.com/lulipro/p/5992172.html
本次實驗是在一個新的領域的第一次嘗試,以前從來沒有接觸過基於樹莓派的程序開發。剛開始時遇到了許多的問題:
1.樹莓派系統燒錄錯誤,當時搞了很長時間。
2.實驗器材的選擇,對於我來說選擇強迫症真是一個可怕的東西,買了一大堆沒用的東西回來,包括但不限於3.5寸屏幕、樹莓派引腳擴展板、170孔面包板(太小了)、搖桿模塊、4*4薄膜鍵盤、溫度傳感器、一路繼電器、電風扇。開始之前心很大,想做一些了不起的東西,到最后時間不夠了才反應過來還是從簡單的做起吧
3.公對公、母對母,公對母的杜邦線各40條……根本用不上這么多,QWQ,難受
4.c語言的代碼以及教程是真的難找,好不容易找到一篇介紹wiringPi的博客,頓時如獲至寶,現在市面上的樹莓派教材基本是基於python的,python是一門很好用的語言,但是老師要求使用c語言我也沒有辦法呀
5.github很有用,但是你要會用。學會合理且優雅的移植代碼是一個程序猿的必修課。
作者聯系方式:sjtyuemos@foxmail.com 博客中有什么不懂的問題歡迎來信。
