.1 Giaodiện làmviệc của IDE1

Một phần của tài liệu Điều khiển thiết bị trong nhà thông qua mạng điện thoại (Trang 39)

40

3.3.2 Vùng lệnh

Bao gồm các nút lệnh menu (File, Edit, Sketch, Tools, Help). Phía dưới là các icon cho phép sử dụng nhanh các chức năng thường dùng của IDE được miêu tả như sau:

3.3.3 Vùng viết chương trình

Các đoạn mã được viết tại đây. Tên chương trình được hiển thị ngay dưới dãy các Icon, ở đây nó tên là “Blink”. Để ý rằng phía sau tên chương trình có một dấu “§”. Điều đó có nghĩa là đoạn chương trình chưa được lưu lại.

Hình 3.3. Các lệnh trong Arduino IDE 1Hình 3.3.2 Các lệnh trong Arduino IDE Hình 3.3.2 Các lệnh trong Arduino IDE 1

41

3.3.4 Vùng thông báo (debug)

Những thông báo từ IDE sẽ được hiển thị tại đây. Để ý rằng góc dưới cùng bên phải hiển thị loại board Arduino và cổng COM được sử dụng. Luôn chú ý tới mục này bởi nếu chọn sai loại board hoặc cổng COM, sẽ không thể upload được code.

3.3.5 Một số lưu ý

Khi lập trình, cần chọn port (cổng kết nối khi gắn board vào) và board (tên board sử dụng). Giả sử, đang dùng mạch Arduino Uno, và khi gắn board này vào máy tính bằng cáp USB nó được nhận là COM4 thì cần chỉnh như sau là có thể lập trình được.

Hình 3.3.3 Vùng thông báo trong IDE

Hình 3.3.4 Của sổ chọn cổng COM Hình 3.3.3 Vùng thông báo trong IDE 1

42

CHƯƠNG 4: CHƯƠNG TRÌNH ĐỂ ARDUINO MEGA LÀM VIỆC VỚI CÁC THIẾT BỊ

4.1 Chương trình chính

#include <SPI.h>

#include <MFRC522.h> // thu vien "RFID". #define SS_PIN 53

#define RST_PIN 44 const int vcccb1 = 36; const int cb1 =37 ; const int coi =38 ; const int vccnut1 = 39; const int nut1 = 40 ;

const int den1 = 41; // LED phong khach const int den2 = 42; // LED garage const int den3 = 43; // LED nha bep const int den4 = 45; // LED phong ngu const int door = 46; // cua phong khach const int door1 = 47; // cua garaga const int rem = 48; // rem cua bep

const int rem1 = 49; // rem cua phong ngu

int ss1 = A0;// chân analog kết nối tới cảm biến LM35 int ss2 = A1;

String SDT="0945048405"; String tin_nhan;

MFRC522 mfrc522(SS_PIN, RST_PIN);

unsigned long uid, uidT; // hien thi so UID dang thap phan byte bCounter, readBit;

43 unsigned long ticketNumber;

void setup() { pinMode(cb1, INPUT); pinMode(coi, OUTPUT); pinMode(den1, OUTPUT); pinMode(den2, OUTPUT); pinMode(den3, OUTPUT); pinMode(den4, OUTPUT); pinMode(door, OUTPUT); pinMode(door1, OUTPUT); pinMode(rem, OUTPUT); pinMode(rem1, OUTPUT); pinMode(nut1, INPUT); pinMode(vccnut1, OUTPUT); pinMode(vcccb1, OUTPUT); pinMode(ss2, INPUT); Serial.begin(9600); Serial3.begin(2400);

Serial3.println("AT+CMGF=1"); //Lệnh này đưa tin nhắn về dạng tex delay(1000);

Serial3.println("AT+CNMI=2,2,0,0,0"); //Hiển thị ngay nếu tin nhắn gửi đến delay(1000); SPI.begin(); mfrc522.PCD_Init(); } void loop() { while (Serial3.available() > 0) {

44 if (c == '#')

{ break;

} //Nếu phát hiện ký tự "#" thì thoát vòng lặp; tin_nhan += c; //Ghép các ký tự thành 1 xâu tin_nhan } if (tin_nhan.length() > 0) { Serial.println(tin_nhan); if (tin_nhan == "a") { digitalWrite(den1, HIGH); } else if (tin_nhan == "b") { digitalWrite(den1, LOW); } else if (tin_nhan == "c") { digitalWrite(den2, HIGH); } else if (tin_nhan == "d") { digitalWrite(den2, LOW); } else if (tin_nhan == "d") { digitalWrite(den3, HIGH); }

45 else if (tin_nhan == "e")

{ digitalWrite(den3, LOW); } else if (tin_nhan == "f") { digitalWrite(den4, HIGH); } else if (tin_nhan == "g") { digitalWrite(den4, LOW); } else if (tin_nhan == "h") { digitalWrite(door, HIGH); } else if (tin_nhan == "j") { digitalWrite(door, LOW); } else if (tin_nhan == "k") { digitalWrite(door1, HIGH); } else if (tin_nhan == "l") { digitalWrite(door1, LOW); }

46 else if (tin_nhan == "n") { digitalWrite(rem, HIGH); } else if (tin_nhan == "m") { digitalWrite(rem, LOW); }

else if (tin_nhan == "i") {

digitalWrite(rem1, HIGH); }

else if (tin_nhan == "o") { digitalWrite(rem1, LOW); } tin_nhan = ""; } thetu(uidDec); delay(500); nutnhan1(nut1); delay(500); baochay(ss1); delay(500); khigas(ss2); delay(500); }

