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