树莓派之超声波报警器

2024-03-06 21:50
文章标签 超声波 树莓 报警器

本文主要是介绍树莓派之超声波报警器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.模块:超声波(HC-SR04)、蜂鸣器

在这里插入图片描述
HC-SR04 模块可以测量 3cm - 4m 的距离,精确度可以达到 3mm。它包含了超声波发射器、接收器和控制电路三部分。

2.接线方式

一共两个电源引脚和两个控制引脚。
Vcc 接 5V ,Gnd 接0 V ,但不推荐用独立电源给它供电,应使用树莓派或单片机的 GPIO 口输出 5v 和 Gnd 给它供电。不然会影响这个模块的运行。
Trig 引脚用来接收树莓派的控制信号。接任意 GPIO 口。
Echo 引脚用来向树莓派返回测距信息。接任意 GPIO 口。
(注意 Echo 返回的是 5v信号,而树莓派的 GPIO 接收超过 3.3v 的信号可能会被烧毁,因此需要加一个分压电路,博主没有加,直接用杜邦线连的)。
蜂鸣器: VCC 接3.3V ,Gnd接0V I,O接GPIO.0口

3.工作原理

(1)树莓派向 Trig 脚发送一个 10us 的脉冲信号。
(2) HC-SR04 接收到信号,开始发送超声波,并把 Echo置为高电平,然后准备接收返回的超声波。
(3) HC-SR04 接收到返回的超声波,把 Echo 置为低电平。
(4)Echo 高电平持续的时间就是超声波从发射到返回的时间间隔。
(5)计算距离:
距离(单位:m) = (start - end) * 声波速度 / 2
声波速度取 343m/s 。
然后再把测得的距离转换为 cm。
距离(单位:cm) = (start - end) * 声波速度 / 2 * 100
= (start - end) * 17150

4.代码

#include <wiringPi.h>
#include <stdio.h>
#include <sys/time.h>
#define Trig 4
#define Echo 5
#define VOICE 0void ultraInit(void){            // 超声波相关设置引脚pinMode(Echo,INPUT);    //  设置Echo  为输入引脚pinMode(Trig,OUTPUT);  //   设置Trig  为输出引脚pinMode(VOICE,OUTPUT);//    设置VOICE 为输出引脚
}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(VOICE,HIGH); // 初始化引脚digitalWrite(Trig,LOW);delayMicroseconds(2);digitalWrite(Trig,HIGH);delayMicroseconds(10);   // 发出超声波脉冲 digitalWrite(Trig,LOW);while(!(digitalRead(Echo) == 1)); //Trig接受到树莓派发送的10us的脉冲信号,开始发送超声波,并将Echo拉至高电平,while不再等待,开始执行下一条语句 gettimeofday(&tv1,NULL); // 获取当前时间,波开始发送的时刻while(!(digitalRead(Echo) == 0)); //while等待中,当Echo收到超声波返回信号时,Echo被拉至低电平,//当 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;if(wiringPiSetup() == -1){printf("setup wiringPi failed!");return -1;}ultraInit();//超声波相关初始化while(1){dis = disMeasure();printf("测得距离 = %0.2f cm\n",dis);if(dis < 10){printf("有物体靠近 警报响起\n");doVoice();}else{printf("一切正常\n");}delay(1000);}return 0;
}

实验结果

在这里插入图片描述

这篇关于树莓派之超声波报警器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/781473

相关文章

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

超声波清洗机哪个品牌比较好一点的?清洁力强的超声波清洗机品牌

随着生活水平的不断提升和幸福感的增强,珠宝、饰品和眼镜等物品已成为许多家庭的常备之物。然而,这些贵重细小的物件易于积聚微尘与隐形细菌,长此以往可能悄悄影响家人的健康,毕竟细菌是肉眼难以察觉的隐患。超声波清洗机应运而生,它以高科技手段有效地解决了这一隐忧,深层清洁,守护家人免受微小污染物的潜在威胁。不过现在市面上超声波清洗机品牌挺多的,究竟有哪些品牌的超声波清洗机比较好一点呢?接下来就为大家带来四款

1-8 图像腐蚀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernel=np.ones((2,2),np.uint8) _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) eroded_image=cv2.erode(binary_image,kernel,iterations=1) eroded_image2=cv2.ero

逗比学树莓派之lcd1602显示

通过树莓派GPIO连接LCD1602,使用wiringPi库和其附带的LCD库进行显示树莓派的CPU温度和内存使用情况。 1.首先按下图连接好硬件电路图: 2.然后在终端使用命令 sudo apt-get install git 安装版本管理软件Git 。

树莓派wiringPi常用的函数介绍

 1.void pinMode (int pin, int mode) ; 这个函数式设置pin脚的输入和输出模式以及PWM的输入和输出模式。在wiringPi中只有 pin 1 (BCM_GPIO 18)是支持PWM的输出的。 2.void digitalWrite (int pin, int value) ; 这个函数式用来设置pin脚的高低电平的,当我们写HIGH or LO

RasberryPi 3B树莓派基本配置

RaspberryPi 3B树莓派基本配置 文章目录 RaspberryPi 3B树莓派基本配置一、准备工作1.1 硬件准备:1.1.1 树莓派和电源适配器:1.1.2 USB转TTL模块:1.1.3 读卡器和TF卡: 1.2 软件准备:1.2.1 下载 Raspberry Pi OS:1.2.2 SD Card Formatter:1.2.3 下载系统镜像刻录软件:1.2.4 MobaX

树莓派使用WiringPi库配合时间函数实现超声波测距

树莓派使用WiringPi库配合时间函数实现超声波测距 文章目录 树莓派使用WiringPi库配合时间函数实现超声波测距一、HR-04超声波模块原理1.1 超声波测距原理:1.2 超声波时序图: 二、树莓派与超声波模块硬件连接三、时间函数3.1 时间函数gettimeofday()原型和头文件: 四、实现超声波测距4.1 使用wiringOP库和时间函数实现超声波测距: 五、实现超声波测距

1-9 图像膨胀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernel = np.ones((3, 3), np.uint8) _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) dilated_image = cv2.dilate(binary_image, kernel, iterations=1) 三、运行现象 四

树莓派使用WiringPi库驱动继电器

树莓派使用WiringPi库驱动继电器 文章目录 树莓派使用WiringPi库驱动继电器一、继电器概念二、树莓派与继电器硬件接线三、使用WiringPi库驱动继电器: 一、继电器概念 ​ 继电器(英文名称:relay)是一种电控制器件,是当输入量(激励量)的变化达到规定要求时,在电气输出电路中使被控量发生预定的阶跃变化的一种电器。它具有控制系统(又称输入回路)和被控制系统(又