.2 Lưu Đồ Dịng Tín Hiệu Cho Arduino

Một phần của tài liệu Ứng dụng board mạch raspberry PI 3B + điều khiển thiết bị gia dụng ( Smart home) (Trang 61)

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

50 4.6. Code cho Host

Chương trình trên raspberry pi b+ /**

@file main.cpp

@author Volodymyr Shymanskyy

@license This project is released under the MIT License (MIT) @copyright Copyright (c) 2015 Volodymyr Shymanskyy

@date Mar 2015 @brief

*/

//#define BLYNK_DEBUG #define BLYNK_PRINT stdout #ifdef RASPBERRY #include <BlynkApiWiringPi.h> #else #include <BlynkApiLinux.h> #endif #include <BlynkSocket.h> #include <BlynkOptionsParser.h> #include <stdio.h> #include <string.h> #include <errno.h> #include <wiringPi.h> #include <wiringSerial.h> int fd ; int count; int pin;

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

51 int val;

int id;

static BlynkTransportSocket _blynkTransport; BlynkSocket Blynk(_blynkTransport);

static const char *auth, *serv; static uint16_t port;

#include <BlynkWidgets.h> BlynkTimer tmr; BLYNK_CONNECTED() { Blynk.syncAll(); } BLYNK_WRITE_DEFAULT() { printf ("V%d ", request.pin) ;

serialPrintf(fd, "H0%02lu", request.pin); if(request.pin % 8 < 2){

for (auto i = param.begin(); i < param.end(); ++i) { int temp = 255 - param.asInt();

if(temp > 255) temp = 255; if(temp < 0) temp = 0;

serialPrintf(fd, "%03luE", (int)temp); printf("%03u\n", temp); } fflush (stdout); serialFlush(fd); delay(100); } else {

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

52 int temp = param.asInt() * 255; if(temp > 255) temp = 255; if(temp < 0) temp = 0;

serialPrintf(fd, "%03luE", temp); printf("%03u\n", temp); } fflush (stdout); serialFlush(fd); delay(100); } } void interruptTime(){ Blynk.syncAll(); } void setup() { fd = serialOpen ("/dev/ttyAMA0", 115200); Blynk.begin(auth, serv, port);

tmr.setInterval(300000L, interruptTime); } void loop() { Blynk.run(); tmr.run(); if (serialDataAvail(fd)) { if (serialGetchar(fd) == 'S') { id = ((int)serialGetchar(fd) - 48);

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

53

pin = ((int)serialGetchar(fd) - 48) * 10 + ((int)serialGetchar(fd) - 48); printf("V%lu", pin);

fflush(stdout);

val = ((int)serialGetchar(fd) - 48) * 100 + ((int)serialGetchar(fd) - 48) * 10 + ((int)serialGetchar(fd) - 48); if(pin % 8 < 2) { if(val <= 0) val = 100; if(val >= 255) val = 0; } else{ if(val >= 255) val = 1; if(val <= 0) val = 0; }

printf(" %lu\n", val);

if(serialGetchar(fd) == 'E') Blynk.virtualWrite(pin, val); fflush(stdout); } } }

