4. Đề nghị cho bảo vệ hay không?
5.2 Phần mềm arduino 1.6.7
Arduino IDE là phần mềm lập trình cho Arduino. Môi trường lập trình cho Arduino IDE có thể chạy trên 3 nền tảng phổ biến nhất hiện nay là Windows, OS và Linux. Do có tính chất nguồn mở nên ngôn ngữ lập trình có thể được mở rộng qua các thư viện C++.
44
CHƯƠNG 6:
LƯU ĐỒ GIẢI THUẬT
6.1 Lưu đồ giải thuật khối chương trình chính
Hình 6.1: Sơ đồ khối chương trình chính
Bắt đầu Bơm vào bồn Bật đèn Quạt gió Bơm 1 Bơm 2 Phun sương Kết thúc
45
6.2 Lưu đồ giải thuật của các cảm biến
`
Sai
Đúng
Sai
Đúng
Hình 6.2: Sơ đồ khối cảm biến cảm biến đo mức nước
Bắt đầu Cảm biến đo khoảng cách Không bơm nước được
Nhắn tin cho chủ vườn
46
Sai
Đúng
Hình 6.3: Sơ đồ khối cảm biến đo độ ẩm đất, cảm biến ánh sáng Cảm biến đo
độ ẩm đất
Bơm nước
Kết thúc Bắt đầu
47
Đúng Sai Sai Đúng
Hình 6.4: Sơ đồ khối cảm biến đo nhiệt độ, độ ẩm không khí Cảm biến độ
ẩm không khí
Quạt cấp, quạt thải hoạt đông
Kết thúc Bắt đầu
Cảm biến độ ẩm không khí
Quạt cấp, quạt thải hoạt đông
48 CHƯƠNG 7: KẾT LUẬN VÀ KIẾN NGHỊ 7.1 Kết luận: Những hạng mục đã đạt được: Mô hình hoàn tất
Hoàn thành kết nối các cảm biến với Arduino
Hoàn thành cảnh báo thông qua SMS
Kỹ năng làm việc nhóm.
Những hạng mục chưa đạt được:
Mô hình chưa hoàn chỉnh như mong muốn
Chưa viết được chương trình giao tiếp hoàn chỉnh cho mô hình
7.2 Kiến nghị
Có thể phát triển mô hình theo hướng sử dụng pin năng lượng mặt trời để mô hình
hoạt động đôc lập mà không cần phụ thuộc vào nguồn 220V.
Liên hệ với các công ty trong lĩnh vực điều khiển thông minh.
49
TÀI LIỆU THAM KHẢO
[1] Giáo trình Đo lường và cảm biến, Thầy Lê Chí Kiên, NXB Đại Học Sư Phạm Kỹ Thuật TP.HCM
[2] Lịch sử phát triển Arduino “ wikipedia.com /arduino-mega” Ngoài ra tài liệu được tham khảo từ các nguồn trên internet: Datasheet arduino mega 2560 PDF
Diễn đàn điện tử Việt Nam
http: www.dientuvietnam.net
Diễn đàn Arduino Việt Nam và quốc tế www.Arduino.vn
www.arduino.cc Tiêu chuẩn VietGAP www.vietgap.gov.vn
các trang web chuyên về nhà kính www.nhakinh.vn
50
PHỤ LỤC
CHƯƠNG TRÌNH CODE CỦA ARDUINO
#include "SIM900.h" // sim900 #include <SoftwareSerial.h> //sim900 #include "sms.h" //sim900
#include <Wire.h> //BH1750 IIC Mode #include <math.h>
int BH1750address = 0x23; //setting i2c address
#define DHT11_PIN 0 // khai bao chan analog cam bien nhiet do, do am khong khi #define analogdoamdat1 1 // khai bao chan analog cam bien do do am 1
#define analogdoamdat2 2 // khai bao chan analog cam bien do do am 2
SoftwareSerial SIM900(2, 3); // CHÂN TX NỐI VỚI CHÂN 3, CHÂN RX NỐI VỚI CHÂN 4
String textSMS="BOM NUOC KHONG LEN";//NÔI DUNG GỬI char tempchar;
const int trig = 7; // chân trig của HC-SR04 const int echo = 8; // chân echo của HC-SR04 const int in01Pin = 22; //bomvaobon
const int in02Pin = 24;
const int in11Pin = 26; //bom1 const int in12Pin = 28;
const int in21Pin = 30; //bom2 const int in22Pin = 32;
51 const int phunsuong = 31; //phun suong
const int quat = 33; //quat const int den = 35; //den
byte buff[2]; // anh sang void setup()
{
DDRC |= _BV(DHT11_PIN); // nhiet do do am PORTC |= _BV(DHT11_PIN); // nhiet do do am Wire.begin();// dung cho cam bien anh sang
Serial.begin(9600); // giao tiếp Serial với baudrate 9600 SIM900.begin(115200);
pinMode(trig,OUTPUT); // chân trig sẽ phát tín hiệu pinMode(echo,INPUT); // chân echo sẽ nhận tín hiệu pinMode(13,OUTPUT); pinMode(in11Pin,OUTPUT); pinMode(in12Pin,OUTPUT); pinMode(in21Pin,OUTPUT); pinMode(in22Pin,OUTPUT); pinMode(phunsuong,OUTPUT); pinMode(quat,OUTPUT); pinMode(den,OUTPUT); }
int distance() // cam bien do muc nuoc {
52 int distance; // biến lưu khoảng cách unsigned long duration; // biến đo thời gian /* Phát xung từ chân trig */
digitalWrite(trig,0); // tắt chân trig delayMicroseconds(2);
digitalWrite(trig,1); // phát xung từ chân trig
delayMicroseconds(5); // xung có độ dài 5 microSeconds digitalWrite(trig,0); // tắt chân trig
/* Tính toán thời gian */
// Đo độ rộng xung HIGH ở chân echo. duration = pulseIn(echo,HIGH); // Tính khoảng cách đến vật. distance = int(duration/2/29.412); return distance;
}
int doamdat1() //cam bien do do am 1 {
int doamdat1 = analogRead(analogdoamdat1);
doamdat1 = map(doamdat1,0,1024,0,100);// chuyen do am dat ve thang 100% delay(1000);
return doamdat1;
}
53 {
int doamdat2 = analogRead(analogdoamdat1); doamdat2 = map(doamdat2,0,1024,0,100); delay(1000);
return doamdat2; }
byte read_dht11_dat() // nhietdodoam {
byte i = 0; byte result=0; for(i=0; i< 8; i++) {
while(!(PINC & _BV(DHT11_PIN))); // wait for 50us delayMicroseconds(30);
if(PINC & _BV(DHT11_PIN)) result |=(1<<(7-i));
while((PINC & _BV(DHT11_PIN))); // wait '1' finish } return result; } void loop() { bomvaobon();
54 bom1();
bom2();
quatgiohoinuoc(); batden();
delay(600000);// cho 10s roi lap lai }
void bomvaobon() // bom tu gieng len { if((distance())<=10) { digitalWrite(in01Pin,HIGH); digitalWrite(in02Pin,LOW); } if((distance())>=20) { digitalWrite(in01Pin,LOW); digitalWrite(in02Pin,LOW); } delay(100000);
if(((distance())<=9) && (((distance())<=12))) {
delay(20);
sendSMS(textSMS);//GỬI TÍN HIÊU SMS delay(3000);
55 }
void bom1() // bom den chau co cam bien 1 { if((doamdat1())<=40) { digitalWrite(in11Pin,HIGH); digitalWrite(in12Pin,LOW); } if((doamdat1())>=60) { digitalWrite(in11Pin,LOW); digitalWrite(in12Pin,LOW); } }
void bom2() // bom den chau co cam bien 2 { if((doamdat2())<=40) { digitalWrite(in21Pin,HIGH); digitalWrite(in22Pin,LOW); } if((doamdat2())>=60) { digitalWrite(in21Pin,LOW); digitalWrite(in22Pin,LOW);
56 } } void quatgiohoinuoc() { byte dht11_dat[5]; byte dht11_in;
byte i;// start condition
// 1. pull-down i/o pin from 18ms PORTC &= ~_BV(DHT11_PIN); delay(18); PORTC |= _BV(DHT11_PIN); delayMicroseconds(40); DDRC &= ~_BV(DHT11_PIN); delayMicroseconds(40);
dht11_in = PINC & _BV(DHT11_PIN); if(dht11_in)
{
Serial.println("dht11 start condition 1 not met"); return;
}
delayMicroseconds(80);
dht11_in = PINC & _BV(DHT11_PIN); if(!dht11_in)
57 Serial.println("dht11 start condition 2 not met"); return;
}
delayMicroseconds(80);// now ready for data reception for (i=0; i<5; i++)
dht11_dat[i] = read_dht11_dat(); DDRC |= _BV(DHT11_PIN); PORTC |= _BV(DHT11_PIN);
byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// check check_sum
if(dht11_dat[4]!= dht11_check_sum) {
Serial.println("DHT11 checksum error"); }
if((dht11_dat[0])<=50) {
digitalWrite(phunsuong,HIGH);// bat phun suong }
if((dht11_dat[0])>=70) {
digitalWrite(phunsuong,LOW);// tat phun suong }
if((dht11_dat[2])>=45) {
58
digitalWrite(quat,HIGH);// bat quat giam nhiet trong nha kinh }
if((dht11_dat[2])<=30) {
digitalWrite(quat,LOW);// tat quat } delay(2000); } void batden() { int i; uint16_t val=0; BH1750_Init(BH1750address); delay(200); if(2==BH1750_Read(BH1750address)) { val=((buff[0]<<8)|buff[1])/1.2; if(val <= 4) {
digitalWrite(den,HIGH);// bat den }
if(val >= 5) {
59 digitalWrite(den,LOW);// tat den
} }
delay(150); }
int BH1750_Read(int address) // { int i=0; Wire.beginTransmission(address); Wire.requestFrom(address, 2); while(Wire.available()) // {
buff[i] = Wire.read(); // receive one byte i++;
}
Wire.endTransmission(); return i;
}
void BH1750_Init(int address) {
Wire.beginTransmission(address); Wire.write(0x10);//1lx reolution 120ms Wire.endTransmission();
60 void sendSMS(String message)
{
SIM900.print("AT+CSCS=\"GSM\"\r\n"); // Lệnh AT để gửi in nhắn SMS SIM900_response(500);
SIM900.print("AT+CMGF=1\r\n"); // Bắt đầu quá trình gửi tin nhắn SIM900_response(500);
SIM900.print("AT+CMGS=\"+841676079836\"\r"); // Số điên thoại của người nhân theo format quốc tế
SIM900_response(500);
SIM900.print(message); // gửi nội dung tin nhắn SIM900_response(500);
SIM900.print((char)26); // Kết thúc lênh gửi SIM900_response(5000);
}
void SIM900_response(int time) {
int tnow = millis();
while ((millis()-tnow) < time){ if (SIM900.available()){ tempchar = (char)SIM900.read(); if (tempchar == '\r'){ Serial.print("/R/"); } else if (tempchar == '\n'){ Serial.println("/N/");
61 } else Serial.print(tempchar); } } }