“实验二十四:超声波传感器实验”的版本间的差异

来自丢石头百科
第1行: 第1行:
 
*[[Basic Experiment Kits For Arduino]]
 
*[[Basic Experiment Kits For Arduino]]
 
*[[Basic Experiment Kits For Raspberry Pi]]
 
*[[Basic Experiment Kits For Raspberry Pi]]
 
== 模式选择 ==
 
W1 W2
 
GPIO模式 0 0
 
IIC模式 0 1
 
UART模式 1 0
 
1-Wire模式 1 1
 
 
== 模式说明 ==
 
=== GPIO模式 ===
 
*[[File:Ultrasonic Distance Sensor (HC-SR04)_GPIO.png|800px]]
 
*工作模式同老版本HC-SR04。外部MCU给模块Trig脚一个大于10uS的高电平脉冲;模块会给出一个与距离等比的高电平脉冲信号,
 
*可根据脉宽时间“T”算出:距离=T*C/2 (C为声速)
 
*声速温度公式:c=(331.45+0.61t/℃)m•s-1 (其中330.45是在0℃) 其中:
 
**0℃声速:  330.45M/S
 
**20℃声速:  342.62M/S
 
**40℃声速:  354.85M/S
 
**0℃-40℃声速误差7%左右。实际应用,如果需要精确距离值,必需要考虑温度影响,做温度补偿。
 
 
=== IIC模式 ===
 
**IIC地址: 0X57
 
**IIC传输格式:
 
***写数据:[[File:Ultrasonic Distance Sensor (HC-SR04)_IIC_1.png|600px]]
 
***读数据:[[File:Ultrasonic Distance Sensor (HC-SR04)_IIC_2.png|600px]]
 
**命令格式:[[File:Ultrasonic Distance Sensor (HC-SR04)_IIC.jpg|600px]]
 
**向模块写入0X01,模块开始测距;等待200mS(模块最大测距时间)以上。直接读出3个距离数据。BYTE_H,BYTE_M与BYTE_L。
 
**距离计算方式如下(单位mm):
 
***距离=((BYTE_H<<16)+(BYTE_M<<8)+ BYTE_L)/1000
 
***距离=( BYTE_H*65536 + BYTE_M*256 + BYTE_L )/1000
 
 
=== UART模式 ===
 
**UART模式:波特率9600,起始位1位,停止位1位,数据位8位,无奇偶校验位,无流控制
 
**连接串口。外部MCU或PC发命令0XA0,模块完成测距后发3个返回距离数据,BYTE_H,BYTE_M与BYTE_L。
 
**距离计算方式如下(单位mm):
 
***距离=((BYTE_H<<16)+(BYTE_M<<8)+ BYTE_L)/1000
 
***距离=( BYTE_H*65536 + BYTE_M*256 + BYTE_L )/1000
 
 
 
=== 1-Wire模式 ===
 
*
 
*外部 MCU 初始设置为输出,给模块 I/O 脚一个大于 10uS 的高电平脉冲;输出脉冲信号后,MCU 设置 为输入模式,等待模块给出的一个与距离等比的高电平脉冲信号;测量结束后 MCU 设置为输出模式,进行下次测量。
 
*声速可根据脉宽时间“T”算出: 距离=T*C/2 (C 为声速)
 
*声速温度公式:c=(331.45+0.61t/℃)m•s-1 (其中 330.45 是在 0℃)
 
**0℃声速: 330.45M/S
 
**20℃声速: 342.62M/S
 
**40℃声速: 354.85M/S
 
**0℃-40℃声速误差 7%左右。实际应用,如果需要精确距离值,必需要考虑温度影响,做温度补偿。
 
 
 
 
== Arduino ==
 
== Arduino ==
*'''以GPIO模式为例'''
 
 
=== 实验现象 ===
 
=== 实验现象 ===
* 通过串口打印模块测量到的距离
+
* 通过串口打印模块的电压值。
 +
* 当声音高于阈值时,板载LED灯点亮。
 +
* 当声音低于阈值时,板载LED灯熄灭。
  
 
=== 电路连接 ===
 
=== 电路连接 ===
 
*
 
*
超声波传感器 Arduino UNO R3
+
声音传感器 Arduino UNO R3
 
VCC 5V
 
VCC 5V
Trig A5
+
DO D3
Echo A4
+
AO A0
 
GND GND
 
GND GND
 +
  
 