int main(int argc, char* argv[]) {

parse_options(argc, argv, auth, serv, port); setup();

while (true) { loop(); } return 0;

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

54 4.7. Code cho Slave

void reset_default() {

for (int temp = 2; temp <= 7; temp++) { digitalWrite(temp, LOW); } digitalWrite(10, LOW); digitalWrite(11, LOW); /////////////////// }

const int outpin[8] = {10, 11, 2, 3, 4, 5, 6, 7};

const int inpin[10] = {A5, A4, A3, A2, A1, A0, 12, 13, 8, 9}; int statepin[8] = {0, 0, 0, 0, 0, 0, 0, 0};

#define readpinin(x) digitalRead(inpin[x]) #define readpinout(x) digitalRead(outpin[x]) #define writepin(x,y) analogWrite(outpin[x],y) void read_statepin(void) {

for (int temp = 0; temp < 8; temp++) { statepin[temp] = readpinin(temp); } } void getSerial(void) { if (Serial.available() > 0) { String c; c = Serial.readStringUntil("E"); if (c.substring(0, 2) == "H0")

if (c.substring(2, 4).toInt() - (readID() * 8) < 8 && c.substring(2, 4).toInt() - (readID() * 8) >= 0)

writepin(c.substring(2, 4).toInt() - (readID() * 8), c.substring(4, 7).toInt()); }

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

55 void putSerial(void) {

for (int temp = 0; temp < 8; temp++) { if (readpinin(temp) != statepin[temp]) { delay(60); while (readpinin(temp) == 0); Serial.print("S"); Serial.print(readID()); if (readID() * 8 + temp < 10) { Serial.print("0"); Serial.print(readID() * 8 + temp); }

else Serial.print(readID() * 8 + temp);

if (!readpinout(temp) == 0) Serial.print("000"); else Serial.print("255"); Serial.print("E"); digitalWrite(outpin[temp], !readpinout(temp)); read_statepin(); delay(60); } } } void pinmode_out(void) { // //alternative

// for (int temp = 0; temp < 8; temp++) { // pinMode(outpin[temp], OUTPUT); // }

pinMode(7, OUTPUT); //D8 Using as digital OUTPUT only pinMode(6, OUTPUT); //D7 Using as digital OUTPUT only pinMode(5, OUTPUT); //D6 Using as digital OUTPUT only

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

56

pinMode(4, OUTPUT); //D5 Using as digital OUTPUT only pinMode(3, OUTPUT); //D4 Using as digital OUTPUT only pinMode(2, OUTPUT); //D3 Using as digital OUTPUT only

pinMode(11, OUTPUT); // (A2) Using as PWM or digital OUTPUT. pinMode(10, OUTPUT); // (A1) Using as PWM or digital OUTPUT }

void pinmode_in(void) { // //alternative

// for (int temp = 0; temp < 8; temp++) { // pinMode(inpin[temp], INPUT_PULLUP); // }

pinMode(13, INPUT_PULLUP); // button 8 pinMode(12, INPUT_PULLUP); // button 7 pinMode(A0, INPUT_PULLUP); // button 6 pinMode(A1, INPUT_PULLUP); // button 5 pinMode(A2, INPUT_PULLUP); // button 4 pinMode(A3, INPUT_PULLUP); // button 3 pinMode(A4, INPUT_PULLUP); // button 2 pinMode(A5, INPUT_PULLUP); // button 1

//Set ID for Module (set by switch): Calculated in binary code A1A0 // if 2 module have the same ID, its will work the same

pinMode(8, INPUT_PULLUP); //Using for set ID: Address0 pinMode(9, INPUT_PULLUP); //Using for set ID: Address1 }

int readID(void) {

return readpinin(9) * 2 + readpinin(8); }

void setup() {

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

57 Serial.begin(115200); Serial.setTimeout(30); pinmode_out(); pinmode_in(); read_statepin(); readID(); } void loop() {

// put your main code here, to run repeatedly: getSerial();

putSerial(); }

Chương trinh trên board ardunio Read statepin :đọc trạng thái pin Get serial: nhận và mã hóa rs485 Put serial: mã hóa rs485 và gửi Pinmode out : pin đầu ra

Pinmode in :pin đầu vào Read ID :đọc địa chỉ ID Void setup: đặt thiết lập

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

58 4.8. Giới thiệu các nút chức năng

Button

Hoạt động ở chế độ nhấn hoặc chuyển đổi. Cho phép gửi các giá trị BẬT và TẮT (THẤP / CAO). Nút gửi 1 (CAO) khi nhấn và gửi 0 (THẤP) khi gửi tín hiệu. Slider

Tương tự như chiết áp. Cho phép gửi các giá trị trong phạm vi MIN / MAX nhất

định.

Timer Hẹn giờ kích hoạt các hành động tại

một thời điểm nhất định. Ngay cả khi điện thoại thông minh và ứng dụng ngoại tuyến. Thời gian bắt đầu gửi 1 (CAO). Thời gian dừng gửi 0 (THẤP). Phiên bản Android gần đây cũng đã cải thiện Timer trong tiện ích Eventor. Với Sự kiện Thời gian Sự kiện, người dùng có thể chỉ định nhiều bộ định thời trên cùng một mã pin, gửi bất kỳ chuỗi / giá trị nào, chọn ngày và múi giờ. Người dùng nên sử dụng tiện ích Eventor over Timer. Tuy nhiên, widget Timer vẫn thích hợp cho các sự kiện hẹn giờ đơn giản. zeRGBa

ZERGBA là một công cụ chọn màu + bộ chọn độ sáng RGB thông thường

Labeled Value

Hiển thị dữ liệu đến trong một cách trực quan. Trong đó người dùng có thể thêm hậu tố và tiền tố ở phía ứng dụng,

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

59 4.8.1 Cài đặt các chức năng trên blynk

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

60 Button

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

61 Slider

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

62 Timer

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

63 Hoàn thành kiểm tra kết nối và điều khiển

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

64 4.9. Tiến Hành lắp đặt và đấu nối các Module:

Gia công Board: Do module Arduino là board ngun mẫu khơng có sẵn chân ra, nên không thể ghép nối trực tiếp với các module khác. Vì thế, để có thể ghép nối tốt nhất giữa các module với nhau, ta dùng cách ghép qua board đục lỗ.

Hàn dây và kích thước nối dây: Vì là board nguyên mẫu nên phải sử dụng dây điện để kết nối. Lựa chọn dây đồng để dể hàn dây, việc sắp xếp dây là quan trọng. khoảng cách chân nhỏ, nên phải cẩn thận. kiểm tra từng chân sau khi hàn tránh tình trạng các mối hàn chạm vào nhau do khoảng cách giữa 2 điểm hàn quá gần. vì board nguyên mẫu nên phải kiểm tra để đảm bảo tốt nhất và an tồn nhất.

Hình 4.6.1 Boar prototype

Pinout: Lựa chọn các chân nào có thể output PWM và chân điều khiển digital bình thường. Việc lựa chọn phải đảm bảo các chân nằm gần nhau, phân theo từng cụm đễ dễ hàn dây, kết nối dây ( Vị trí các chân hiện tại: 2 3 4 5 6 7 10 11 là chân output, A0 A1 A2 A3 A4 A5 12 13 là chân in, nằm gần nhau).

Connector: Là board nguyên mẫu. nên cần phải tháo lắp nhiều, để mô phỏng, chạy thử. Nên sử dụng loại connector dễ thay thế, dễ tháo lắp.

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

65

Outline: Tiến hành sắp xếp các thành phần sao cho dễ nhìn, hợp lý và dễ nhận biết. quyết định là cụm đầu ra phải thay thế, chỉnh sửa nhiều nên nằm dưới cùng, xếp hàng ngang.-Đầu vào kết nối tới các nút nhấn điều khiển nên xếp thành hàng dọc, đánh số thứ tự nút nhấn tuần tự từ 1 tới 8.

Hình 4.6.2 Ngõ ra của Arduino

Đầu vào RS485 là đầu vào tín hiệu, đầu vào chức năng, nên nó nằm cùng hướng với cổng nguồn, và cổng USB (cổng upload firmware). RS485, USB, nguồn…quay theo hướng ngược lại với đầu 8 cổng đầu ra để tránh nhầm lẫn.

Hai switch cài đặt ID được đặt ở góc. có vị trí trống để dễ điều khiển. Lựa chọn slider switch kích thước nhỏ, ID switch này hầu như không cần thay đổi sau khi đã lắp đặt, nên dùng kích thước nhỏ để tránh bị tác động nhầm hoặc các đụng chạm ngoài ý muốn làm thay đổi ID của Box.

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

66 4.10. Sơ đồ đấu dây:

Sơ đồ ngun lý tủ điện chính

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

67 Sơ đồ ngun lý tủ điện các phịng

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

68 Sơ đồ điện đấu nối board điện điều khiểu

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

69

CHƯƠNG 5: KẾT QUẢ THỰC HIỆN VÀ HƯỚNG PHÁT TRIỂN TRIỂN

5.1. Kết quả thực hiện

Hình 5.1 Mơ hình báo cáo đã hồn thiện

Nhóm đã hồn thành được các mục tiêu đề ra ban đầu và phần nào cho thấy được các ưu điểm của mơ hình “Ứng dụng board mạch Raspberry pi 3B+ điều khiển thiết bị điện nhà vườn (Smart home)” như sau:

Có tính kinh tế so với mơ hình smart home hiện tại. Dễ dàng điều khiển và hẹn giờ mở tắt cho các thiết bị

Giúp chủ nhà quản lý được cá thiết bị điện trong nhà từ đó theo dõi được kW điện tiêu thụ của thiết bị

Khóa luận tốt nghiệp SVTH: Lê Huy Chung Trần Minh Cường Nguyễn Đường Công Danh Phan Tấn Đức

70

Chưa đưa giải quyết được vấn đề nhiễu sóng hài. Việc lắp dặt cần phải có chun mơn .

Cịn phụ thuộc vào Blynk

Chưa điều khiển được bằng giọng nói

Chưa có biện pháp an ninh (Camera quan sát, báo động khi có xâm nhập,…). 5.2. Hướng phát triển đề tài

Để việc kiểm sốt được nhanh chóng thuận tiện ngay cả khơng có mặt tại nhà thì camera quan sát là một một thiết bị thiết yếu quan trọng trong việc giám sát nhanh chóng hỗ trợ từ xa qua mạng. Dù ở bất kì đâu chỉ cần máy tính hoặc điện thoại có kết nối mạng thì có thể thấy được những hoạt động diễn ra ở nơi có camera từ xa nhanh nhất. Giúp việc giám sát tối ưu nhất, những gì diễn ra hay sự cố ở ngay lúc đó để có hướng xử lý tốt nhất.

Tự động điều chỉnh theo ngữ cảnh.

TÀI LIỆU THAM KHẢO https://raspberrypi.vn http://arduino.vn/ https://hocarm.org/node-red-co-ban/ http://biospring.com.vn/kien-thuc-chuyen-nganh/ky-thuat-nuoi-ca-basa-trong-ao- dat-chat-luong-cao.html http://www.aquatec.vn/blog/ky-thuat-nuoi-ca-tra-va-ca-basa-496/?hl=vi https://www.youtube.com/watch?v=1BwpqbHnVHM https://www.youtube.com/watch?v=wCa3_RfPlqo https://baomoi.com/ky-thuat-nuoi-ca-basa-trong-be-lon-nhanh-nhu-thoi-lai-tiet- kiem-chi-phi/c/23594121.epi https://blynk.io/ https://github.com/blynkkk

Một phần của tài liệu Ứng dụng board mạch raspberry PI 3B + điều khiển thiết bị gia dụng ( Smart home) (Trang 61)

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

(82 trang)