聚丰项目 > 智能移动保湿器
我们团队所设计的智能移动保湿器主要具有以下特点及优势: 1. 可以实时检测室内温湿度的变化并显示; 2. 该保湿器可根据检测到的室内湿度与设定值(该阈值可修改)进行比较,自动启动加湿操作并提示,相比以往的家用保湿器,实现了智能化,这是我们的一个创新点; 3. 该产品还具有移动避障等功能。而传统的保湿器基本上都是固定式的,这样只能在局部进行加湿,而对于室内整体的湿度上却没有改善,即容易造成局部湿度过高,且其它区域干燥无变化,因而,移动避障的设计克服了该缺点,具有更好的适应性,这也是我们的创新之处; 4. 二次开发性强,还可以集成多种功能。目前市场上暂无该类产品,所以可以增加类似扫地机器人的清扫功能,向家用服务机器人迈进一步。
愤怒者
愤怒者
团队成员
安华亮 学生
乔林军 学生
罗亚哲 学生
主控制器:Arduino开发板,该开发板有数字、模拟输入输出接口以及支持I2C,串行等多种通讯模式,本次设计开发板由9V镍氢电池供电,采用I2C协议与温湿度传感器通讯,并通过数字模拟检测控制其余各模块。
环境检测传感器:IDT公司的SDAH01温湿度传感器,具有±1.5%的相对湿度 (RH) 精度误差,快速 RH 响应时间,0.01% RH的分辨率以及平均1.0μA的低功耗;
Mini空气加湿与继电器模块:专用微孔雾化片和振荡电路组成加湿模块,采用5V直流供电,为了保证驱动功率,由Arduino的5V电源供电并由数字I/O给继电器信号从而实现对加湿模块的控制。
LCD1602显示屏:实时显示温湿度变化,并通过电位器调节背光亮度;
L298N驱动模块与直流电机:L298N模块可隔离控制部分与驱动电路,且L298N驱动能力远高于Arduino,驱动模块使用9V镍氢电池直接供电,Arduino只需输出PWM脉冲信号到L298N驱动模块中,从而实现对移动速度的无级调节,最终达到移动加湿,保持室内湿度均匀的目的。
红外与超声避障模块:在物体进入红外光电开关与超声测距模块的检测范围内时,可以输出数字(红外)与模拟信号(超声)到Arduino中,进行条件判断并输出相应的控制信号到电机驱动电路中,例如控制电机的转向,实现避障功能。
本项目采用Arduino自带IDE进行编程,C语言编程;
程序运行流程:
1. 超声及红外避障检测;
2. 若障碍物进入避障范围内时,执行避障操作,停止并根据不同方位传感器的输入信号可进行停止,后退,左转或直接向左后方及右后方转向;
3. 同步进行温湿度检测及保湿操作,通过I2C协议读取传感器的温湿度值,并把该值通过LCD1602进行显示,同时把湿度值与预先设定的30%RH进行比较,若当前室内湿度值小于湿度值,则给继电器输出信号,启动振荡器进行加湿操作;
4. 程序结束,循环执行。
运行代码:
#include
#include
LiquidCrystal lcd(12, 11, 10, 13, 8, 7);//设置LCD1602接口
#define ADDRESS_HUMIDITY 0x44
//定义温湿度传感器高低位变量
byte humidity_high = 0;
byte humidity_low = 0;
byte tempature_high = 0;
byte tempature_low = 0;
int humidity_temp,tempature_temp;
double humidity,tempature;
//定义振荡加湿器控制输出
int humidifer=1;
//定义控制电机的PWM脉冲输出
int INA = 3;
int INB = 5;
int INC = 6;
int IND = 9;
//定义超声测距的控制接口
const int TrigPin = 2;
const int EchoPin = 4;
double distance;
//定义电机初始速度
int low_motor_speed=80;
int high_motor_speed=160;
int motor_speed=100;
//定义红外光电传感器输入接口
int left_infrared_detect=A0;
int right_infrared_detect=A1;
int left_infrared=0;
int right_infrared=0;
//程序初始化
void setup()
{
pinMode(INA,OUTPUT);
pinMode(INB,OUTPUT);
pinMode(INC,OUTPUT);
pinMode(IND,OUTPUT);
pinMode(humidifer,OUTPUT);
pinMode(TrigPin, OUTPUT);
// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
pinMode(EchoPin, INPUT);
Wire.begin();
lcd.begin(16,2);
lcd.clear(); //清屏
delay(500); //延时1000ms
}
void loop()
{
//超声传感器检测
// 产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// 检测脉冲宽度,并计算出距离
//delayMicroseconds(2);
distance = pulseIn(EchoPin, HIGH) / 58.00;
//检测到避障传感器输入,进行避障动作
if(infrared())
{
stopmove();
if(left_infrared<100&&right_infrared>900)
{
negative_left();
delay(500);
}
else if(left_infrared>900&&right_infrared<100)
{
negative_right();
delay(500);
}
else
{
negative();
delay(1000);
left();
delay(500);
}
}
else if(distance<12)
{
negative();
delay(500);
left();
delay(500);
}
else
positive();
//调用温湿度检测显示函数
HUMIDITY();
}
void positive()//前进
{
digitalWrite(INA,LOW);
analogWrite(INB,motor_speed);
analogWrite(INC,motor_speed);
digitalWrite(IND,LOW);
}
void negative()//后退
{
analogWrite(INA,motor_speed);
digitalWrite(INB,LOW);
digitalWrite(INC,LOW);
analogWrite(IND,motor_speed);
}
void right()//右转
{
digitalWrite(INA,LOW);
analogWrite(INB,motor_speed);
digitalWrite(INC,LOW);
digitalWrite(IND,LOW);
}
void left()//左转
{
digitalWrite(INA,LOW);
digitalWrite(INB,LOW);
analogWrite(INC,motor_speed);
digitalWrite(IND,LOW);
}
void stopmove()//停止
{
digitalWrite(INA,LOW);
digitalWrite(INB,LOW);
digitalWrite(INC,LOW);
digitalWrite(IND,LOW);
}
void negative_left()//向左后方倒退
{
analogWrite(INA,low_motor_speed);
digitalWrite(INB,LOW);
digitalWrite(INC,LOW);
analogWrite(IND,high_motor_speed);
}
void negative_right()//向右后方倒退
{
analogWrite(INA,high_motor_speed);
digitalWrite(INB,LOW);
digitalWrite(INC,LOW);
analogWrite(IND,low_motor_speed);
}
void HUMIDITY()//温湿度检测
{
//HS300x传感器与Arduino通过I2C协议通讯
Wire.beginTransmission(ADDRESS_HUMIDITY);
Wire.endTransmission();
delay(200);
Wire.requestFrom(ADDRESS_HUMIDITY,20);
humidity_high = Wire.read();
humidity_low = Wire.read();
tempature_high = Wire.read();
tempature_low = Wire.read();
//数据转换
humidity_temp=((humidity_high<<8)|humidity_low)&0x3fff;
tempature_temp=((tempature_high<<6)|tempature_low>>2)&0xfffc;
humidity=humidity_temp/(pow(2,14)-1)*100.0*10;
tempature=(tempature_temp/(pow(2,14)-1)*165-40)*10;
//LCD1602屏显示温湿度
lcd.setCursor(0, 0) ; //设置光标位置为第1行第1个位置
lcd.print("IDT Humi=");
lcd.print((int)humidity/10);//显示整数部分
lcd.print(".");
lcd.print((int)humidity%10);//显示小数部分
lcd.print("%RH");
lcd.setCursor(0, 1) ;
lcd.print("IDT Temp=");
lcd.print((int)tempature/10);//显示整数部分
lcd.print(".");
lcd.print((int)tempature%10);//显示小数部分
lcd.print((char)223);
lcd.print("C");
if(humidity<300)
digitalWrite(humidifer,LOW);
else
digitalWrite(humidifer,HIGH);
}
int infrared()//红外光电检测
{
left_infrared=analogRead(left_infrared_detect);
right_infrared=analogRead(right_infrared_detect);
if(left_infrared<100||right_infrared<100)
return 1;
else
return 0;
}
(0.16 MB)下载
葬花佛: 您好,对您这边的项目很感兴趣,可以加微信聊聊吗?巩文洁,18222005391微信手机同号
回复