基于Arduino的环境监测装置
- 引言
- 痛点
- 功能
- 前期准备
- 软件
- 硬件
- 项目开发
- 硬件开发
- 软件开发
- 功能演示
- 更多精彩,欢迎关注
引言
本项目使用机智云Gokit2.0开发板,实现基于Arduino的环境监测装置,解决目前大多数人对环境数据要求逐渐增高的痛点。
痛点
- 环境数据可检测
- 温湿度可智能调控
- 人起床自动开灯
- 按下开关调控屋内设备
功能
- 当温度超过20°C后,风扇打开一档;当温度超过30°C后,风扇打开二档。温度低于20°C,风扇自动关闭。
- 实时检测温湿度传感器、红外人体检测传感器等数据,并通过串口发送出来进行数据显示。
- 红外人体检测传感器实时检测是否有人起床,有人则打开白灯。
- 按下按键一,打开白灯;按下按键二,打开风扇。
前期准备
软件
- Arduino IED
- 串口调试助手
硬件
机智云Gokit2.0开发板(Arduino)
项目开发
硬件开发
软件开发
-
首先申明引用的头文件
#include <Gizwits.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <DHT.h>
#include <ChainableLED.h>
#include <MsTimer2.h> -
根据电路图,定义温湿度传感器、按键1、按键2、RGB灯、红外传感器和电机的管脚。
#define Infrared_PIN 2 ///< 红外IO管脚
#define DHTPIN 3 ///< 温湿度IO管脚
#define MOTOR_PINA 4 ///< 电机IO管脚
#define MOTOR_PINB 5 ///< 电机IO管脚
#define KEY1 6 ///< 按键IO管脚
#define KEY2 7 ///< 按键IO管脚
//温湿度功能值定义
#define DHTTYPE DHT11
//电机功能值定义
#define MOTOR_MAX 100
#define MOTOR_MAX1 -100
#define MOTOR_MIN 0
#define MOTOR_16
DHT dht(DHTPIN, DHTTYPE);
ChainableLED leds(A5, A4, 1);
SoftwareSerial mySerial(0, 1); // A2 -> RX, A3 -> TX -
编写温湿度读取功能函数
void DHT11_Read_Data(unsigned char * temperature, unsigned char * humidity)
{
*temperature = (unsigned char)dht.readTemperature();
*humidity = (unsigned char)dht.readHumidity();
return;
} -
编写电机控制功能程序
void Motor_status(long motor_speed)
{
unsigned char Temp_motor_speed = 0;
if (motor_speed == 0) //停止
{
digitalWrite(MOTOR_PINA, LOW);
}
if (motor_speed > 0) //正转
{
Temp_motor_speed = (motor_speed - 0) * 51;
if (Temp_motor_speed > 255) Temp_motor_speed = 255;
digitalWrite(MOTOR_PINA, LOW);
analogWrite( MOTOR_PINB, Temp_motor_speed);
}
if (motor_speed < 0) //反转
{
Temp_motor_speed = 255 - (0 - motor_speed) * 51; //Temp_motor_speed = (255 ‐ (5 + motor_speed))* 51;
if (Temp_motor_speed > 255) Temp_motor_speed = 255;
digitalWrite(MOTOR_PINA, HIGH);
analogWrite( MOTOR_PINB, Temp_motor_speed );
}
} -
编写RGB灯功能程序
void LED_RGB_Control(byte red, byte green, byte blue)
{
leds.setColorRGB(0, red, green, blue);
} -
声明温湿度暂存变量
unsigned char temperature_buf=0;
unsigned char humidity_buf=0; -
在初始化程序中,定义串口波特率,初始化RGB,定义GPIO。
mySerial.begin(115200);
leds.init();
digitalWrite(A0, HIGH);//使能RGB LED
pinMode(KEY1, INPUT_PULLUP); //KEY1 上拉输入
pinMode(KEY2, INPUT_PULLUP); //KEY2 上拉输入
LED_RGB_Control(0,0,0); -
在主循环中,首先检测温湿度值,并将温湿度传感器的值进行显示。当温度超过20°C后,风扇打开一档;当温度超过30°C后,风扇打开二档。温度低于20°C,风扇自动关闭。
DHT11_Read_Data(&temperature_buf, &humidity_buf);
if(temperature_buf>20)
{
Motor_status(1);
}
else if(temperature_buf>30)
{
Motor_status(2);
}
else
{
Motor_status(0);
}
mySerial.println(“temperature:”);
mySerial.println(temperature_buf, DEC);
mySerial.println(“humidity:”);
mySerial.println(humidity_buf, DEC);
按下按键一,打开白灯;按下按键二,打开风扇。
if(digitalRead(KEY1) == LOW)
{
LED_RGB_Control(255,255,255);
mySerial.println(“open led!”);
}
else if(digitalRead(KEY2) == LOW)
{
Motor_status(1);
mySerial.println(“open fan!”);
} -
检测红外人体检测传感器是否有人,有人则打开白灯,没人则关闭。并通过串口发送出来。
if (digitalRead(Infrared_PIN))
{
mySerial.println(“No one appears and disappears!”);
LED_RGB_Control(0,0,0);
}
else
{
LED_RGB_Control(255,255,255);
mySerial.println(“Someone is appearing!”);
}
功能演示
更多精彩,欢迎关注
抖音号:《物联网知识》
公众号:《物联网知识》
B站:《跋扈洋》
CSDN:《跋扈洋》