树莓派超声波测距实验
来源:互联网 发布:商家去哪里找淘宝达人 编辑:程序博客网 时间:2024/04/28 14:05
超声波模块可以用hc-sr05,淘宝有许多,图如下
共四个接口
VCC、trig(控制端)、 echo(接收端)、 GND
原理比较简单
(1)采用IO口对TRIG触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
距离=(高电平时间*声速(340M/S))/2;
详细一点的内容可以看这里
https://electrosome.com/hc-sr04-ultrasonic-sensor-raspberry-pi/
该文在echo与树莓派之间加了电阻,防止电流冲击,实际不加问题不大。
实验接线如图
C源代码
/* define from bcm2835.h define from Board DVK511 3.3V | | 5V -> 3.3V | | 5V RPI_V2_GPIO_P1_03 | | 5V -> SDA | | 5V RPI_V2_GPIO_P1_05 | | GND -> SCL | | GND RPI_GPIO_P1_07 | | RPI_GPIO_P1_08 -> IO7 | | TX GND | | RPI_GPIO_P1_10 -> GND | | RX RPI_GPIO_P1_11 | | RPI_GPIO_P1_12 -> IO0 | | IO1 RPI_V2_GPIO_P1_13 | | GND -> IO2 | | GND RPI_GPIO_P1_15 | | RPI_GPIO_P1_16 -> IO3 | | IO4 VCC | | RPI_GPIO_P1_18 -> VCC | | IO5 RPI_GPIO_P1_19 | | GND -> MOSI | | GND RPI_GPIO_P1_21 | | RPI_GPIO_P1_22 -> MISO | | IO6 RPI_GPIO_P1_23 | | RPI_GPIO_P1_24 -> SCK | | CE0 GND | | RPI_GPIO_P1_26 -> GND | | CE1::if your raspberry Pi is version 1 or rev 1 or rev ARPI_V2_GPIO_P1_03->RPI_GPIO_P1_03RPI_V2_GPIO_P1_05->RPI_GPIO_P1_05RPI_V2_GPIO_P1_13->RPI_GPIO_P1_13::*/#include <bcm2835.h>#include <stdio.h>#include <sys/time.h>#define SS RPI_GPIO_P1_16 //send signal#define RS RPI_GPIO_P1_11 //receive signalint getdistance(){ bcm2835_gpio_write(SS,LOW); bcm2835_delay(100); bcm2835_gpio_write(SS,HIGH); bcm2835_delayMicroseconds(15); bcm2835_gpio_write(SS,LOW); while(bcm2835_gpio_lev(RS)==0) { bcm2835_delayMicroseconds(1); } struct timeval tv_begin, tv_end; gettimeofday(&tv_begin, NULL); int count=0; //最远探测约5米,无回波返回 while(bcm2835_gpio_lev(RS)==1 && count<=30000) { bcm2835_delayMicroseconds(1); count++; } if(count>=30000) return 0; gettimeofday(&tv_end, NULL); int timebetween; if(tv_end.tv_sec>tv_begin.tv_sec) { timebetween=tv_end.tv_usec+1000000-tv_begin.tv_usec; } else timebetween=tv_end.tv_usec-tv_begin.tv_usec; int distance=timebetween*17150/1000000; return distance; //bcm2835_delay(500);}int main(int argc, char **argv){ uint8_t value,i; if (!bcm2835_init()) { printf("init error\n"); return 1; } bcm2835_gpio_fsel(SS, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(RS, BCM2835_GPIO_FSEL_INPT); while (1) { printf("distance %d cm\n", getdistance()); bcm2835_delay(1000); } bcm2835_close(); return 0;}
0 0
- 树莓派超声波测距实验
- 树莓派超声波测距实验
- 超声波测距实验
- 树莓派与超声波测距
- 树莓派超声波测距代码
- STC15系列单片机 超声波测距实验
- 树莓派蜂鸣器+超声波测距模块
- 超声波测距
- 超声波测距
- 超声波测距
- 树莓派 超声波测距模块HC-SR04
- 树莓派之HC-SR04超声波测距模块
- MC9S12XS128实现超声波测距
- 超声波测距程序
- 超声波测距传感器
- C51超声波测距试验
- 超声波测距程序
- Arduino - 超声波测距
- 留言板设计中的MySQL学习
- rtl8812驱动分析(二)
- leetcode:Excel Sheet Column Title
- win7 64位旗舰版安装Ubuntu 10.04 非wubi安装
- System Generator 中 除法 的使用
- 树莓派超声波测距实验
- sgu122
- linux显示线程信息
- 动漫人物之七大罪 伊丽莎白·里昂妮丝 Elizabeth Liones エリザベス・リオ ネス CV 雨宫天
- 管理的网路设备较多,今天借助SNMP++ 编写了一个SNMP的COM控件,可以用VBS脚本批量查自己想要的数据了
- To_review_100_1---KMP算法的整理
- 不明白 redis读写分离 这个怎么都是一样的配置呢?
- 图的遍历
- 有一亿个int整数---找到前top10 最大的数 ---最好考虑时间复杂度