Internet of Things với Arduino -Tương tác Máy-Máy – Dự án

A. Bộ điều khiển đèn tự động

Trong hướng dẫn này chúng ta sẽ tiếp tục khám phá giao tiếp M2M với board Arduino MKR1000, lần này là tạo ra bộ điều khiển đèn tự động dựa trên board Arduino. Mô-đun đầu tiên sẽ có nhiệm vụ phát hiện độ sáng của môi trường xung quanh, và sau đó gửi cảnh báo tới mô-đun thứ hai, nó sẽ bật đèn tắt hoặc sáng phụ thuộc vào cảnh báo nhận được.

Sẵn sàng

Để điều khiển đèn trong dự án này, chúng ta sẽ sử dụng một thành phần rất tiện lợi có tên là PowerSwitch Tail:

Những thành phần này cho phép chúng ta dễ dàng điều khiển thiết bị được cấp nguồn từ mạng điện sinh hoạt trong nhà với board Arduino, vì bạn chỉ cần cắm nó vào nguồn điện lưới và sau đó cắm thiết bị của bạn vào đó.

Dưới đây là danh sách những thành phần cần thiết trong hướng dẫn này:

  • PowerSwitch Tail
  • Quang trở
  • Điện trở 10K Ohm

Chúng ta hãy cùng ráp phần cứng cho hướng dẫn này. Chúng ta sẽ bắt đầu với mô-đun kết nối với đèn. Chỉ cần cắm chân GND và Vin− tới GND trên board Arduino và chân Vin+ tới chân số 6 trên Arduino.

Dưới đây là kết quả cuối cùng:

Và cũng đừng quên cắm thiết bị vào PowerSwitch, và nối nó vào điện lưới. Trong ví dụ này tôi sử dụng đèn bàn 30W.

Hãy cùng ráp board nối với quang trở. Chỉ cần đặt quang trở nối tiếp với điện trở trên board và nối chân chung tới chân A0 của board. Sau đó nối chân còn lại của điện trở tới GND và chân còn lại của quang trở tới VCC.

Đây là kết quả cuối cùng:

Bài viết được trích từ sách: Internet of thing với Arduino

Cách làm…

Hãy cùng xem làm thế nào để cấu hình những board này. Chúng ta sẽ bắt đầu với board nối với quang trở.

Trong code, ta cần xác định hai ngưỡng: một khi tối quá và một khi đủ sáng:

int light_threshold_low = 30;
int light_threshold_high = 50;

Dĩ nhiên, bạn có thể thay bằng giá trị bạn thấy hợp lý. Sau đó, trong hàm loop() của chương trình, ta cần đo giá trị hiện tại của quang trở, tính theo phần trăm:

int sensorValue = analogRead(sensorPin);
float lightLevel = sensorValue/1024.*100;

Sau đó chúng ta thử giá trị này xem nó vượt ngưỡng high hay không:

