基于Arduino的COVID-19社交距离提醒系统
组件与物料
![]() | Arduino UNO (Arduino Nano 更适合,但此处使用 UNO) | × | 1 |
![]() | Arduino Proto Shield (可选) | × | 1 |
| Adafruit Mini Breadboard | × | 1 | |
| Elegoo 16x2 LCD 显示屏 | × | 1 | |
![]() | 超声波传感器 HC-SR04 (通用) | × | 1 |
| 触摸传感器 (也可用按钮,需下拉电阻) | × | 1 | |
| NTC 热敏电阻 | × | 1 | |
![]() | 电阻 10k Ω | × | 1 |
![]() | 蜂鸣器 | × | 1 |
![]() | 旋转电位器 (通用) (用于调节 LCD 对比度) | × | 1 |
![]() | 杜邦线 (通用) | × | 1 |
| 透明防水盒 (需透明以便看 LCD,防小雨) | × | 1 |
应用与在线服务
![]() | Arduino IDE |
项目介绍
这是什么?
减缓冠状病毒传播最可靠的方法是与他人保持距离;预防胜于治疗。但每隔 30 秒回头看看是否有人靠近很烦人。如果有设备能提醒他人与你保持 2 米距离就好了。这就是本项目的目的:提醒他人与你保持 2 米社交距离。这是一个二合一装置:热敏电阻不仅用于温度补偿提高测距精度(声速随温度变化),还配合按钮/触摸传感器切换两种模式:
- 模式 1:有人靠近时报警
- 模式 2:在 LCD 上显示温度和距离
工作原理
- Arduino 测量环境温度
- 利用温度修正声速,提高超声波测距精度
模式 1(报警模式):
- 距离 2m~1m:LCD 背光常亮,显示 "Please keep away" 及距离
- 距离 1m~50cm:LCD 背光闪烁,显示 "Keep away"
- 距离 <50cm:LCD 背光每秒闪烁两次,显示 "STAY AWAY!",蜂鸣器报警
模式 2(测量模式): LCD 第一行显示距离,第二行显示温度。
为防雨,顶部加装半个塑料瓶作为遮雨罩,可上推。设备通过两根绳子挂在背包底部,易于拆卸。
触摸传感器用于切换模式。
如何制作
按照下方电路图连接元件。
导入“代码”部分的两个库:在 Arduino IDE 中点击“草图”→“包含库”→“添加 .ZIP 库...”选择下载的 .zip 文件。两个库都必需。
完成接线和库安装后,上传下方代码。
代码
主程序 Arduino
#include <HCSR04.h>
#include <LiquidCrystal.h>
#define trigPin 7
#define echoPin 6
#define buzzer 9
#define backlight 10
LiquidCrystal lcd(12, 11, 5, 4, 3, 8);
UltraSonicDistanceSensor distanceSensor(trigPin, echoPin);
int tempReading;
double tempK;
float tempC;
int rounded;
int temp_round;
volatile boolean modes = 0;
double distance;
void setup() {
lcd.begin(16, 2);
attachInterrupt(0, changeMode, FALLING);
pinMode(2, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(backlight, OUTPUT);
digitalWrite(backlight, HIGH);
backlightOn();
}
void loop() {
tempReading = analogRead(A0);
tempK = log(10000.0 * ((1024.0 / tempReading - 1)));
tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK)) * tempK);
tempC = tempK - 273.15;
distance = distanceSensor.measureDistanceCm(tempC);
temp_round = round(tempC);
if (modes == 1) { // 模式 2:测量模式
backlightOn();
if (distance >= 300 || distance <= 0) {
rounded = 0;
lcd.clear();
lcd.print("Out of range");
lcd.setCursor(0, 1);
lcd.print("Temperature:" + String(temp_round) + " C");
} else {
rounded = round(distance);
lcd.clear();
lcd.print("Distance: ");
lcd.print(rounded);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Temperature:" + String(temp_round) + " C");
}
} else { // 模式 1:报警模式
if (distance >= 300 || distance <= 0) {
rounded = 0;
lcd.clear();
backlightOff();
} else {
rounded = round(distance);
if (distance >= 200) {
backlightOff();
lcd.clear();
} else if (distance <= 200 && distance > 100) {
backlightOn();
lcd.clear();
lcd.print("Please keep away");
lcd.setCursor(0, 1);
lcd.print("Distance:");
lcd.print(rounded);
lcd.print(" cm");
} else if (distance <= 100 && distance > 50) {
backlightOn();
lcd.clear();
lcd.print("Keep away");
lcd.setCursor(0, 1);
lcd.print("Distance:");
lcd.print(rounded);
lcd.print(" cm");
delay(200); buzz(); backlightOff(); delay(100); unbuzz(); backlightOn(); delay(100);
} else if (distance <= 50) {
backlightOn();
lcd.clear();
lcd.print("STAY AWAY!");
lcd.setCursor(0, 1);
lcd.print("Distance:");
lcd.print(rounded);
lcd.print(" cm");
delay(200); buzz(); backlightOff(); delay(200); unbuzz(); backlightOn(); delay(200);
buzz(); backlightOff(); delay(200); unbuzz(); backlightOn();
}
}
}
delay(700);
}
void changeMode() { modes = !modes; }
void backlightOn() { digitalWrite(backlight, HIGH); }
void backlightOff() { digitalWrite(backlight, LOW); }
void buzz() { digitalWrite(buzzer, HIGH); }
void unbuzz() { digitalWrite(buzzer, LOW); }
所需库文件
- arduino-lib-hc-sr04-master.zip:https://github.com/Martinsos/arduino-lib-hc-sr04
- LiquidCrystal.zip:https://github.com/arduino-libraries/LiquidCrystal
原理图
coronavirus_distancing_WQxTcxgmYm.fzz
制造工艺
- 自制《鱿鱼游戏》主题互动娃娃——Arduino UNO DIY项目
- 自制 Arduino 伊斯兰祷告时间实时时钟
- 基于 Arduino Uno 的人体检测救援机器人:传感器集成分步指南
- Arduino Uno WiFi 网页服务器:通过浏览器控制 LED 开关
- Arduino 串口简易计算器:两数四则运算演示
- Arduino UNO 驱动 1.17 英寸 TFT 屏显示图片 (SD 卡读取)
- 自制便携式视觉暂留显示器:Arduino UNO 与 ATtiny85
- Arduino 洗手计时器:抗击 COVID-19 的简易 DIY 工具
- Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
- 用 Arduino Uno 和 1Sheeld 构建 4x4x4 LED 立方体 - 互动音乐可视化项目
- Wi-Servo:基于 ESP8266 的 Wi-Fi 网页端舵机远程控制系统
- Arduino Uno 控制 25kHz 4 针 PWM 风扇 - 硬件、代码与测试







