1、产品特点:
HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括超声波发射器、接收器与控制电路。

基本工作原理:
(1)采用IO 口 TRIG触发测距,给最少10us的高电平信号。
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;(可以简单认为是高电平)
(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2;

注:1、此模块不宜带电连接,若要带电连接,则先让模块的GND端先连接,否则会影响模块的正常工作。
2、测距时,被测物体的面积不少于0.5平方米且平面尽量要求平整,否则影响测量的结果
时序图如下


公式转换原理:

为什么最后是t3呢?
答:因为t/2后是单程的时间,路程=时间
速度=t*3mm/s=最终的数值(mm)

拓展:
pwm控制蜂鸣器占空比,下面是例子

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_usart.h"
#include "sys.h"
#include "stdio.h"static GPIO_InitTypeDef     GPIO_InitStructure;
static USART_InitTypeDef    USART_InitStructure;
static NVIC_InitTypeDef     NVIC_InitStructure;     static EXTI_InitTypeDef   EXTI_InitStructure;static TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;static TIM_OCInitTypeDef  TIM_OCInitStructure;static uint32_t g_freq=100,g_duty=50,g_cmp=0;//重定义fputc函数
int fputc(int ch, FILE *f)
{   USART_SendData(USART1,ch);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);  return ch;
}   void delay_us(uint32_t nus)
{       uint32_t temp;           SysTick->LOAD =SystemCoreClock/8/1000000*nus;  //时间加载           SysTick->VAL  =0x00;                           //清空计数器SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;         //使能滴答定时器开始倒数    do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16)));          //等待时间到达   SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;         //关闭计数器SysTick->VAL =0X00;                              //清空计数器
}void delay_ms(uint16_t nms)
{                 uint32_t temp;           SysTick->LOAD=SystemCoreClock/8/1000*nms;        //时间加载(SysTick->LOAD为24bit)SysTick->VAL =0x00;                               //清空计数器SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;     //能滴答定时器开始倒数 do{temp=SysTick->CTRL;}while((temp&0x01)&&!(temp&(1<<16)));          //等待时间到达   SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;     //关闭计数器SysTick->VAL =0X00;                          //清空计数器
} void LED_Init(void)
{        //使能GPIOE,GPIOF时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF, ENABLE);           //GPIOF9,F10初始化设置 GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9 | GPIO_Pin_10;        //LED0和LED1对应IO口GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;                 //普通输出模式,GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                 //推挽输出,驱动LED需要电流驱动GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;                //100MHzGPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;                  //上拉GPIO_Init(GPIOF, &GPIO_InitStructure);                          //初始化GPIOF,把配置的数据写入寄存器                       //GPIOE13,PE14初始化设置 GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_13 | GPIO_Pin_14;     //LED2和LED3对应IO口GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;                 //普通输出模式GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                 //推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;               //100MHzGPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;                  //上拉GPIO_Init(GPIOE, &GPIO_InitStructure);                          //初始化GPIOE,把配置的数据写入寄存器GPIO_SetBits(GPIOF,GPIO_Pin_9  | GPIO_Pin_10);                 //GPIOF9,PF10设置高,灯灭GPIO_SetBits(GPIOE,GPIO_Pin_13 | GPIO_Pin_14);
}void key_exti_init(void)
{/* GPIOA GPIOE 硬件时钟使能 */RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOE, ENABLE);/* 使能 SYSCFG 时钟 */RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); /* 配置PA0引脚为输入模式  */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                       //第0根引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;               //输入模式,能够检测外部电平状态GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //GPIO最大的速度为100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //不需要上下拉电阻GPIO_Init(GPIOA, &GPIO_InitStructure);/* 配置PE2引脚为输入模式  */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;           //第2 根引脚    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                           //输入模式,能够检测外部电平状态GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;                     //GPIO最大的速度为100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                         //使能内部上拉电阻(可选)GPIO_Init(GPIOE, &GPIO_InitStructure);/* Connect EXTI Line0 to PA0 pin */SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);/* Connect EXTI Line2 to PE2 pin */SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);/* Configure EXTI Line0 */EXTI_InitStructure.EXTI_Line = EXTI_Line0;             //使用外部中断控制线0EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        //中断事件EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;   //上升沿触发,按键松开的时候就触发中断  EXTI_InitStructure.EXTI_LineCmd = ENABLE;             //中断控制线使能EXTI_Init(&EXTI_InitStructure);/* Configure EXTI Line2  */EXTI_InitStructure.EXTI_Line = EXTI_Line2;              //使用外部中断控制线2EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        //中断事件EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;   //上升沿触发,按键松开的时候就触发中断  EXTI_InitStructure.EXTI_LineCmd = ENABLE;             //中断控制线使能EXTI_Init(&EXTI_InitStructure);//支持4个抢占优先级,支持4个响应优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);/* Enable and set EXTI Line0 Interrupt to the lowest priority */NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;            //外部中断控制线0中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//抢占优先级0x3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;     //响应优先级0x3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;              //外部中断控制线0中断通道使能NVIC_Init(&NVIC_InitStructure);/* Enable and set EXTI Line2 Interrupt to the lowest priority */NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;            //外部中断控制线2中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x3;//抢占优先级0x3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x3;       //响应优先级0x3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;              //外部中断控制线2中断通道使能NVIC_Init(&NVIC_InitStructure);
}void tim13_init(uint32_t freq)
{/* TIM13 clock enable,使能定时器13硬件时钟 */RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM13, ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);     /* 配置PF8引脚为复用功能模式  */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;         //第8根引脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;       //复用功能模式,使用引脚的第二功能GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        //推挽输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //GPIO最大的速度为100MHzGPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;     //使能内部上拉电阻,增大输出电流的能力GPIO_Init(GPIOF, &GPIO_InitStructure);/* Connect TIM13 pins to PF8 */  GPIO_PinAFConfig(GPIOF, GPIO_PinSource8, GPIO_AF_TIM13);/* Time base configuration,定时器参数的基本配置:定时时间、分频值、计数方法*/TIM_TimeBaseStructure.TIM_Period =(10000/freq)-1;                                                     //设置频率TIM_TimeBaseStructure.TIM_Prescaler = 8400-1;                                                //预分频值8400TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;                      //二次分频,也就是说再进行一次分频,当前是1分频TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;         //向上计数的方法TIM_TimeBaseInit(TIM13, &TIM_TimeBaseStructure);/* PWM1 Mode configuration: Channel1 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                  //PWM模式1,在递增计数模式下,只要 TIMx_CNT<TIMx_CCR1,通道 1 便为有效状态,否则为无效状态。TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;      //允许输出TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;            //有效的时候,输出高电平TIM_OC1Init(TIM13, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM13, TIM_OCPreload_Enable);                 //自动重载初值,不断输出PWM脉冲TIM_ARRPreloadConfig(TIM13, ENABLE);                               //自动重载使能/* TIM13 enable counter,使能定时器13工作 */TIM_Cmd(TIM13, ENABLE);}void tim13_deinit(void)
{TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Disable;            //禁止输出TIM_OC1Init(TIM13, &TIM_OCInitStructure);/* TIM13 disable counter,禁止定时器13工作 */TIM_Cmd(TIM13, DISABLE);
}void USART1_Init(uint32_t baud)
{RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);                           //使能GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);                            //使能USART1时钟//串口1对应引脚复用映射GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);                        //GPIOA9复用为USART1GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);                       //GPIOA10复用为USART1//USART1端口配置GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;                      //GPIOA9与GPIOA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                                   //复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                                //速度50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                                    //推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;                                   //上拉GPIO_Init(GPIOA,&GPIO_InitStructure);                                           //初始化PA9,PA10//USART1 初始化设置USART_InitStructure.USART_BaudRate = baud;                                       //波特率设置USART_InitStructure.USART_WordLength = USART_WordLength_8b;                     //字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;                          //一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;                             //无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;    //无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                  //收发模式USART_Init(USART1, &USART_InitStructure);                                         //初始化串口1USART_Cmd(USART1, ENABLE);                                                      //使能串口1 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                                  //开启相关中断//Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;                              //串口1中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;                           //抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                              //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                 //IRQ通道使能NVIC_Init(&NVIC_InitStructure);                                                    //根据指定的参数初始化VIC寄存器
}void sr04_init(void)
{//使能GPIOB,GPIOE时钟RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOE, ENABLE);           //PB6初始化设置 GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6;                     //PB6引脚GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;                  //普通输出模式,GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                 //推挽输出,驱动LED需要电流驱动GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;                //100MHzGPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;                  //上拉GPIO_Init(GPIOB, &GPIO_InitStructure);                          //初始化GPIOB,把配置的数据写入寄存器                       //PE6初始化设置 GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6;                     //PB6引脚GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;                   //普通输入模式,GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;             //100MHzGPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;                  //上拉GPIO_Init(GPIOE, &GPIO_InitStructure);                          //初始化GPIOE,把配置的数据写入寄存器       }//获取距离,单位为mm
uint32_t sr04_get_distance(void)
{uint32_t t=0;//发送触发信号PBout(6)=1;delay_us(20);PBout(6)=0;//等待输出回响信号while(PEin(6)==0);//测量回响信号时间while(PEin(6)){delay_us(8);t++;}t = t/2;return (3*t);}int main(void)
{ uint32_t distance;LED_Init();     //系统定时器初始化,时钟源来自HCLK,且进行8分频,//系统定时器时钟频率=168MHz/8=21MHzSysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //设置中断优先级分组2NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//串口1,波特率115200bps,开启接收中断USART1_Init(115200);//初始化超声波模块sr04_init();//初始化定时器13tim13_init(g_freq);//按键中断初始化key_exti_init();while(1){//获取距离distance = sr04_get_distance();if(distance>4000)continue;//串口显示距离printf("distance=%dmm\r\n",distance);delay_ms(500);//为了方便测试,当前测试距离缩小为原来的一半。if(distance < 600/2) {PFout(9)=0;PFout(10)=0;PEout(13)=0;PEout(14)=0;//设置频率g_freq = 600;tim13_init(g_freq);//设置占空比g_cmp = g_freq * g_duty/100;TIM_SetCompare1(TIM13,g_cmp);}else if(distance < 1000/2){PFout(9)=0;PFout(10)=0;PEout(13)=0;PEout(14)=1;      //设置频率g_freq = 400;tim13_init(g_freq); //设置占空比g_cmp = g_freq * g_duty/100;TIM_SetCompare1(TIM13,g_cmp);           }else if(distance < 1400/2){PFout(9)=0;PFout(10)=0;PEout(13)=1;PEout(14)=1;  //设置频率g_freq = 200;tim13_init(g_freq); //设置占空比g_cmp = g_freq * g_duty/100;TIM_SetCompare1(TIM13,g_cmp);           }   else if(distance < 1800/2){PFout(9)=0;PFout(10)=1;PEout(13)=1;PEout(14)=1;   //设置频率g_freq = 100;tim13_init(g_freq);     //设置占空比g_cmp = g_freq * g_duty/100;TIM_SetCompare1(TIM13,g_cmp);           }   else{PFout(9)=1;PFout(10)=1;PEout(13)=1;PEout(14)=1;    //蜂鸣器停止工作tim13_deinit();}}
}void EXTI0_IRQHandler(void)
{//检查外部中断控制线0是否真的触发中断if(EXTI_GetITStatus(EXTI_Line0)== SET){if(g_duty>=10){g_duty-=10;printf("duty=%d\r\n",g_duty);}/* Clear the EXTI line 0 pending bit */EXTI_ClearITPendingBit(EXTI_Line0);        }
}void EXTI2_IRQHandler(void)
{//检查外部中断控制线2是否真的触发中断if(EXTI_GetITStatus(EXTI_Line2)== SET){if(g_duty<100){g_duty+=10;printf("duty=%d\r\n",g_duty);}/* Clear the EXTI line 2 pending bit */EXTI_ClearITPendingBit(EXTI_Line2);        }
}void USART1_IRQHandler(void)                               //串口1中断服务程序
{uint8_t d;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)   //接收中断{//接收数据d = USART_ReceiveData(USART1);                        //发送数据USART_SendData(USART1,d);while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);} } 

sys.h

#ifndef __SYS_H__
#define __SYS_H__//位带操作,实现51类似的GPIO控制功能
//IO口操作宏定义
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) //IO口地址映射
#define GPIOA_ODR_Addr    (GPIOA_BASE+20) //0x40020014
#define GPIOB_ODR_Addr    (GPIOB_BASE+20) //0x40020414
#define GPIOC_ODR_Addr    (GPIOC_BASE+20) //0x40020814
#define GPIOD_ODR_Addr    (GPIOD_BASE+20) //0x40020C14
#define GPIOE_ODR_Addr    (GPIOE_BASE+20) //0x40021014
#define GPIOF_ODR_Addr    (GPIOF_BASE+20) //0x40021414
#define GPIOG_ODR_Addr    (GPIOG_BASE+20) //0x40021814
#define GPIOH_ODR_Addr    (GPIOH_BASE+20) //0x40021C14
#define GPIOI_ODR_Addr    (GPIOI_BASE+20) //0x40022014     #define GPIOA_IDR_Addr    (GPIOA_BASE+16) //0x40020010
#define GPIOB_IDR_Addr    (GPIOB_BASE+16) //0x40020410
#define GPIOC_IDR_Addr    (GPIOC_BASE+16) //0x40020810
#define GPIOD_IDR_Addr    (GPIOD_BASE+16) //0x40020C10
#define GPIOE_IDR_Addr    (GPIOE_BASE+16) //0x40021010
#define GPIOF_IDR_Addr    (GPIOF_BASE+16) //0x40021410
#define GPIOG_IDR_Addr    (GPIOG_BASE+16) //0x40021810
#define GPIOH_IDR_Addr    (GPIOH_BASE+16) //0x40021C10
#define GPIOI_IDR_Addr    (GPIOI_BASE+16) //0x40022010 //IO口操作,只对单一的IO口!
//确保n的值小于16!
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //输出
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //输入 #define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //输出
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //输入 #define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //输出
#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //输入 #define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //输出
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //输入 #define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //输出
#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //输入#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //输出
#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //输入#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //输出
#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //输入#define PHout(n)   BIT_ADDR(GPIOH_ODR_Addr,n)  //输出
#define PHin(n)    BIT_ADDR(GPIOH_IDR_Addr,n)  //输入#define PIout(n)   BIT_ADDR(GPIOI_ODR_Addr,n)  //输出
#define PIin(n)    BIT_ADDR(GPIOI_IDR_Addr,n)  //输入#endif

HC-SR04超声波传感器相关推荐

  1. 【雕爷学编程】Arduino动手做(58)---SR04超声波传感器

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  2. stm32f429+超声波传感器HC-SR04 -- 测距

    工具 1. 开发板stm32f429(f4系列的应该都可以) 2. 超声波传感器,型号为HC-SR04 HC-SR04接线 HC-SR04 stm32f4 VCC VCC(5V) GND GND Tr ...

  3. hc sr04流程图_超声波传感器HC-SR04完整应用以及程序讲解

    带有Arduino的超声波传感器HC-SR04完整应用指南 本文是有关流行的超声波传感器HC – SR04的应用指南.我们将解释其工作原理,向您展示其某些功能,并分享一个您可以遵循的Arduino项目 ...

  4. hc sr04流程图_超声波测距模块工作原理_HC-SR04模块详解

    超声波测距模块有好多种类型,目前比较常用的有URM37超声波传感器默认是232接口,可以调为TTL接口,URM05大功率超声波传感器测试距离能到10米,算是目前来说测试距离比较远的一款了,另外还有比较 ...

  5. Arduino开发实例-DIY超声波传感器避障机器人

    超声波传感器避障机器人 1.应用介绍 在本应用中,我们将使用一个超声波传感器与两个直流电机和一个伺服电机相结合,Arduino作为主控板创建一个简单的避障机器人. 超声波传感器发送和接收信号以确定物体 ...

  6. 【STM32】超声波传感器HC-SR04知识

    一.超声波HC_SR04简介 超声波传感器模块上面通常有两个超声波元器件,一个用于发射,一个用于接收. 电路板上有四个引脚:VCC.GND.Trig(触发).Echo(回应).         工作电 ...

  7. GY-US42超声波传感器模块介绍

    GY-US42超声波传感器模块简介 GY-US42 是一款低成本高品质测距传感器模块.工作电压 3-5v,功耗小,体积小,安装方便.其工作原理是,探头发射超声波,照射到被测物体后,探头接收返回声波,利 ...

  8. arduino超声波测距接线图详细_使用Arduino UNO开发板和超声波传感器测量距离

    超声波传感器不仅提供距离测量实用程序,而且没有任何物理接触,但需要我们在无噪音和光线的情况下进行测量,与基于激光的距离测量仪器不同.此外,即使在基于激光的仪器经常降低其效率的日光下,这些仪器也便宜且更 ...

  9. 距离传感器控制灯泡代码_如何使用颜色传感器和超声波传感器检测障碍物和避障...

    上一期的内容中,我给大家介绍了如何使用触碰传感器检测障碍物和避障,今天我们再来说说如何使用颜色传感器和超声波传感器检测障碍物和避障. 使用颜色传感器 在大多数情况下,EV3颜色传感器并不适合用于障碍物 ...

  10. 超声波传感器特性测量:发送与接收传感器之间的差异

    简 介: 本文针对超声波传感器的测量方法,探讨了使用NanoVNA测量过程, 对比发射和接收传感器在特性方面的不同. 对于整个过程编写了APPLE脚本. 关键词: 超声波传感器,发送,接收,NanoV ...

最新文章

  1. Python-decorator装饰器小结
  2. c语言中常用的预处理命令6,C语言的预处理命令
  3. 【HDOJ】3948 The Number of Palindromes
  4. MacOSX下的BaiduPCS-Go的安装及使用说明
  5. 5v继电器模块实物接线_电气工程师都收藏的西门子S71200PLC接线图设计大全
  6. 虚幻引擎4中的移动设备分析插件
  7. Yii2 behaviors中verbs access的一些理解
  8. python 屏幕输入 读取两行_一节课带你掌握Python的输入输出
  9. 剑指offer--面试题19
  10. Spring Security OAuth2实现单点登录
  11. Oracle补习班第五天
  12. ValidationKey
  13. html制作清明上河图
  14. CentOS查看文件夹大小
  15. html div边框添加文字,css通过text-shadow给文字加边框!
  16. idea顶部工具栏、底部工具栏、两边工具栏的显示与隐藏
  17. C++核心准则R.3: 原始指针(T*)不应拥有所有权
  18. bit、byte、KB、M、G、T相互关系
  19. Joomla 漏洞总结
  20. 浙大MEM提面优秀成功上岸经验分享——完全准备才能“聊”的好

热门文章

  1. chronodex怎么用_滴答清单使用全攻略:如何把手帐搬到滴答清单上,提升效率?...
  2. 给自己做一块开发板 #AnyBoard
  3. python locale.setlocale_语言环境.setlocale(LC_NUMERIC):如何使其在Windows上运行
  4. PayPal的钱如何提现?PayPal商家终于可以松口气了!
  5. 微信公众号正式号网络授权域名操作
  6. TMS320F2837x + Spartan6/国产FPGA低成本高实时注塑机运动控制器软硬件设计方案
  7. Log4j2 漏洞检测工具清单
  8. luogu P4173 残缺的字符串
  9. android基础复习笔记——3.登录授权、TCP/IP、HTTPS原理
  10. JSP PDF打印 随记