1. 程式人生 > >樹莓派超聲波測距+蜂鳴器(c語言)

樹莓派超聲波測距+蜂鳴器(c語言)

mic 程序 老師 SM tput measure github stop 一個

  前邊我們已經詳細的講解了樹莓派控制超聲波模塊測距(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很有用,但是你要會用。學會合理且優雅的移植代碼是一個程序猿的必修課。

  作者聯系方式:[email protected] 博客中有什麽不懂的問題歡迎來信。

樹莓派超聲波測距+蜂鳴器(c語言)