聚豐項(xiàng)目 > 智能移動保濕器
我們團(tuán)隊(duì)所設(shè)計的智能移動保濕器主要具有以下特點(diǎn)及優(yōu)勢: 1. 可以實(shí)時檢測室內(nèi)溫濕度的變化并顯示; 2. 該保濕器可根據(jù)檢測到的室內(nèi)濕度與設(shè)定值(該閾值可修改)進(jìn)行比較,自動啟動加濕操作并提示,相比以往的家用保濕器,實(shí)現(xiàn)了智能化,這是我們的一個創(chuàng)新點(diǎn); 3. 該產(chǎn)品還具有移動避障等功能。而傳統(tǒng)的保濕器基本上都是固定式的,這樣只能在局部進(jìn)行加濕,而對于室內(nèi)整體的濕度上卻沒有改善,即容易造成局部濕度過高,且其它區(qū)域干燥無變化,因而,移動避障的設(shè)計克服了該缺點(diǎn),具有更好的適應(yīng)性,這也是我們的創(chuàng)新之處; 4. 二次開發(fā)性強(qiáng),還可以集成多種功能。目前市場上暫無該類產(chǎn)品,所以可以增加類似掃地機(jī)器人的清掃功能,向家用服務(wù)機(jī)器人邁進(jìn)一步。
憤怒者
分享憤怒者
團(tuán)隊(duì)成員
安華亮 學(xué)生
喬林軍 學(xué)生
羅亞哲 學(xué)生
主控制器:Arduino開發(fā)板,該開發(fā)板有數(shù)字、模擬輸入輸出接口以及支持I2C,串行等多種通訊模式,本次設(shè)計開發(fā)板由9V鎳氫電池供電,采用I2C協(xié)議與溫濕度傳感器通訊,并通過數(shù)字模擬檢測控制其余各模塊。
環(huán)境檢測傳感器:IDT公司的SDAH01溫濕度傳感器,具有±1.5%的相對濕度 (RH) 精度誤差,快速 RH 響應(yīng)時間,0.01% RH的分辨率以及平均1.0μA的低功耗;
Mini空氣加濕與繼電器模塊:專用微孔霧化片和振蕩電路組成加濕模塊,采用5V直流供電,為了保證驅(qū)動功率,由Arduino的5V電源供電并由數(shù)字I/O給繼電器信號從而實(shí)現(xiàn)對加濕模塊的控制。
LCD1602顯示屏:實(shí)時顯示溫濕度變化,并通過電位器調(diào)節(jié)背光亮度;
L298N驅(qū)動模塊與直流電機(jī):L298N模塊可隔離控制部分與驅(qū)動電路,且L298N驅(qū)動能力遠(yuǎn)高于Arduino,驅(qū)動模塊使用9V鎳氫電池直接供電,Arduino只需輸出PWM脈沖信號到L298N驅(qū)動模塊中,從而實(shí)現(xiàn)對移動速度的無級調(diào)節(jié),最終達(dá)到移動加濕,保持室內(nèi)濕度均勻的目的。
紅外與超聲避障模塊:在物體進(jìn)入紅外光電開關(guān)與超聲測距模塊的檢測范圍內(nèi)時,可以輸出數(shù)字(紅外)與模擬信號(超聲)到Arduino中,進(jìn)行條件判斷并輸出相應(yīng)的控制信號到電機(jī)驅(qū)動電路中,例如控制電機(jī)的轉(zhuǎn)向,實(shí)現(xiàn)避障功能。
本項(xiàng)目采用Arduino自帶IDE進(jìn)行編程,C語言編程;
程序運(yùn)行流程:
1. 超聲及紅外避障檢測;
2. 若障礙物進(jìn)入避障范圍內(nèi)時,執(zhí)行避障操作,停止并根據(jù)不同方位傳感器的輸入信號可進(jìn)行停止,后退,左轉(zhuǎn)或直接向左后方及右后方轉(zhuǎn)向;
3. 同步進(jìn)行溫濕度檢測及保濕操作,通過I2C協(xié)議讀取傳感器的溫濕度值,并把該值通過LCD1602進(jìn)行顯示,同時把濕度值與預(yù)先設(shè)定的30%RH進(jìn)行比較,若當(dāng)前室內(nèi)濕度值小于濕度值,則給繼電器輸出信號,啟動振蕩器進(jìn)行加濕操作;
4. 程序結(jié)束,循環(huán)執(zhí)行。
運(yùn)行代碼:
#include
#include
LiquidCrystal lcd(12, 11, 10, 13, 8, 7);//設(shè)置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;
//定義控制電機(jī)的PWM脈沖輸出
int INA = 3;
int INB = 5;
int INC = 6;
int IND = 9;
//定義超聲測距的控制接口
const int TrigPin = 2;
const int EchoPin = 4;
double distance;
//定義電機(jī)初始速度
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);
// 要檢測引腳上輸入的脈沖寬度,需要先設(shè)置為輸入狀態(tài)
pinMode(EchoPin, INPUT);
Wire.begin();
lcd.begin(16,2);
lcd.clear(); //清屏
delay(500); //延時1000ms
}
void loop()
{
//超聲傳感器檢測
// 產(chǎn)生一個10us的高脈沖去觸發(fā)TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// 檢測脈沖寬度,并計算出距離
//delayMicroseconds(2);
distance = pulseIn(EchoPin, HIGH) / 58.00;
//檢測到避障傳感器輸入,進(jìn)行避障動作
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();
//調(diào)用溫濕度檢測顯示函數(shù)
HUMIDITY();
}
void positive()//前進(jìn)
{
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()//右轉(zhuǎn)
{
digitalWrite(INA,LOW);
analogWrite(INB,motor_speed);
digitalWrite(INC,LOW);
digitalWrite(IND,LOW);
}
void left()//左轉(zhuǎn)
{
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協(xié)議通訊
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();
//數(shù)據(jù)轉(zhuǎn)換
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) ; //設(shè)置光標(biāo)位置為第1行第1個位置
lcd.print("IDT Humi=");
lcd.print((int)humidity/10);//顯示整數(shù)部分
lcd.print(".");
lcd.print((int)humidity%10);//顯示小數(shù)部分
lcd.print("%RH");
lcd.setCursor(0, 1) ;
lcd.print("IDT Temp=");
lcd.print((int)tempature/10);//顯示整數(shù)部分
lcd.print(".");
lcd.print((int)tempature%10);//顯示小數(shù)部分
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)下載
葬花佛: 您好,對您這邊的項(xiàng)目很感興趣,可以加微信聊聊嗎?鞏文潔,18222005391微信手機(jī)同號
回復(fù)