37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验五十八:宽电压HC-SR04超声波模块3.3V-5V 测距离传感器板 带UART IIC接口
HC-SR04超声波测距传感器模块的实验环境
一、HC-SR04超声波测距传感器模块实验所需硬件清单
TM1637四位数码管X1
Arduino Uno开发板 X1
杜邦线 若干(备了9条)
LED发光二极管(蓝、绿色)X2
IIC/I2C 1602 LCD液晶屏模块X1
HC-SR04超声波测距传感器模块X1
Proto Shield原型扩展板(带mini面包板)X1
实验接线示意图
程序八:距离10厘米时点亮LED灯
(1)实验开源图形编程(Mind+、编玩边学)
(2)实验串口返回情况
程序九:OLED显示屏显示实际测距值
(1)实验接线示意图
(2)Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序九:OLED显示屏显示实际测距值
Arduino------HG-SR04
5V------------VCC
GND-----------GND
D8------------Echo
D9------------Trig
Arduino------OLED 0.96
A4------------SDA
A5------------SCK
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>//导入驱动库
#define trigPin 9//定义超声波模块接脚
#define echoPin 8
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
//使用 I2C 地址初始化 0x3C (128x64)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
float duration;
float distance_cm;
float distance_in;
digitalWrite(trigPin, LOW); //脉冲___|---|___
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance_cm = (duration / 2) / 29.1;
distance_in = (duration / 2) / 73.914;
display.setCursor(30, 0); //OLED显示屏
display.setTextSize(1);
display.setTextColor(WHITE);
display.println("Range Finder");
display.setCursor(20, 15); //OLED显示屏输出定位
display.setTextSize(2);
display.setTextColor(WHITE);
display.println(distance_cm);
display.setCursor(80, 15);
display.setTextSize(2);
display.println("cm");
display.setCursor(10, 45); //OLED显示屏
display.setTextSize(2);
display.setTextColor(WHITE);
display.println(distance_in);
display.setCursor(90, 45);
display.setTextSize(2);
display.println("in");
display.display();
delay(500);
display.clearDisplay();
Serial.println(distance_cm);
Serial.println(distance_in);
}
(3)实验串口返回情况
(4)实验场景图
程序十:LCD1602显示距离
(1)实验接线示意图
(2)Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序十:1602LCD显示距离
Arduino------HG-SR04
5V------------VCC
GND-----------GND
D8------------Echo
D9------------Trig
*/
#include <LiquidCrystal_I2C.h>//导入驱动库
LiquidCrystal_I2C lcd(0x27, 16, 2);// I2C地址0x27,16列2行
int trigPin = 9; // TRIG pin
int echoPin = 8; // ECHO pin
float duration_us, distance_cm;
void setup() {
lcd.init(); //初始化液晶屏
lcd.backlight(); // 打开背光
pinMode(trigPin, OUTPUT); // 配置触发引脚为输出模式
pinMode(echoPin, INPUT); // 将回显引脚配置为输入模式
}
void loop() {
// 生成 10 微秒脉冲到 TRIG 引脚
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 测量来自 ECHO 引脚的脉冲持续时间
duration_us = pulseIn(echoPin, HIGH);
//计算距离
distance_cm = 0.017 * duration_us;
lcd.clear();
lcd.setCursor(0, 0); //从第一行开始打印
lcd.print("Distance: ");
lcd.print(distance_cm);
delay(500);
}
(3)实验场景图
程序十一:LCD屏显示超声波测距数值
(1)实验开源仿真编程(Linkboy V4.63)
(2)实验场景图