树莓派超声波测距+蜂鸣器(c语言)
前边我们已经详细的讲解了树莓派控制超声波模块测距(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 博客中有什么不懂的问题欢迎来信。
树莓派超声波测距+蜂鸣器(c语言)的更多相关文章
- 如何编写51单片机超声波测距SR04_lcd1602显示程序
超声波测距在我们日常生活中很常见,比如说车在倒退的时候,为了防止车撞到障碍物,会在车尾加上一个超声波测距模块.在智能车比赛中,也有超声波测距模块等等.可见超声波非常的重要,接下来,我们上代码研究一下如 ...
- 传感器之超声波测距HC-SR04
一.前言 HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm:模块包括超声波发射器.接收器与控制电路.像智能小车的测距以及转向,或是一些项目中,常常会用 ...
- [自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇·基于C#上位机软件开发
前言 上一节我们已经基本上把超声波硬件的发射和接收模块全部做好了,接下来我们着手开发一个软硬结合的基于C#的平面定位软件! 目录 一.整体思路 二.效果提前展示 2-1.软件部分展示 2-2.硬件部分 ...
- [自娱自乐] 3、超声波测距模块DIY笔记(三)
前言 上一节我们已经研究了超声波接收模块并自己设计了一个超声波接收模块,在此基础上又尝试用单片机加反相器构成生成40KHz的超声波发射电路,可是发现采用这种设计的发射电路存在严重的发射功率太低问题,对 ...
- [自娱自乐] 2、超声波测距模块DIY笔记(二)
前言 上一节我们已经大致浏览下目前销售的超声波测距模块同时设计了自己的分析电路,这次由于我买的电子元件都到了,所以就动手实验了下!至写该笔记时已经设计出超声波接收模块和超声波发射模块,同时存在超声波发 ...
- STM32(HY-SRF05)超声波测距项目
参考资料: https://www.cnblogs.com/qsyll0916/p/6964638.html http://blog.csdn.net/zhangdaxia2/article/deta ...
- 基于FPGA的超声波测距(一)
硬件平台:CycloneII EP2C5Q208C8+DYP-ME007 1:超声波原理 DYP-ME007超声波测距模块可提供3cm--3.5m的非接触式距离感测功能,图1为DYP-ME007外观, ...
- Arduino的光敏传感器和超声波测距传感器测试代码
光敏传感器测试代码 使用的是一个未知名4pin模块, 4pin依次为Vcc, Gnd, DO, AO, 板载一个可调电阻以及一个LED, 调节电阻大小, 可以控制LED亮灭和DO输出变化对光亮的灵敏度 ...
- 玩转X-CTR100 l STM32F4 l HC-SR04超声波测距
我造轮子,你造车,创客一起造起来!更多塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 超声波测距模块HC-SR04可以测量2cm~40 ...
随机推荐
- maven创建web工程
使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 ...
- html{font-size:62.5%}
为什么要使用html,body{font-size:62.5%}? 使用以下代码查看浏览器的初始font-size: <!DOCTYPE html><html><head ...
- python之路--day15---软件开发目录规范
软件开发目录规范 bin--启动文件 conf--配置文件 core--核心代码 db--数据文件 lib--常用功能代码 log--日志文件 readme--软件介绍
- JAVA_SE基础——18.方法的递归
方法的递归是指在一个方法的内部调用自身的过程,递归必须要有结束条件,不然就会陷入无限递归的状态,永远无法结束调用,接下来用一个最简单的例子来体现下方法递归,使用递归算法计算自然数之和: public ...
- dede观看总结自己总结
知识点一:{dede:arclist channelid="18" addfields="language,pfz" limit="0,5" ...
- tensorflow安装篇
安装虚拟机redhat7u4-64 镜像文件在http://www.linuxfly.org/post/659 更换yum 参考https://blog.csdn.net/xiaoyiaoyou/ar ...
- python入门:python包管理工具pip的安装
pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. distribute是setuptools的取代(Setuptools包后期不再维护了),pip是e ...
- python--Selectors模块/队列
Selectors模块/队列 一 Selectors模块 IO多路复用实现机制 Win: select Linux:select(效率低) poll epoll(最好)默认选择epoll sele ...
- JavaEE EL & JSTL 学习笔记
1. EL表达式(特别重要)
- 原来你是这样的Promise
1. Promise简介 promise是异步编程的一种解决方案,它出现的初衷是为了解决回调地狱的问题. 打个比方,我需要: --(延迟1s)--> 输出1 --(延迟2s)--> 输出2 ...