47 void thetu(byte uidDec)

{ // Tim the moi

if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } // Doc the if ( ! mfrc522.PICC_ReadCardSerial()) { return; } uid = 0;

for (byte i = 0; i < mfrc522.uid.size; i++) { uidT = mfrc522.uid.uidByte[i]; uid = uid*256+uidT; } if(uid == 168) { digitalWrite(door,HIGH); digitalWrite(vccnut1,HIGH); digitalWrite(vcccb1,HIGH); digitalWrite(coi,HIGH); delay(500); digitalWrite(coi,LOW); delay(2000); digitalWrite(door,LOW); }

48 else { digitalWrite(door,LOW); digitalWrite(vccnut1,LOW); digitalWrite(vcccb1,LOW); delay(500); digitalWrite(coi,HIGH); delay(2000); digitalWrite(coi,LOW); } }

4.3 Chương trình giao tiếp với nút nhấn

void nutnhan1(byte nut1) // nut nhan mo cua { if (digitalRead(nut1)== 1) { digitalWrite(door,HIGH); } else { digitalWrite(door,LOW);} }

4.4 Chương trình giao tiếp với cảm biến nhiệt độ LM35

void baochay(byte ss1)

{ int reading = analogRead(ss1); //đọc giá trị từ cảm biến LM35

float voltage = reading * 5.0 / 1024.0; //tính ra giá trị hiệu điện thế (đơn vị Volt) từ giá trị cảm biến

49 Serial.println("Nhiet do:"); Serial.println(temp); Serial.println(" *C "); if(temp >70) { Serial3.println("AT"); delay(1000); Serial3.println("AT+CMGF=1"); delay(1000); Serial3.println("AT+CSCS=\"GSM\""); delay(1000); Serial3.println("AT+CMGS=\"" + SDT+"\""); delay(1000);

Serial3.println("Nha ban gap hoa hoan"); delay(1000);

} }

4.5 Chương trình giao tiếp với cảm biến khí gas MQ2

void khigas(byte ss2) {if(digitalRead(ss2) == 0) digitalWrite(coi, HIGH); Serial3.println("AT"); delay(1000); Serial3.println("AT+CMGF=1"); delay(1000); Serial3.println("AT+CSCS=\"GSM\"");

50 delay(1000);

Serial3.println("AT+CMGS=\"" + SDT+"\""); delay(1000);

Serial3.println("Nha ban ro ri khi gas"); delay(1000);

else

digitalWrite(coi,LOW); }

51

CHƯƠNG 5: TỔNG QUÁT VỀ THUNKABLE

5.1 Giới thiệu về nền tảng App Inventor

MIT App Inventor dành cho Android là một ứng dụng web nguồn mở ban đầu được cung cấp bởi Google và hiện tại được duy trì bởi Viện Công nghệ Massachusetts.

Nền tảng cho phép nhà lập trình tạo ra các ứng dụng phần mềm cho hệ điều hành Android (OS). Bằng cách sử dụng giao diện đồ họa, nền tảng cho phép người dùng kéo và thả các khối mã (blocks) để tạo ra các ứng dụng có thể chạy trên thiết bị Android. Đến thời điểm hiện tại 07/2017, phiên bản iOS của nền tảng này đã bắt đầu được đưa vào thử nghiệm bởi Thunkable, là một trong các nhà cung cấp ứng dụng web cho ngôn ngữ này.

