ESP8266 - Arduino (Lúc sử dụng)
VCC – 3.3V (Nguồn ngoài) , GND – GND , RST – X , CH_PD – 3.3V (Nguồn ngoài) , TXD – RXD , RXD – TDX , GPIO0 – X , GPIO2 – X .
DHT11 – Arduino (Cảm biến nhiệt độ - độ ẩm)
VCC – 5V , GND – GND , DOut – D2 .
MQ-2 – Arduino (Cảm biến khói – khí gas)
VCC – 5V , GND – GND , DOut = 4 , AOut = A1 .
Flame Sensor – Arduino (Cảm biến phát hiện lửa)
VCC – 5V GND – GND DOut = 3; AOut = A0;
3.5.1 Giới thiệu về ngôn ngữ lập trình cho Arduino
Có thể bạn đã quen lập trình trên PC, với những ngôn ngữ như C, C++, C#, Java, Python, Ruby…Nhưng bạn có biết là phần mềm trên PC chỉ chiếm khoảng 10% sản lượng phần mềm trên thị trường. 90% còn lại là code điều khiển tivi, máy giặt, điều hòa, tủ lạnh… tóm lại là tất cả các thiết bị điện tử xung quanh bạn. Đây cũng là một mảng theo tôi là khá thú vị. Lập trình theo hướng này được gọi là embedded computing, hay physical computing, tức là lập trình để con người tương tác với các thiết bị thực.
Để người thiết kế có thể nhanh chóng đưa ra được mẫu thể hiện ý tưởng của mình, rất cần phải có những platform để dễ dàng prototyping. Và một trong những platform đang được sử dụng rất nhiều trong prototyping là Arduino.
Arduino là một bo mạch xử lý được dùng để lập trình tương tác với các thiết bị phần cứng như cảm biến, động cơ,… Điểm hấp dẫn ở Arduino với anh em lập trình là ngôn ngữ cực kì dễ học (giống C/C++), các ngoại vi trên bo mạch đều đã được chuẩn hóa, nên không cần biết nhiều về điện tử, chúng ta cũng có thể lập trình được những ứng dụng thú vị. Thêm nữa, vì Arduino là một platform đã được chuẩn hóa, nên đã có rất nhiều các bo mạch mở rộng (gọi là shield) để cắm chồng lên bo mạch Arduino, có thể hình dung nôm na là “library” của các ngôn ngữ lập trình. Ví dụ, muốn kết nối Internet thì có Ethernet shield, muốn điều khiển động cơ thì có Motor shield, muốn kết nối nhận tin nhắn thì có GSM shield,… Rất đơn giản, và ta chỉ phải tập trung vào việc “lắp ghép” các thành phần này và sáng tạo ra các ứng dụng cần thiết
Sau đây em xin giới thiệu tập lệnh của Arduino :
Cấu trúc
Setup() Loop() Cấu trúc điều khiển
If , if...else , switch / case , for , while , break , continue , return , goto . Cú pháp mở rộng
; (dấu chấm phẩy) , {} (dấu ngoặc nhọn) , // (single line comment) , /* */ (multi- line comment) , #define , #include .
Toán tử số học
= (phép gán) , + (phép cộng) , - (phép trừ) , * (phép nhân) , / (phép chia) , % (phép chia lấy dư) .
Toán tử so sánh
== (so sánh bằng) , != (khác bằng) , > (lớn hơn) , < (bé hơn) , >= (lớn hơn hoặc bằng) , <= (bé hơn hoặc bằng) .
Toán tử logic
&& (và) , || (hoặc) , ! (phủ định) , ^ (loại trừ) . Phép toán hợp nhất
++ (cộng thêm 1 đơn vị) , -- (trừ đi 1 đơn vị) , += (phép rút gọn của phép cộng) , -= (phép rút gọn của phép trừ) , *= (phép rút gọn của phép nhân) , /= (phép rút gọn của phép chia) .
Gía trị
Hằng số
HIGH | LOW , INPUT | INPUT_PULLUP | OUTPUT , LED_BUILTIN , true | false , hằng số nguyên (integer constants) , hằng số thực (floating point constants) .
unsigned long , short , float , double , array , string (chuỗi kí tự biểu diễn bằng array) , String (object) .
Chuyển đổi kiểu dữ liệu
Char() , byte() , int() , word() , long() , float() . Phạm vi của biến và phân loại
Phạm vi hiệu lực của biến
Static - biến tĩnh , const - biến hằng , volatile . Hàm hỗ trợ
Sizeof()
Hàm và Thủ tục
Nhập xuất Digital (Digital I/O)
PinMode() , digitalWrite() , digitalRead() . Nhập xuất Analog (Analog I/O)
AnalogReference() , analogRead() , analogWrite() - PWM - PPM . Hàm thời gian
Millis() , micros() , delay() , delayMicroseconds() . Hàm toán học
Min() , max() , abs() , map() , pow() , sqrt() , sq() , isnan() , constrain() ,exp(x) , frexp(x, , int *exp) , ldexp(x, int exp) , log(x) , log10(x) , modf(x, *i) , ceil(x) , floor(x) , atoi(a[]) .
Cos() , sin() , tan() , asin(x) , acos(x) , atan(x) , atan2(x, y) , cosh(x) , sinh(x) , tanh(x) .
Sinh số ngẫu nhiên
RandomSeed() , random() Nhập xuất nâng cao (Advanced I/O)
Tone() , noTone() , shiftOut() , shiftIn() , pulseIn() . Xử lý chuỗi
IsAscii() , isWhitespace() , isAlpha() , isAlphaNumeric() , isControl() , isDigit() , isGraph() , isLowerCase() , isPrintable() , isPunct() , isSpace() , isUpperCase() , isHexadecimalDigit() , tolower() , toupper()
Bits và Bytes
LowByte() , highByte() , bitRead() , bitWrite() , bitSet() , bitClear() , bit() . Ngắt (interrupt)
AttachInterrupt() , detachInterrupt() , interrupts() , noInterrupts() . Giao tiếp
Serial .
3.5.2 Phần mềm lập trình bo mạch Arduino 1.8.2
Arduino cung cấp đến môi trường lập trình tích hợp mã nguồn mở hỗ trợ người dùng viết code và tải nó lên bo mạch Arduino. Đây là môi trường đa nền tảng, hỗ trợ một loạt các bo mạch Arduino cùng rất nhiều tính năng độc đáo. Ứng dụng lập trình này có giao diện được sắp xếp hợp lý, phù hợp với cả những người dùng chuyên nghiệp lẫn không chuyên.
Hỗ trợ nhiều loại bo mạch Giao diện sắp xếp hợp lý Bộ sưu tập các mẫu ví dụ
Mảng thư viện hỗ trợ phong phú
3.5.3 Chương trình cho mạch thu phát wifi ESP8266 V1
Báo cháy
#include <ESP8266WiFi.h> #include <FirebaseArduino.h>
#define FIREBASE_HOST "hethongbaochaytudong-5fa82.firebaseio.com" //Link sererver firebase
#define FIREBASE_AUTH ""
#define WIFI_SSID "Thien Ly"//nhập tên wifi của bạn #define WIFI_PASSWORD "0977500369"//pass wifi String serialResponse = ""; int giaTri[5] = {0, 0, 0, 1, 0}; float doAmCanhBao = 0; float khiGasCanhBao = 0; float nhietDoCanhBao = 0; String baoDong = ""; char sz[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; void setup() {
Serial.begin(112500);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(); Serial.print("connected: "); Serial.println(WiFi.localIP()); Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); } void loop() { if ( Serial.available() > 0) { serialResponse = Serial.readStringUntil('\r\n'); // Convert from String Object to String.
char buf[sizeof(sz)];
serialResponse.toCharArray(buf, sizeof(buf)); char *p = buf;
char *str;
String giaTriTam = str; giaTri[i] = giaTriTam.toInt(); delay(200); } } Firebase.setFloat("doAm", giaTri[0]); Firebase.setFloat("khiGas", giaTri[1]); Firebase.setFloat("nhietDo", giaTri[2]); Firebase.setFloat("flameState", giaTri[3]); if (Firebase.failed()) {
Serial.print("setting /number failed:"); Serial.println(Firebase.error()); return; } delay(1000); doAmCanhBao = Firebase.getFloat("doAmCanhBao"); nhietDoCanhBao = Firebase.getFloat("nhietDoCanhBao"); khiGasCanhBao = Firebase.getFloat("khiGasCanhBao"); baoDong = Firebase.getString("canhBao"); Serial.print(doAmCanhBao);
Serial.print("#"); Serial.print(nhietDoCanhBao); Serial.print("#"); Serial.print(khiGasCanhBao); Serial.print("#"); if (baoDong == "bat") { Serial.print("1"); } else { Serial.print("0"); } Serial.println(""); delay(1000); }
3.5.4 Chương trình cho Arduino Nano
Báo cháy Arduino
#include "DHT.h" const int DHTPIN = 2;
const int DHTTYPE = DHT11; int flame_din = 3;
int flame_ain = A0; int gas_din = 4;
DHT dht(DHTPIN, DHTTYPE); int gasValue; int flameState = 1; char sz[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; String serialResponse = ""; float doAmCanhBao = 0; float khiGasCanhBao = 0; float nhietDoCanhBao = 0; int baoDongState; int giaTri[4] = {0, 0, 0, 0}; unsigned long time1 = 0; int coi = 12; void setup() { Serial.begin(112500); pinMode(flame_din, INPUT); pinMode(flame_ain, INPUT); pinMode(gas_din, INPUT); pinMode(gas_ain, INPUT); pinMode(coi, OUTPUT); dht.begin();
}
void loop() {
if ( Serial.available() > 0) {
serialResponse = Serial.readStringUntil('\r\n'); // Convert from String Object to String.
char buf[sizeof(sz)];
serialResponse.toCharArray(buf, sizeof(buf)); char *p = buf;
char *str;
for (int i = 0; i <= 3; i++) { str = strtok_r(p, "#", &p); String giaTriTam = str; giaTri[i] = giaTriTam.toInt(); } } doAmCanhBao = giaTri[0]; nhietDoCanhBao = giaTri[1]; khiGasCanhBao = giaTri[2]; baoDongState = giaTri[3]; delay(1000); float h = dht.readHumidity();
flameState = digitalRead(flame_din); gasValue = analogRead(gas_ain); if (baoDongState == 1) { if (h >= doAmCanhBao) { baoDong(); } if (t >= nhietDoCanhBao) { baoDong(); } if (gasValue >= khiGasCanhBao) { baoDong(); } if (flameState == 0) { baoDong(); } }
if ( (unsigned long) (millis() - time1) > 5000 ) {
Serial.print(h); Serial.print("#");
Serial.print(gasValue); Serial.print("#"); Serial.print(t); Serial.print("#"); Serial.print(flameState); Serial.println(""); time1 = millis(); } } void baoDong() { digitalWrite(coi, HIGH); delay(100); digitalWrite(coi, LOW); delay(100); digitalWrite(coi, HIGH); delay(100); digitalWrite(coi, LOW); delay(100); digitalWrite(coi, HIGH); delay(100); digitalWrite(coi, LOW);
digitalWrite(coi, HIGH); delay(100);
digitalWrite(coi, LOW); delay(100);
KẾT LUẬN
Sau khi hoàn thành đồ án tốt nghiệp của mình em nhận thấy mình đã làm được cơ bản yêu cầu đồ án đó là hệ thống báo cháy làm việc ổn định , có ứng dụng trong cuộc sống , giúp ích được nhiều trong quá trình phòng cháy chữa cháy của xã hội cũng như trong quá trình làm việc sản xuất . Nhưng cũng tồn tại nhiều nhược điểm mà em chưa tể khắc phục được do kiến thức hạn hẹp của bản thân .
Em thấy rằng sau quá trình lên kế hoạch , triển khai và hoàn thành đồ án bản thân mình đã trưởng thành hơn trong cách làm việc , tìm kiếm thông tin cũng như áp dụng những kiến thức đã học vào đồ án tốt nghiệp của mình cũng như trong công việc và cuộc sống sau này .
Em xin chân thành cảm ơn cô Phạm Thị Thanh Loan và các quý thầy cô trong khoa Cơ Điện đã giúp đỡ em rất nhiều để hoàn thành đồ án một cách tốt nhất có thể . Trong quá trình là đồ án em còn nhiều thiếu sót mong quý thầy cô trong khoa góp ý và giúp đỡ để em có thể tốt hơn . Em xin chân thành cảm ơn !
Trong đồ án tốt nghiệp này em đã tìm hiểu và tham khảo trên mang là chủ yếu , sau đây em xin liệt kê ra một số nguồn tài liệu mà em tham khảo chủ yếu :
1 Trang web console.firebase.google.com
2 Cộng đồng ARDUINO Việt Nam (arduino.vn) 3 Wikipedia.org
4 Cuốn lập trình Android của Ths. Trương Thị Ngọc Phượng
5 Cuốn The C++ Programming Language, 4th Edition tác giả Stroustrup
6 Trang web mualinhkien.vn 7 Trang web tailieu.vn
PHỤ LỤC