=== 主要程序 ===
 
=== 主要程序 ===
 
<pre>
 
<pre>
float      distance;
+
   value1 = analogRead(SEN1);   //读取AD值
const int   echo=A4;                         //echO接A4脚
+
   value2 = digitalRead(SEN2);  
const int   trig=A5;                         //trig接A5脚
+
  Serial.print("AD = ");
void setup()
+
   Serial.println(value1);
{
+
   Serial.print("Value = ");
   Serial.begin(9600);                       //波特率9600
+
   Serial.print(value1*5.0/1025);
   pinMode(echo,INPUT);                       //设置echo为输入脚
+
   Serial.println("V");
   pinMode(trig,OUTPUT);                     //设置trig为输出脚
+
  if(value2 == HIGH)             //ADBuffer值小于设定值,相当于温度大于设定值
   Serial.println(" RCWL-1XXX-TTL 测距开始:");
+
  {
}
+
    digitalWrite(LED,HIGH);   //点亮LED
void loop()
+
  }
{
+
  else
digitalWrite(trig,HIGH);
+
  {
delayMicroseconds(1);
+
    digitalWrite(LED,LOW);   //关闭LED
digitalWrite(trig,LOW);
+
  }
distance  = pulseIn(echo,HIGH);            //计数接收高电平时间
 
distance  = distance*340/2/10000;          //计算距离 1:声速:340M/S  2:实际距离为1/2声速距离 3:计数时钟为1US//温补公式:c=(331.45+0.61t/℃)m•s-1 (其中331.45是在0度)
 
Serial.print("距离: ");
 
Serial.print(distance);
 
Serial.println("CM");
 
delay(30);                                 //单次测离完成后加30mS的延时再进行下次测量。防止近距离测量时,测量到上次余波,导致测量不准确。
 
delay(100);                                //延时100mS再次测量,延时可不要
 
}  
 
 
</pre>
 
</pre>
  
 
== 树莓派 ==
 
== 树莓派 ==
*'''以GPIO模式为例'''
+
=== 实验现象 ===
 +
*
 +
=== 电路连接 ===
 +
*
 +
=== 程序运行 ===
 +
==== C语言 ====
 +
==== Python ====
 +
 
 +
=== 例程下载 ===
 +
 
 +
== 相关例程 ==
 +
{{Arduino and Raspberry Pi Case}}
 +
== 树莓派 ==
 
=== 电路连接 ===
 
=== 电路连接 ===
 
*
 
*
 
交通灯模块 Raspberrypi
 
交通灯模块 Raspberrypi
 
BCM编号 物理引脚序号
 
BCM编号 物理引脚序号
VCC 5V 5V
+
R GPIO2 3
TRIG GPIO18 12
+
Y GPIO3 5
ECHO GPIO17 11
+
G GPIO4 7
 
GND GND GND
 
GND GND GND
  
第119行: 第76行:
 
*下载树莓派参考例程,将文件解压后拷贝放在用户名目录下,运行
 
*下载树莓派参考例程,将文件解压后拷贝放在用户名目录下,运行
 
<pre>
 
<pre>
cd raspberrypi/24/python_gpiozero
+
cd raspberrypi/1/python_gpiozero
python sensor.py
+
python led.py
 
</pre>
 
</pre>
*此时可看见树莓派在正确运行程序,若想退出,按ctrl+C即可
+
*此时可看见树莓派在正确运行交通灯程序,若想退出,按ctrl+C即可
*指令说明:'''gpiozero.InputDevice(pin, pull_up, active_state, bounce_time, hold_time, hold_repeat)'''
+
*指令说明:'''gpiozero.TrafficLights(red, amber, green, _options)'''
 
**主要参数:
 
**主要参数:
***pin:GPIO口编号;
+
**red:红色LED连接的GPIO引脚
***pull_up: 内部上下拉电阻设置,
+
**amber:琥珀色LED连接的GPIO引脚
****设置为True时,GPIO引脚通过内部上拉电阻被拉高
+
**green:绿色LED连接的GPIO引脚
****设置为Flase(默认)时,GPIO引脚通过内部下拉电阻被拉低
+
**pwm:
****设置为None时,GPIO引脚悬空,gpiozero无法猜测活动状态,必须设置active_state
+
***如果为True,则构造PWMLED实例来表示每个LED。
***active_state:
+
***如果为False(默认值),则构造常规LED实例。
****设置为True时,当硬件引脚状态为“高”,软件显示引脚状态也为“高”
+
**initial_value:
****设置为False时,则输入的极性相反,当硬件引脚状态为“高”,软件显示引脚状态为“低”
 