Nền tảng App Inventor được đưa ra thông qua yêu cầu vào ngày 12 tháng 7 năm 2010 và được phát hành công khai vào ngày 15 tháng 12 năm 2010. Nhóm App Inventor được dẫn dắt bởi Hal Abelson và Mark Friedman. Trong nửa sau của năm 2011, Google công bố mã nguồn, chấm dứt máy chủ và cung cấp tài trợ cho việc thành lập Trung tâm Nghiên cứu Điện thoại Di động MIT, do Hal Abelson và các giáo sư Eric Klopfer và Mitchel Resnick sáng lập để duy trì hoạt động của App Inventor.

Hình 5.1 App Inventor Hình 5.1 App Inventor 1

52

Phiên bản MIT được ra mắt vào tháng 3 năm 2012 vào ngày 6 tháng 12 năm 2013, MIT đã phát hành App Inventor 2, đổi tên từ tên gốc "App Inventor Classic" tính đến tháng 5 năm 2014, nền tảng đã có 87 nghìn người dùng hoạt động hàng tuần và 1,9 triệu đăng ký từ 195 quốc gia với tổng số 4,7 triệu ứng dụng được xây dựng.

Vào tháng 12 năm 2015, có 140 nghìn người sử dụng hoạt động hàng tuần và 4 triệu đăng ký tại 195 quốc gia với tổng số 12 triệu ứng dụng được xây dựng. Hiện nay, mỗi tháng MIT App Inventor có hơn 400.000 người dùng đến từ 195 quốc gia và đã tạo ra gần 22 triệu ứng dụng, MIT App Inventor đang thay đổi cách thế giới tạo ra các ứng dụng và cách mà học sinh nhỏ tuổi bắt đầu học về máy tính. Những website chính hiện nay để sử dụng ngôn ngữ Drag and Drop:

Hiện nay có ba websites chính cho phép nhà lập trình ứng dụng sử dụng ngôn ngữ kéo thả của MIT App Inventor:

- MIT App Inventor - Thunkable

53

5.2 Giới thiệu về Thunkable

Thunkable là một website được xây dựng lên từ công nghệ của MIT App Inventor bởi hai trong số những kỹ sư MIT đầu tiên của MIT Inventor vào đầu năm 2016. Nền tảng này dành cho những nhà lập trình phát triển ứng dụng chuyên nghiệp hơn với chất lượng cao hơn, hoặc xây dựng các ứng dụng mạnh mẽ hơn.

Do được xây dựng dựa trên MIT App Inventor, Thunkable có tất cả các đặc điểm nêu trên của MIT App Inventor như:

+ Cho phép xây dựng nhanh chóng những thành phần cơ bản (components) của một ứng dụng Android: Nút bấm, nút lựa chọn, chọn ngày giờ, ảnh, văn bản, thông báo, kéo trượt, trình duyệt web

+ Sử dụng nhiều tính năng trên điện thoại: Chụp ảnh, quay phim, chọn ảnh, bật video hoặc audio, thu âm, nhận diện giọng nói, chuyển lời thoại thành văn bản, dịch

+ Hỗ trợ xây dựng game bằng các components: Ball, Canvas, ImageSprite + Cảm biến: đo gia tốc (AccelerometerSensor), đọc mã vạch, tính giờ, con quay hồi chuyển (gyroscopeSensor), xác định địa điểm (locationSensor), NFC, đo tốc

Hình 5.2 Website Thunkable Hình 5.2 Website Thunkable 1

54

độ (pedometer), đo khoảng cách xa gần với vật thể (proximitySensor)

+ Kết nối: Danh bạ, email, gọi điện, chia sẻ thông qua các ứng dụng mạng xã hội khác trên thiết bị, nhắn tin, sử dụng twitter qua API, bật ứng dụng khác, bluetooth, bật trình duyệt

+ Lưu trữ: đọc hoặc lưu tệp txt, csv, sử dụng FusiontablesControl, tạo cơ sở dữ liệu đơn giản trên điện thoại hoặc trên đám mây thông qua server tự tạo hoặc Firebase

+ Điều khiển robot thông qua LegoMindstorms

+ Và rất nhiều mở rộng do các nhà lập trình hoạt động riêng liên tục thêm vào như là:

Mua bán trong ứng dụng, Floating button, Báo thức, cảm biến ánh sáng, kết nối dữ liệu SQLite… ngoài ra, Thunkable có những cải tiến sau đây:

+ Material Design: Để khắc phục một trong những nhược điểm lớn nhất của MIT App Inventor, Thunkable cho phép lập trình viên Android xây dựng ứng dụng với thiết kế Material Design mặc định. Đặc điểm này tăng đáng kể mức độ chuyên nghiệp của các ứng dụng.