if (lightLevel > light_threshold_high) {
Nếu đúng vậy ta gửi cảnh báo sau đây tới IFTTT:
String url = "/trigger/light_high";
  url += "/with/key/";
  url += key;

Dĩ nhiên, ta cũng làm điều tương tự khi ánh sánh dưới ngưỡng low.

Đối với mô-đun nối với đèn, mọi thứ còn dễ dàng hơn. Ta chỉ cần làm điều tương tự như đã làm cho trạm cơ sở trung tâm trong hướng dẫn trước. Ở đây bạn chỉ cần gán chân số 6 là chân output:

pinMode(6, OUTPUT);

Bây giờ bạn có thể lấy toàn bộ code chương trình từ kho chứa Github, thay đổi mã xác thực riêng của bạn và nạp code vào board.

Sau đó, vào IFTTT và bắt đầu tạo hướng dẫn đầu tiên. Với kênh trigger, ta chọn kênh Maker với event light_low:

Đối với hành động, ta chọn lại kênh Maker, gửi lệnh tới chân số 6 khi ở mức high:

Dĩ nhiên là bạn sẽ cần đảm bảo thay đổi ID của thiết bị trùng với cái bạn gán trong chương trình.

Tiếp đến, tạo mới hướng dẫn khác với cùng kênh, chỉ khác lúc này với event là light_high:

Đối với hành động nó tương tự như hướng dẫn trước, chỉ khác gán chân số 6 với trạng thái mức LOW:

Một khi đã xác nhận việc tạo hướng dẫn đó rồi, bạn có thể kiểm thử dự án. Thử dùng tay che quang trở: đèn tự động bật lên sau vài giây.

Nó hoạt động như thế nào…

Trong dự án này, chúng ta lại có 2 thiết bị giao tiếp với nhau thông qua IFTTT. Chúng cùng nhau tạo nên một hệ thống điều khiển đèn tự động mà không cần sự can thiệp của con người.

Chú ý rằng những thiết bị này giao tiếp thông qua IFTTT, nên chúng sẽ hoạt động tốt trong các mạng Wi-Fi khác nhau.

=> Xem thêmHọc IoT bài bản: Internet of Thing (IoT)

B. Bộ điều khiển vòi phun tự động

Đối với hướng dẫn cuối của chương này, chúng ta sẽ xem làm thế nào để làm một dự án thú vị để tự động hóa công việc vườn nhà bạn: một bộ điều khiển vòi phun tự động có thể làm việc qua cloud. Chúng ta sẽ có 2 board Arduino giao tiếp với nhau: board thứ nhất đo độ ẩm đất, và board thứ hai điều khiển máy bơm để tưới cây hoặc mọi thứ khác trong vườn.

Sẵn sàng

Dự án được tạo thành bởi 2 phần. Phần thứ nhất đơn thuần chỉ là một board Arduino MKR1000, cùng với cảm biến độ ẩm dựa trên cảm biến SHT10. Phần thứ hai của dự án cũng sẽ 1 board Arduino đơn giản, nối với 1 rơ-le. Rơ-le có thể sử dụng để điều khiển máy bơm nhỏ hoặc vòi phun mà bạn có.

Sau đây là danh sách phụ kiện cần thiết cho hướng dẫn này:

  • Cảm biến độ ẩm đất
  • Rơ-le
  • Điện trở 10K Ohm

Hãy cùng ráp phần cứng cho dự án nào, bắt đầu với việc nối board Arduino với cảm biến. Đầu tiên nối cảm biến tới breadboard, và đặt điện trở 10K Ohm giữa chân data và chân VCC của cảm biến (dây xanh và đỏ).

Sau đó, nối dây đen hoặc xanh lá tới GND, dây đỏ tới VCC, và dây vàng tới chân số 6 của board Arduino, và dây xanh (blue) tới chân số 7.

Đây là kết quả cuối cùng:

Với board rơ-le, mọi thứ còn dễ hơn. Chỉ cần nối chân VCC của rơ-le tới VCC, chân GND tới GND và cuối cùng chân SIG tới chân số 6 trên Arduino.

Dưới đây là kết quả cuối cùng:

Bạn cũng sẽ cần cài đặt thư viện SHT1x, có thể tìm thấy tại https://github.com/practicalarduino/SHT1x

Bây giờ, đầu tiên hãy thử board với cảm biến độ ẩm, hãy chắc rằng đã nối dây đúng. Bắt đầu bằng việc thêm thư viện cảm biến:

#include <SHT1x.h>

Tiếp đến, định nghĩa các chân mà cảm biến nối vào, và tạo một đối tượng cảm biến:

#define dataPin  6
#define clockPin 7

SHT1x sht1x(dataPin, clockPin);

Sau đó, trong hàm loop() của chương trình, chúng ta thực hiện việc đo đạc trên cảm biến này:

float temp_c;
  float temp_f;
  float humidity;

  // Read values from the sensor
  temp_c = sht1x.readTemperatureC();
  temp_f = sht1x.readTemperatureF();
  humidity = sht1x.readHumidity();

Cuối cùng chúng ta in ra giá trị đo được trong mỗi 2 giây:

Serial.print("Temperature: ");
  Serial.print(temp_c, DEC);
  Serial.print("C / ");
  Serial.print(temp_f, DEC);
  Serial.print("F. Humidity: ");
  Serial.print(humidity);
  Serial.println("%");

  delay(2000);

Bây giờ bạn có thể lấy toàn bộ code cho dự án này tại kho chứa trên Github và nạp vào board. Mở cửa sổ Serial lên và bạn sẽ thấy:

Nếu bạn có thể thấy số có giá trị hợp lý thì chúc mừng bạn! Cảm biến độ ẩm của bạn đã được nối chính xác vào board Arduino.

=> Sách Arduino, ESP8266, STM32: Sách tự động hóa

Cách làm…

Chúng ta sẽ cấu hình cả hai board để chúng có thể giao tiếp qua IFTTT. Trong sketch của board nối với cảm biến độ ẩm đất, bạn cần thiết lập hai ngưỡng:

float humidity_threshold_low = 20;
float humidity_threshold_high = 40;

Về cơ bản, ngưỡng thấp nhất là điểm mà tại đó chúng ta bắt đầu tưới cây. Khi độ ẩm đất đạt đến ngưỡng cao nhất ta dừng bơm hoặc vòi phun lại.

Sau đó, trong hàm loop() của chương trình, ta thử để xem độ ẩm cao không:

if (humidity > humidity_threshold_high) {

Nếu như vậy, chúng ta gửi cảnh báo tương ứng đến IFTTT:

String url = "/trigger/humidity_high";
  url += "/with/key/";
  url += key;

Chúng ta cũng kiểm tra liệu độ ẩm có thấp:

if (humidity < humidity_threshold_low) {

Nếu vậy ta gửi kích hoạt tương ứng tới IFTTT:

String url = "/trigger/humidity_low";
  url += "/with/key/";
  url += key;

Sketch cho board nối với rơ-le tương tự như bộ điều khiển đèn trong hướng dẫn trước đó. Dĩ nhiên bạn có thể tìm thấy trên kho chứa Github của sách.

Bạn có thể lấy về chương trình hoàn thiện của dự án từ Github, thay đổi mã xác thực của bạn, và nạp code vào board.

Tiếp đó, vào lại IFTTT và tạo một hướng dẫn mới. Đối với kênh trigger, ta lại chọn kênh Maker với tên event như bên dưới:

Đối với hành động, ta chọn kênh Maker và nhập URL dưới đây (thay đổi ID thiết bị tương ứng với thiết lập trong sketch):

Quả thực, nếu độ ẩm xuống thấp, ta muốn kích hoạt máy bơm. Bây giờ, ta tạo một hướng dẫn tương tự để kiểm soát trong trường hợp độ ẩm quá cao và ta muốn dừng bơm lại.

Bạn có thể thử dự án ngay bây giờ! Nếu bạn muốn thử trong điều kiện thực tế ví dụ bạn có thể dùng một cây trong chậu và đặt cảm biến độ ẩm đất trong đó. Sau đây là cách tôi thử dự án:

Nếu độ ẩm xuống quá thấp nó sẽ tự động kích hoạt rơ-le trên board thứ hai. Bây giờ bạn có thể nối rơ-le với máy bơm hoặc vòi phun tùy theo ý muốn.

Nó hoạt động như thế nào…

Dự án này hoạt động dựa trên việc giao tiếp của 2 board thông qua IFTTT, lần này là để tạo một dự án có thể được sử dụng thực tế trong vườn nhà hoặc trong nhà bạn.

=>Khóa học Internet of Things: https://trungtamcadcam.com/khoa-hoc/internet-of-thing-iot/