前邊我們已經詳細的講解了樹莓派控制超聲波模塊測距(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 博客中有什么不懂的問題歡迎來信。