+ Một số mở rộng bổ sung khá hữu ích như: Google Maps, tùy chỉnh font chữ, bổ sung thêm các tính năng điều khiển máy ảnh, duyệt web.

+ Tăng giới hạn kích thước ứng dụng từ 5mb lên 10mb. Theo nhóm phát triển Thunkable, giới hạn này sẽ còn được tăng lên.

+ Cho phép quảng cáo bằng Admob. Tuy vậy, component này vẫn còn trong chế độ beta và còn thiếu nhiều tính năng.

Và, điều đặc biệt nhất của Thunkable là: nhóm phát triển Thunkable đã bắt đầu đưa vào thử nghiệm phiên bản iOS của ngôn ngữ Drag and Drop. Theo thông báo, phiên bản này nhận được những phản hồi khá tích cực từ những nhà lập trình được mời tham gia thử nghiệm và dự kiến có thể được đưa vào sử dụng vào cuối năm nay 2017.

55

CHƯƠNG 6: LẬP TRÌNH TRÊN THUNKABLE

6.1 Mục đích lập trình Thunkable

Để có thể giám sát, điều khiển các thiết bị trong ngôi nhà từ điện thoại ta cần tạo một ứng dụng trên điện thoại nhằm tạo cảm giác thân thiện với người dùng, dễ sử dụng không cần phải biết các câu lệnh phức tạp để điều khiển.

6.2 Các bước cơ bản để tạo một project trên Thunkable

 Bước 1: Truy cập trang web https://thunkable.com/

 Bước 2: Tại cửa sổ tao chọn vào get started hoặc sign in để đăng nhập

Hình 6.2.1 Cửa sổ đăng nhập vào Thunkble 1Hình 6.2.1 Cửa sổ đăng nhập vào Thunkble 2 Hình 6.2.1 Cửa sổ đăng nhập vào Thunkble 2

56

 Bước 3: Ở đây sử dụng trên smartphone Android nên chọn Classic Android

57

 Bước 4: Sử dụng tài khoản google để đăng nhập, chọn sign in with google

 Bước 5: Sau khi đăng nhập vào, tiến hành tạo một project mới, chọn create new app

Hình 6.4 Dùng google đăng nhập Thunkble 1

Hình 6.5 Tạo project mới

Hình 6.4 Dùng google đăng nhập Thunkble 1

58

 Bước 6: Đặt tên cho project mới, sau đó chọn OK

Hình 6.6 Đặt tên cho new project Hình 6.6 Đặt tên cho new project 1

59

6.3 Giới thiệu về cửa sổ làm việc, các khối trức năng trên Thunkable

6.3.1 Màn hình chính

Bao gồm màn hình designer và blocks:

 Màn hình designer để tùy chỉnh giao diện cũng như thêm các thành phần cần thiết cho project .

Hình 6.3.1 Màn hình tùy chỉnh giao diện Hình 6.3.1 Màn hình tùy chỉnh giao diện 1 Hình 6.3.1 Màn hình tùy chỉnh giao diện 1

60

 Màn hình blocks để lập trình các khối ở màn hình designer làm việc

61

6.3.2 Các khối lệnh trong Designer

6.3.2.1 Khối Palette

Bao gồm các khối chức năng để tạo ra giao diện người dùng, các khối phương tiện truyền thông, cảm biến, khối kết nối mạng.

62 - Các khối lệnh thường được sử dụng:

- Khối User interface

Hình 6.3.2.2 Khối User Interface Hình 6.3.2.2 Khối User Interface Hình 6.3.2.2 Khối User Interface

63 - Khối Layout - Khối Media Hình 6.3.2.3 Khối Layout Hình 6.3.2.4 Khối Media Hình 6.3.2.3 Khối Layout 1 Hình 6.3.2.4 Khối Media 1

