树莓派超声波测距+蜂鸣器(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 ...
随机推荐
- 从PRISM开始学WPF(五)MVVM(一)ViewModel?
从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...
- nyoj 正数性质
整数性质 时间限制:500 ms | 内存限制:65535 KB 难度:1 描述 我们知道,在数学中,对于任意两个正整数a和b,必定存在一对整数s.t使得sa+tb=gcd(a,b). 输 ...
- 通过URL传递PDF名称参数显示PDF
1 <%@ page language="java" import="java.util.*,java.io.*" 2 pageEncoding=&quo ...
- vue中一个dom元素可以绑定多个事件?
其实这个问题有多个解决方法的 这里提出两点 第一种 第二种 现在dom上绑定一个 然后在你的methods中直接调用 如果要传参数 这时候千万别忘记 原创 如需转载注明出处 谢谢
- 解决忽略VScode中Python插件pylint报错的问题
pylint是VScode中python自带的插件,可以帮助代码规范,美观. 但是有些报错是你不想看到的,你可以选择性的忽略. 例如,在re.compile()中,可以添加参数re.S使. 匹配任意字 ...
- Mybatis的原始dao开发方法
在进入主题之前先提一下sqlSession.sqlSession是一个面向用户(程序员)的接口. sqlSession中提供了很多操作数据库的方法,如: selectOne(返回单个对象).selec ...
- 用javascript做别踩白块游戏1
初学Javascript做的一个别踩白块小游戏,代码简陋,如下: <!DOCTYPE html> <html> <head> <!-- 禁用缩放功能 --&g ...
- Docker学习笔记 - Docker的基本概念
一.cs架构 Docker客户端:本地或远程 Docker服务端:守护进程Docker Daemon 二.基本概念 Docker镜像:打包阶段,层叠的只读文件系统,引导->root(ubuntu ...
- 图数据库orientDB(1-1)SQL基本操作
SQL基本操作 1.新增VerTex CREATE VERTEX V SET name="user01",sex="M",age="25"; ...
- python实现 字符串匹配函数
通配符是 shell 命令中的重要功能,? 表示匹配任意 1 个字符,*表示匹配 0 个或多个字符.请使用你熟悉的编程语言实现一个字符串匹配函数,支持 ? 和 * 通配符.如 "a?cd*d ...