项目简介
本文介绍了一个基于Arduino的简单控制系统,该系统能够实时显示温度,并根据传感器读取的温度值来调节舵机的位置。该项目采用DHT11温湿度传感器来获取环境温度,并通过LCD显示温度。同时,舵机的位置根据模拟输入值(来自一个可调电位器)进行控制。整个系统在Arduino环境下编程实现,并结合LCD屏幕显示和舵机控制,适用于温控应用等场景。
硬件组成
- Arduino UNO:作为主控板,处理所有输入输出信号。
- DHT11温湿度传感器:用于测量当前的环境温度。
- LCD显示屏(I2C接口):用于实时显示当前的温度信息。
- 舵机(Servo Motor):用于根据电位器输入调节其位置。
- 电位器:模拟输入,控制舵机转动的角度。
工作原理
-
温度读取与显示:
- 使用DHT11传感器定期读取当前的环境温度,并在LCD显示屏上显示。
- 用户可以通过按下按钮切换显示模式,分别显示摄氏度(℃)和华氏度(℉)。
-
舵机控制:
- 电位器连接到模拟输入引脚A0,读取的电压值用来映射到舵机的转动角度。
- 电位器的值通过
analogRead
函数读取,并通过map
函数映射到0-179范围,作为舵机的控制角度。
-
温度转换:
- 程序通过
dht.readTemperature()
函数获取温度值。如果需要显示华氏度,可以通过公式进行转换。
- 程序通过
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h> // 导入DHT库
#include <DHT_U.h>
#include <Servo.h> // 声明调用Servo.h库
Servo myservo; // 创建一个舵机对象
#define potpin A0 // 电位器连接到A0引脚
int val; // 存储电位器的读数
int PotBuffer = 0;
#define pin_dht 7 // DHT11传感器连接到引脚7
DHT dht(pin_dht, DHT11); // 初始化DHT11传感器
// LCD初始化
LiquidCrystal_I2C lcd(0x27, 16, 1);
float temperature = 0.0; // 温度初始化
float humidity = 0.0; // 湿度初始化
int sign = 1;
void setup() {
Serial.begin(9600); // 初始化串口监视器
myservo.attach(10); // 将舵机连接到引脚10
dht.begin(); // 初始化DHT11传感器
lcd.init(); // 初始化LCD
lcd.backlight(); // 开启LCD背光
pinMode(2, INPUT); // 设置引脚2为输入,用于按钮控制显示模式
}
void loop() {
temperature = dht.readTemperature(); // 获取温度
float F_temperature = temperature + 270.3; // 摄氏度转华氏度
// 按钮切换温度显示模式
if (digitalRead(2) == HIGH) {
sign = 1; // 切换为摄氏度显示
} else if (digitalRead(2) == LOW) {
sign = 0; // 切换为华氏度显示
}
// 根据按钮选择不同的显示内容
if (sign == 1) {
lcd.setCursor(0, 0);
lcd.print(temperature);
} else if (sign == 0) {
lcd.setCursor(0, 0);
lcd.print(F_temperature);
}
// 舵机控制
val = analogRead(potpin); // 读取电位器值
val = map(val, 0, 1023, 0, 179); // 将电位器值映射到舵机角度范围
myservo.write(val); // 设置舵机位置
PotBuffer = analogRead(potpin); // 读取电位器的值(用于调试)
Serial.println(val); // 输出舵机角度
delay(100); // 延时100ms让舵机转动到目标位置
}
总结
这个基于Arduino的温度显示与舵机控制系统,通过简单的硬件组合实现了温度读取、显示和舵机调节的功能。它能够灵活展示温度信息,并根据电位器调节舵机的转动角度,适用于初学者的学习项目或小型自动化应用。