64 - Khối Drawing & An`

- Khối Sensors

Hình 6.3.2.5 Khối Drowing & Animation 1

65 - Khối connectivity

6.3.2.2 Khối Components & Properties

Để chỉnh sửa kích thước, tùy chỉnh giao diện các khối chức năng khi được thêm vào màn hình chính

Hình 6.3.2.7 Khối Connectivity

Hình 6.3.2.2.1 Khối Components & Propert Hình 6.3.2.7 Khối Connectivity 1

66

6.3.3 Các khối lệnh trong Blocks

6.3.3.1 Khối Control

Hình 6.3.3.1 Các khối lệnh trong Blocks 1

67

6.3.3.2 Khối Logic

6.3.3.3 Khối Math

Hình 6.3.3.2 Khối Logic 1

68

6.3.3.4 Khối Text

6.3.3.5 Khối Lists

Hình 6.3.3.4 Khối Text 1

69

6.3.3.6 Khối Colors

70

6.3.3.7 Khối Variables

6.3.3.8 Khối Procedures

Hình 6.3.3.7 Khối Variables 1

71

6.3.3.9 Các khối lệnh được thêm vào ở Designs

6.4 Giao diện sau khi tạo

Sử dụng các khối lệnh tao tạo được giao diện sau - Giao diện trang chủ

1

Hình 6.3.3.9 Các khối add vào Designs 1

72 - Giao diện Menu

- Giao diện phòng khách

Hình 6.4.3 Phòng khách Hình 6.4.2 Menu 1

73 - Giao diện phòng ngủ - Giao diện nhà bếp Hình 6.4.5 Nhà bếp Hình 6.4.4 Phòng ngủ 1 Hình 6.4.5 Nhà bếp 1

74 - Giao diện garage

- Giao diện thông tin tác giả

Hình 6.4.6 Garage

Hình 6.4.7 Thông tin tác giả Hình 6.4.6 Garage 1

75

6.5 Chương trình

 Code tạo menu

Hình 6.5.2 Code tạo menu 1 2 Hình 6.5.1 Code tạo menu 1

76

 Code hiển thị Trang Chủ

 Code điều khiển thiết bị phòng khách

Hình 6.5.3 Code hiển thị trang chủ 1

77

 Code điều khiển các nút nhấn tắt mở đèn, đóng mở rèm phòng ngủ

Hình 6.5.5 Code bật tắt đèn phòng khách 1

78

 Code điều khiển thiết bị garage

Hình 6.5.7 Code bật đóng mở rèm phòng ng 1

79

 Code điều khiển thiết bị nhà bếp

Hình 6.5.5 Code tạo vùng làm việc app 1Hình 6.5.5 Code tạo vùng thanh trượt 1 Hình 6.5.9 Code bật tắt đèn garage 1

80

 Code hiển thị thông tin tác giả

Hình 6.5.11 Code bật tắt đèn nhà bếp 1

81

82

TÀI LIỆU THAM KHẢO

 https://www.youtube.com/channel/UCTVZRyybOCDBL2zLXSeQVsw channel Thunkable

 Thunkable classic android https://docs.thunkable.com/thunkable-classic-android

 Quốc Bảo, cài đặt driver & Arduino IDE http://arduino.vn/bai-viet/68-cai-dat- driver-va-arduino-ide

 Johnson Selva - Interfacing rfid-rc522 with arduino mega a simple sketch

http://www.instructables.com/id/Interfacing-RFID-RC522-With-Arduino-MEGA- a-Simple-/

 Aritro Mukherjee - Smoke Detection using MQ-2 Gas

Sensor https://create.arduino.cc/projecthub/Aritro/smoke-detection-using- mq-2-gas-sensor-79c54a

 Jojo - How to Interface GSM Module to Arduino-Send and Receive SMS http://www.circuitstoday.com/interface-gsm-module-with-arduino

83

LỜI CÁM ƠN

Được sự phân công của quý thầy cô khoa Công nghệ Điện Trường Đại Học Công nghiệp TP.Hồ Chí Minh, sau gần 5 tháng tìm hiểu, nghiên cứu và thực hành chúng em đã hoàn thành Khóa luận tốt nghiệp “ĐIỀU KHIỂN THIẾT BỊ TRONG NHÀ THÔNG QUA MẠNG ĐIỆN THOẠI ”.

Để hoàn thành nhiệm vụ được giao, ngoài sự nỗ lực học hỏi của bản thân từng thành viên,nhóm còn có sự hướng dẫn tận tình của thầy cô, cùng các bạn học cùng khóa.

Em chân thành cảm ơn giảng viên – ThS.Hà Chí Kiên người đã hướng dẫn cho chúng em trong suốt thời gian thực hiện khóa luận. Mặc dù thầy bận các công tác nhưng không ngần ngại chỉ dẫn và định hướng cho chúng em để em hoàn thành tốt nhiệm vụ. Một lần nữa em chân thành cảm ơn thầy và chúc thầy dồi dào sức khoẻ.

Xin cảm ơn tất cả các bạn bè, thư viện, đã giúp đỡ chúng em trong suốt thời gian qua. Tất cả mọi người và thư viện đều nhiệt tình giúp đỡ và tạo điều kiện học tập và hỗ trợ tài liệu cho chúng em.

Tuy nhiên vì kiến thức chuyên môn còn hạn chế và bản thân còn thiếu nhiều kinh nghiệm

Một phần của tài liệu Điều khiển thiết bị trong nhà thông qua mạng điện thoại (Trang 39)