Phân biệt thiết bị

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 56)

CHƯƠNG 4 : VIẾT CHƯƠNG TRÌNH VÀ XÂY DỰNG MƠ HÌNH

4.3 Phân biệt thiết bị

Một Raspberry Pi 3+ sẽ phục vụ như là một thiết bị chủ. Trong mỗi phòng nào muốn tự động hoá, cần sử dụng một module Arduino UNO. Arduino UNO sẽ hoạt động như một bộ điều khiển thứ cấp, nhận lệnh từ Raspberry Pi 3+ và điều khiển cho thiết bị cụ thể nào đó. Ở đây, Raspberry Pi 3+ và tất cả module Arduino Uno được kết nối với nhau trên bằng giao tiếp uart. Mỗi Arduino Uno hoạt động như là thiết bị thực thi. Mỗi Arduino UNO có 1 địa chỉ ID duy nhất trên giao tiếp truyền dẫn. Người dùng có thể thêm hoặc bỏ các Arduino Uno tùy nhu cầu sử 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

45

Hình 4.2.3 Sơ đồ khối Cấu hình cho 1 Phịng

Bây giờ xem xét tình huống trong 1 phịng, một module Arduino UNO sẽ kiểm soát các thiết bị và đọc dữ liệu cảm biến. Định kỳ, Raspberry Pi gửi yêu cầu cho các dữ liệu cảm biến thu thập bởi Arduino UNO. Hình minh họa 4.2.4 diễn tả làm sao để cho Arduino UNO sẽ kết nối với các thiết bị. Mỗi phịng đều có nhiều thiết bị kiểm sốt (tức là Ánh sáng, quạt, ổ cắm điện, vv.. )

Địa chỉ thiết bị

Phần quan trọng nhất là làm thế nào chúng ta xác định các thiết bị? Đơn giản thôi. Chúng ta sẽ tạo địa chỉ cho thiết bị cách kết hợp số phòng với số lượng thiết bị. Ví dụ như: Số phịng 1 có ba thiết bị. Địa chỉ thiết bị sẽ là: ID swich

Vì vậy, bây giờ chúng ta đã biết cấu hình tổng thể. Tóm lại, một Raspberry Pi sẽ hoạt động như bộ điều khiển chính. Mỗi phịng đều có riêng một Arduino UNO của nó mà hành động phục vụ cho Raspberry Pi. Dữ liệu giữa Raspberry Pi Arduino UNO và sẽ được thực hiện bằng cách sử dụng giao tiếp uart.

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

46

Hình 4.2.4 Sơ đồ kết nối đến relay và thiết bị.4.4. Giới thiệu app Blink 4.4. Giới thiệu app Blink

Blynk được thiết kế cho Internet of Things. Nó có thể điều khiển phần cứng từ xa, nó có thể hiển thị dữ liệu cảm biến, nó có thể lưu trữ dữ liệu, biến đổi nó và làm nhiều việc hay ho khác.

Có ba thành phần chính trong nền tảng:

 Ứng dụng Blynk - cho phép người dùng tạo giao diện tuyệt vời cho các dự án của mình bằng nhiều vật dụng khác nhau mà Blynk cung cấp.

 Blynk Server - chịu trách nhiệm cho tất cả các giao tiếp giữa điện thoại thơng minh và phần cứng. Người dùng có thể sử dụng Blynk Cloud của chúng tơi hoặc chạy máy chủ Blynk riêng của mình tại địa phương. Đó là nguồn mở, có thể dễ dàng xử lý hàng ngàn thiết bị và thậm chí có thể được khởi chạy trên Raspberry Pi.

 Thư viện Blynk - cho tất cả các nền tảng phần cứng phổ biến - cho phép giao tiếp với máy chủ và xử lý tất cả các lệnh đến và đi.

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

47

Bây giờ: mỗi khi người dùng nhấn một nút trong ứng dụng Blynk, thông báo sẽ chuyển đến đám mây Blynk, nơi nó kỳ diệu tìm đường đến phần cứng của người dùng. Nó hoạt động tương tự theo hướng ngược lại.

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

48 4.5. Sơ đồ khối cho tồn bộ chương trình

Sơ đồ dịng tín hiệu cho Raspberry

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

49 Sơ đồ dịng tín hiệu cho Arduino

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 Hồ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 ngồ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ơ đồ nguyên 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ơ đồ nguyên 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 56)

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

(82 trang)