聚豐項目 > 智能移動保濕器
我們團隊所設計的智能移動保濕器主要具有以下特點及優勢: 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微信手機同號
回復