****当pull_up设置为None时,使用该参数设置未知的引脚活动状态
 
****当pull_up设置为True或者False时,引脚的活动状态被将自动赋值
 
 
 
*指令说明:'''gpiozero.OutputDevice(pin, pwm, active_high, initial_value)'''
 
**主要参数:
 
***pin: GPIO口编号,
 
*** active_high: 内部上下拉电阻设置,
 
****设置为True(默认)时,on()将引脚设置为High,off()将引脚设置为LOW。
 
****设置为Flase时,on()将引脚设置为LOW,off()将引脚设置为High。
 
***initial_value:
 
 
***如果为False(默认值),则所有LED初始状态为关闭。
 
***如果为False(默认值),则所有LED初始状态为关闭。
***如果为None,则所有LED初始状态不稳定。
+
***如果为“None”,则所有LED初始状态不稳定。
 
***如果为True,则所有LED初始状态为关闭打开。
 
***如果为True,则所有LED初始状态为关闭打开。
 
*更多指令请查看[https://gpiozero.readthedocs.io/en/latest/installing.html gpiozero文档]
 
*更多指令请查看[https://gpiozero.readthedocs.io/en/latest/installing.html gpiozero文档]
 +
 +
== 数据手册 ==
 +
  
 
== 例程下载 ==
 
== 例程下载 ==

2024年12月3日 (二) 17:17的版本

Arduino

实验现象

  • 通过串口打印模块的电压值。
  • 当声音高于阈值时,板载LED灯点亮。
  • 当声音低于阈值时,板载LED灯熄灭。

电路连接

声音传感器 Arduino UNO R3 VCC 5V DO D3 AO A0 GND GND


主要程序

  value1 = analogRead(SEN1);    //读取AD值
  value2 = digitalRead(SEN2); 
  Serial.print("AD = ");
  Serial.println(value1);
  Serial.print("Value = ");
  Serial.print(value1*5.0/1025);
  Serial.println("V");
  if(value2 == HIGH)              //ADBuffer值小于设定值,相当于温度大于设定值
  {
    digitalWrite(LED,HIGH);   //点亮LED
  }
  else
  {
    digitalWrite(LED,LOW);    //关闭LED
  }

树莓派

实验现象

电路连接

程序运行

C语言

Python

例程下载

相关例程

Arduino和树莓派基础实验套件例程
教程名2
  • 列表2
教程名3
  • 列表3
教程名4
  • 列表4
教程名5
  • 列表5
教程名6
  • 列表6

树莓派

电路连接

交通灯模块 Raspberrypi BCM编号 物理引脚序号 R GPIO2 3 Y GPIO3 5 G GPIO4 7 GND GND GND

程序运行

Python

  • 安装gpiozero库
    • 可以使下面命令来安装该库
sudo apt update
sudo apt install python3-gpiozero
  • 其它树莓派上的系统可以使下面命令来安装该库:
sudo pip3 install gpiozero
  • 运行以下语句可以查看树莓派GPIO口定义
pinout
  • 下载树莓派参考例程,将文件解压后拷贝放在用户名目录下,运行
cd raspberrypi/1/python_gpiozero
python led.py
  • 此时可看见树莓派在正确运行交通灯程序,若想退出,按ctrl+C即可
  • 指令说明:gpiozero.TrafficLights(red, amber, green, _options)
    • 主要参数:
    • red:红色LED连接的GPIO引脚
    • amber:琥珀色LED连接的GPIO引脚
    • green:绿色LED连接的GPIO引脚
    • pwm:
      • 如果为True,则构造PWMLED实例来表示每个LED。
      • 如果为False(默认值),则构造常规LED实例。
    • initial_value:
      • 如果为False(默认值),则所有LED初始状态为关闭。
      • 如果为“None”,则所有LED初始状态不稳定。
      • 如果为True,则所有LED初始状态为关闭打开。
  • 更多指令请查看gpiozero文档

数据手册

例程下载

相关例程

Arduino和树莓派基础实验套件例程
教程名2
  • 列表2
教程名3
  • 列表3
教程名4
  • 列表4
教程名5
  • 列表5
教程名6
  • 列表6