聚丰项目 > 智能移动保湿器

智能移动保湿器

我们团队所设计的智能移动保湿器主要具有以下特点及优势: 1. 可以实时检测室内温湿度的变化并显示; 2. 该保湿器可根据检测到的室内湿度与设定值(该阈值可修改)进行比较,自动启动加湿操作并提示,相比以往的家用保湿器,实现了智能化,这是我们的一个创新点; 3. 该产品还具有移动避障等功能。而传统的保湿器基本上都是固定式的,这样只能在局部进行加湿,而对于室内整体的湿度上却没有改善,即容易造成局部湿度过高,且其它区域干燥无变化,因而,移动避障的设计克服了该缺点,具有更好的适应性,这也是我们的创新之处; 4. 二次开发性强,还可以集成多种功能。目前市场上暂无该类产品,所以可以增加类似扫地机器人的清扫功能,向家用服务机器人迈进一步。

愤怒者 愤怒者

分享
5 喜欢这个项目
团队介绍

愤怒者 愤怒者

团队成员

安华亮 学生

乔林军 学生

罗亚哲 学生

分享
项目简介
我们团队所设计的智能移动保湿器主要具有以下特点及优势: 1. 可以实时检测室内温湿度的变化并显示; 2. 该保湿器可根据检测到的室内湿度与设定值(该阈值可修改)进行比较,自动启动加湿操作并提示,相比以往的家用保湿器,实现了智能化,这是我们的一个创新点; 3. 该产品还具有移动避障等功能。而传统的保湿器基本上都是固定式的,这样只能在局部进行加湿,而对于室内整体的湿度上却没有改善,即容易造成局部湿度过高,且其它区域干燥无变化,因而,移动避障的设计克服了该缺点,具有更好的适应性,这也是我们的创新之处; 4. 二次开发性强,还可以集成多种功能。目前市场上暂无该类产品,所以可以增加类似扫地机器人的清扫功能,向家用服务机器人迈进一步。
硬件说明

主控制器:Arduino开发板,该开发板有数字、模拟输入输出接口以及支持I2C,串行等多种通讯模式,本次设计开发板由9V镍氢电池供电,采用I2C协议与温湿度传感器通讯,并通过数字模拟检测控制其余各模块。

环境检测传感器:IDT公司的SDAH01温湿度传感器,具有±1.5%的相对湿度 (RH) 精度误差,快速 RH 响应时间,0.01% RH的分辨率以及平均1.0μA的低功耗;

Mini空气加湿与继电器模块:专用微孔雾化片和振荡电路组成加湿模块,采用5V直流供电,为了保证驱动功率,由Arduino5V电源供电并由数字I/O给继电器信号从而实现对加湿模块的控制。

LCD1602显示屏:实时显示温湿度变化,并通过电位器调节背光亮度;

L298N驱动模块与直流电机:L298N模块可隔离控制部分与驱动电路,且L298N驱动能力远高于Arduino,驱动模块使用9V镍氢电池直接供电,Arduino只需输出PWM脉冲信号到L298N驱动模块中,从而实现对移动速度的无级调节,最终达到移动加湿,保持室内湿度均匀的目的。

红外与超声避障模块:在物体进入红外光电开关与超声测距模块的检测范围内时,可以输出数字(红外)与模拟信号(超声)到Arduino中,进行条件判断并输出相应的控制信号到电机驱动电路中,例如控制电机的转向,实现避障功能。

智能保湿器电路原理图.pdf


软件说明

本项目采用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;

  }

  


演示效果

智能保湿器图片.jpgHS300x系列温湿度检测传感器.jpgLCD屏显示.jpg振荡加湿.jpg湿度上升.jpg停止加湿.jpg移动避障加湿.jpg

附件

(0.16 MB)下载

评论区(1 )
  • 葬花佛: 您好,对您这边的项目很感兴趣,可以加微信聊聊吗?巩文洁,18222005391微信手机同号

    回复