Phần mềm arduino 1.6.7

Một phần của tài liệu Điều khiển và giám sát vườn rau thông minh tiêu chuẩn vietgap bằng arduino và sim900 (Trang 57)

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); } } }

Một phần của tài liệu Điều khiển và giám sát vườn rau thông minh tiêu chuẩn vietgap bằng arduino và sim900 (Trang 57)

Tải bản đầy đủ (PDF)

(76 trang)