SỬ DỤNG INUT CẢM BIẾN LÀM 1 BỘ ACCESS CONTROL DỄ HAY KHÓ?

Mô Tả Dự Án 

Để điều khiển từ xa và đồng bộ dữ liệu trong thời gian thực qua internet dễ hay khó? đối với newbie thì thực sự rất khó, không biết nên bắt đầu từ đâu. Nhưng với iNut cảm biến thì mọi chuyện sẽ dễ hơn rất nhiều, nó là công cụ sẽ giúp bạn quyết định thành bại cho một dự án IOT dù nhỏ dù lớn. Hôm nay, mình sẽ cùng bạn làm một bộ access control cho chính cánh cửa trong phòng mình. Mình sẽ hướng dẫn bạn không chỉ điều khiển trên máy tính mà cũng có thể điều khiển trực tiếp trên điện thoại thông minh thông qua web app (nâng cao hơn sẽ là tự làm app riêng bằng app inventor hay thunkable - cái này sẽ có bài hướng dẫn lần sau). Các bạn có thể tùy chọn điều khiển trực tiếp qua localhost, điều khiển qua 3/4G v.v.. 

Nói nãy giờ cũng hơi dài rồi, cùng nhau bắt tay vô làm thôi.

I. Bạn Cần Chuẩn Bị Những Gì?

Phần Cứng

  • INut Cảm Biến
  • Arduino (mình xài UNO)
  • USB Type B (chúng ta hay gọi là dây nạp code)
  • Module 1 Relay (mình xài relay kích mức thấp)
  • khóa điện LY_03 ( mình xài 24V, các bạn có thể xài 12V tùy thích) kèm nguồn.

Cách Nối Dây

Khóa Điện DY_03

Nguồn 24V

Relay

Arduino UNO R3

VCC

 

COM

 

GND

GND

 

 

 

VCC

NO

 

 

 

5V

5V

 

 

GND

GND

 

 

IN

5

 

 

Phần Mềm

  • Trên điện thoại di động:
    • iNut - Platform (các bạn search trong apple store hoặc google play từ khóa inut là ra). Tải về trên Apple Store, tải về ở Google Play.
  • Trên máy tính:

Tham Khảo bài viết này để cài đặt môi trường cho iNut Node - RED IDE trên máy tính:http://arduino.vn/i...

II. Các Cài Đặt Khác

  • Cài Đặt Mạng Cho INut Cảm Biến: nếu bạn là người lần đầu tiên tiếp xúc với INut Cảm Biến, tham khảo bài viết này nhé : http://arduino.vn/tutorial/5929-ra-m... (bạn nào đã tiếp xúc rồi có thể bỏ qua bước này nhe. ) 
  • Video Hướng Dẫn Cài Đặt Wifi Cho iNut Cảm Biến: 

III. Lập Trình

Bạn Cần Chuẩn Bị Thư Viện Cho iNut Cảm Biến Cho Arduino : https://github.com/ngohuynhngockhanh... (tải nhanh)

Code Arduino :

#include <SPI.h>
#include <iNut.h>

iNut sensor;

#define OFF LOW
#define ON HIGH
// tùy vào relay kích để chỉnh lại phần OFF ON cho phù hợp
#define DY_03   5

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
pinMode (DY_03,OUTPUT);

digitalWrite(DY_03,OFF);// mặc định là ổ khóa điện được đóng
sensor.setup(1);
Serial.println("iNut Cam Bien - Xin Chao");
sensor.addCommand("LOCK",LockFunction);
}

void LockFunction()
{
  char *arg1 = sensor.next();
  Serial.println(arg1);
    if (*arg1 == NULL) //nothing
  return;
  if(strcmp(arg1,"1") == 0) // nếu được gửi tín hiệu là "1"
  {
    digitalWrite(DY_03,ON); // khóa mở
    Serial.println(F("DY_02 - Da Mo"));
    sensor.setValue(0,1);
  }
  else if(strcmp (arg1,"0") == 0) // nếu được gửi tín hiệu là "0"
  {
    digitalWrite(DY_03,OFF); // khóa đóng
    Serial.println(F("DY_02 - Da Dong"));
    sensor.setValue(0,0);
  }
  else {
    Serial.println("Khong nam trong tap hop lenh");
  }
}
void(* resetFunc) (void) = 0;
void loop() {
  static unsigned long lock_timer = 0; // ban đầu thời gian = 0
if (millis() - lock_timer > 10000UL)
{
resetFunc();
}
  sensor.loop();
  getMemoryFree();
}
int getMemoryFree() {// Trong trường hợp này, ta có thể hiểu extern sẽ khai báo một biến toàn cục trong chương trình (nếu chưa có) hoặc include một biến toàn cục đã được extern trước đó
  extern int __heap_start;
  extern int *__brkval; 
   //Dấu & phía trước tên biến / tên con trỏ sẽ cho ta biết vị trí ô nhớ mà nó đang đứng
  //Lưu ý: bài viết này không dành cho beginner và bạn cần tưởng tượng một chút để có thể mườn tượng vấn đề
  return (int) SP - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); 
}

Code iNut Node RED IDE:

các bạn vào link này để lấy code giao diện cho node red rồi tùy chỉnh màu sắc theo ý các bạn: https://ideone.com/QsY5YZ

[
    {
        "id": "7b9a0807.ce73c8",
        "type": "subflow",
        "name": "Lấy dữ từ iNut (10)",
        "info": "",
        "in": [
            {
                "x": 50,
                "y": 30,
                "wires": [
                    {
                        "id": "87c91422.62a1b8"
                    }
                ]
            }
        ],
        "out": [
            {
                "x": 1000,
                "y": 280,
                "wires": [
                    {
                        "id": "eea5251a.05e808",
                        "port": 0
                    }
                ]
            }
        ],
        "inputLabels": [
            "Nhận đầu vào MQTT IN từ iNut cảm biến"
        ],
        "outputLabels": [
            "Luồng cảm biến 1"
        ]
    },
    {
        "id": "87c91422.62a1b8",
        "type": "json",
        "z": "7b9a0807.ce73c8",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 165,
        "y": 84,
        "wires": [
            [
                "ad0dbf89.1666b"
            ]
        ]
    },
    {
        "id": "eea5251a.05e808",
        "type": "switch",
        "z": "7b9a0807.ce73c8",
        "name": "Phân luồn",
        "property": "relayId",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0",
                "vt": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 825.9869575500488,
        "y": 288.1562738418579,
        "wires": [
            []
        ]
    },
    {
        "id": "ad0dbf89.1666b",
        "type": "function",
        "z": "7b9a0807.ce73c8",
        "name": "Lặp",
        "func": "if (!msg.states) {\n    msg.states = msg.payload\n    msg.i = 0\n    return msg;\n} else {\n    msg.i++\n    if (msg.states[msg.i])\n        return msg;\n}\n",
        "outputs": 1,
        "noerr": 0,
        "x": 327.89060974121094,
        "y": 83.33600330352783,
        "wires": [
            [
                "9ad5ebb3.5fcbc8"
            ]
        ]
    },
    {
        "id": "9ad5ebb3.5fcbc8",
        "type": "function",
        "z": "7b9a0807.ce73c8",
        "name": "Lấy trạng thái thiết bị",
        "func": "msg.relayId = msg.i\nmsg.payload = msg.states[msg.i].state\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 477.89060974121094,
        "y": 183.33600330352783,
        "wires": [
            [
                "ad0dbf89.1666b",
                "eea5251a.05e808"
            ]
        ]
    },
    {
        "id": "7ca3223e.632e0c",
        "type": "subflow:7b9a0807.ce73c8",
        "z": "a03f7e6d.55604",
        "name": "",
        "x": 430,
        "y": 260,
        "wires": [
            [
                "b990965d.4e3c38"
            ]
        ]
    },
    {
        "id": "6cb706fa.834538",
        "type": "function",
        "z": "a03f7e6d.55604",
        "name": "",
        "func": "var command = msg.topic + ' ';\nif (msg.payload == 1) {\n    command = command + '1 OFF';\n} else {\n    command = command + '0 ON';\n}\nmsg.payload = {\n    id: 0,\n    command: command\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 1450,
        "y": 200,
        "wires": [
            [
                "3eeaa6ea.33deea"
            ]
        ]
    },
    {
        "id": "eaa12ff5.7f651",
        "type": "ui_button",
        "z": "a03f7e6d.55604",
        "name": "",
        "group": "72aa2c44.6511e4",
        "order": 3,
        "width": "2",
        "height": "2",
        "passthru": false,
        "label": "OFF",
        "tooltip": "",
        "color": "RED",
        "bgcolor": "yellow",
        "icon": "",
        "payload": "0",
        "payloadType": "num",
        "topic": "LOCK",
        "x": 1270,
        "y": 220,
        "wires": [
            [
                "6cb706fa.834538"
            ]
        ]
    },
    {
        "id": "46aabd82.3304b4",
        "type": "ui_button",
        "z": "a03f7e6d.55604",
        "name": "",
        "group": "72aa2c44.6511e4",
        "order": 1,
        "width": "2",
        "height": "2",
        "passthru": false,
        "label": "ON",
        "tooltip": "",
        "color": "RED",
        "bgcolor": "yellow",
        "icon": "",
        "payload": "1",
        "payloadType": "num",
        "topic": "LOCK",
        "x": 1270,
        "y": 180,
        "wires": [
            [
                "6cb706fa.834538"
            ]
        ]
    },
    {
        "id": "1575f5b.b7df10a",
        "type": "ui_text",
        "z": "a03f7e6d.55604",
        "group": "c16842a5.e4714",
        "order": 1,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "Status",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "x": 1110,
        "y": 160,
        "wires": []
    },
    {
        "id": "cd16af16.09c5b",
        "type": "change",
        "z": "a03f7e6d.55604",
        "name": "ONLINE",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "ONLINE",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 960,
        "y": 120,
        "wires": [
            [
                "1575f5b.b7df10a",
                "3d53a718.5b8b58"
            ]
        ]
    },
    {
        "id": "a61218d.370e7e8",
        "type": "switch",
        "z": "a03f7e6d.55604",
        "name": "Kiểm tra ONLINE",
        "property": "payload.status",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "-1",
                "vt": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 790,
        "y": 160,
        "wires": [
            [
                "cd16af16.09c5b"
            ],
            [
                "a0e398cf.880838"
            ]
        ]
    },
    {
        "id": "a0e398cf.880838",
        "type": "change",
        "z": "a03f7e6d.55604",
        "name": "OFFLINE",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "OFFLINE",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 960,
        "y": 180,
        "wires": [
            [
                "1575f5b.b7df10a"
            ]
        ]
    },
    {
        "id": "99cf9920.2b8c68",
        "type": "json",
        "z": "a03f7e6d.55604",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 630,
        "y": 160,
        "wires": [
            [
                "a61218d.370e7e8"
            ]
        ]
    },
    {
        "id": "d39c7e26.477bf",
        "type": "inject",
        "z": "a03f7e6d.55604",
        "name": "",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "x": 110,
        "y": 120,
        "wires": [
            [
                "b55a77df.292828"
            ]
        ]
    },
    {
        "id": "3eeaa6ea.33deea",
        "type": "link out",
        "z": "a03f7e6d.55604",
        "name": "OUT_RES_PORT",
        "links": [
            "b6df0cb7.9c668"
        ],
        "x": 1555,
        "y": 200,
        "wires": []
    },
    {
        "id": "b6df0cb7.9c668",
        "type": "link in",
        "z": "a03f7e6d.55604",
        "name": "REST_POST",
        "links": [
            "3850f97b.cf5b76",
            "3eeaa6ea.33deea",
            "b3ced61c.061d58",
            "361dbb9e.e7b7e4"
        ],
        "x": 35,
        "y": 180,
        "wires": [
            [
                "5efd3dcc.07ddc4"
            ]
        ]
    },
    {
        "id": "5b61d3a7.4d19bc",
        "type": "ui_gauge",
        "z": "a03f7e6d.55604",
        "name": "",
        "group": "72aa2c44.6511e4",
        "order": 2,
        "width": "2",
        "height": "2",
        "gtype": "gage",
        "title": "LOCK",
        "label": "units",
        "format": "{{value}}",
        "min": 0,
        "max": "1",
        "colors": [
            "#00b500",
            "#e6e600",
            "#ca3838"
        ],
        "seg1": "",
        "seg2": "",
        "x": 770,
        "y": 300,
        "wires": []
    },
    {
        "id": "b4943ab2.a09298",
        "type": "link out",
        "z": "a03f7e6d.55604",
        "name": "RELOAD",
        "links": [
            "1548c7f6.656998"
        ],
        "x": 1575,
        "y": 100,
        "wires": []
    },
    {
        "id": "1548c7f6.656998",
        "type": "link in",
        "z": "a03f7e6d.55604",
        "name": "RELOAD",
        "links": [
            "b4943ab2.a09298"
        ],
        "x": 95,
        "y": 40,
        "wires": [
            [
                "b55a77df.292828"
            ]
        ]
    },
    {
        "id": "a3d75404.741bf8",
        "type": "change",
        "z": "a03f7e6d.55604",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "POST",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 470,
        "y": 180,
        "wires": [
            [
                "99cf9920.2b8c68"
            ]
        ]
    },
    {
        "id": "3d53a718.5b8b58",
        "type": "switch",
        "z": "a03f7e6d.55604",
        "name": "",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "POST",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 1,
        "x": 1110,
        "y": 100,
        "wires": [
            [
                "4eec935.cffc06c",
                "411c08fb.7f07e8"
            ]
        ]
    },
    {
        "id": "4eec935.cffc06c",
        "type": "delay",
        "z": "a03f7e6d.55604",
        "name": "",
        "pauseType": "delay",
        "timeout": "50",
        "timeoutUnits": "milliseconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 1270,
        "y": 80,
        "wires": [
            [
                "3892ce03.26e722"
            ]
        ]
    },
    {
        "id": "3892ce03.26e722",
        "type": "change",
        "z": "a03f7e6d.55604",
        "name": "",
        "rules": [
            {
                "t": "delete",
                "p": "topic",
                "pt": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1440,
        "y": 100,
        "wires": [
            [
                "b4943ab2.a09298"
            ]
        ]
    },
    {
        "id": "411c08fb.7f07e8",
        "type": "delay",
        "z": "a03f7e6d.55604",
        "name": "",
        "pauseType": "delay",
        "timeout": "250",
        "timeoutUnits": "milliseconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "x": 1270,
        "y": 120,
        "wires": [
            [
                "3892ce03.26e722"
            ]
        ]
    },
    {
        "id": "e147a1d.b7cbe6",
        "type": "mqtt in",
        "z": "a03f7e6d.55604",
        "name": "[MQTT-IN]iNut cảm biến - iNut M1",
        "topic": "request/dkjTobCPXidsp7X1NqzKFQbQ4z02/SyVEreTK4/ccff6a10caddfc13fee619eb7065f4cb302880090088",
        "qos": "2",
        "broker": "5421618d.ae96c",
        "x": 160,
        "y": 260,
        "wires": [
            [
                "7ca3223e.632e0c"
            ]
        ]
    },
    {
        "id": "b55a77df.292828",
        "type": "http request",
        "z": "a03f7e6d.55604",
        "name": "[REST][GET]iNut cảm biến - iNut M1",
        "method": "GET",
        "ret": "txt",
        "url": "https://c...content-available-to-author-only...e.vn/api/1.0/request/dkjTobCPXidsp7X1NqzKFQbQ4z02/SyVEreTK4/ccff6a10caddfc13fee619eb7065f4cb302880090088/req_device",
        "tls": "",
        "x": 370,
        "y": 120,
        "wires": [
            [
                "99cf9920.2b8c68"
            ]
        ]
    },
    {
        "id": "5efd3dcc.07ddc4",
        "type": "http request",
        "z": "a03f7e6d.55604",
        "name": "[REST][POST]iNut cảm biến - iNut M1",
        "method": "POST",
        "ret": "txt",
        "url": "https://c...content-available-to-author-only...e.vn/api/1.0/request/dkjTobCPXidsp7X1NqzKFQbQ4z02/SyVEreTK4/ccff6a10caddfc13fee619eb7065f4cb302880090088/req_device_toggle",
        "tls": "",
        "x": 210,
        "y": 180,
        "wires": [
            [
                "a3d75404.741bf8"
            ]
        ]
    },
    {
        "id": "b990965d.4e3c38",
        "type": "change",
        "z": "a03f7e6d.55604",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Trạng Thái",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 610,
        "y": 260,
        "wires": [
            [
                "5b63ccaf.7c4fe4",
                "5b61d3a7.4d19bc"
            ]
        ]
    },
    {
        "id": "5b63ccaf.7c4fe4",
        "type": "function",
        "z": "a03f7e6d.55604",
        "name": "",
        "func": "var trangthai;\nif (msg.payload == 0) {\n    trangthai = \"Đóng\";\n}\nelse if (msg.payload == 1) {\n    trangthai = \"Mở\";\n}\nmsg.payload = trangthai;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "x": 770,
        "y": 240,
        "wires": [
            [
                "ccfdd94f.6e6228"
            ]
        ]
    },
    {
        "id": "ccfdd94f.6e6228",
        "type": "ui_text",
        "z": "a03f7e6d.55604",
        "group": "72aa2c44.6511e4",
        "order": 0,
        "width": 0,
        "height": 0,
        "name": "",
        "label": "Trạng Thái: ",
        "format": "{{msg.payload}}",
        "layout": "row-spread",
        "x": 950,
        "y": 240,
        "wires": []
    },
    {
        "id": "72aa2c44.6511e4",
        "type": "ui_group",
        "z": "",
        "name": "Group 1",
        "tab": "e59646ac.c34d18",
        "order": 1,
        "disp": false,
        "width": "6",
        "collapse": false
    },
    {
        "id": "c16842a5.e4714",
        "type": "ui_group",
        "z": "",
        "name": "Group 2",
        "tab": "e59646ac.c34d18",
        "order": 2,
        "disp": false,
        "width": "6",
        "collapse": false
    },
    {
        "id": "5421618d.ae96c",
        "type": "mqtt-broker",
        "name": "",
        "broker": "mqtt.mysmarthome.vn",
        "port": "1883",
        "clientid": "",
        "usetls": false,
        "compatmode": true,
        "keepalive": "60",
        "cleansession": true,
        "willTopic": "",
        "willQos": "0",
        "willPayload": "",
        "birthTopic": "",
        "birthQos": "0",
        "birthPayload": ""
    },
    {
        "id": "e59646ac.c34d18",
        "type": "ui_tab",
        "name": "Tab 1",
        "icon": "dashboard",
        "order": 1
    }
]

Giao Diện Block iNut  Node - RED IDE

Giao Diện Làm Việc

 

Nếu các bạn gặp khó khăn khi thực hiện dự án này, hãy gọi cho mình để được sự trợ giúp nhé ( sđt mình: 037 3998 468 ). Đừng ngần ngại wink

IV. Kết Quả Hôm Nay:

Cùng chiêm ngưỡng thành quả của chúng ta nào (video dưới)

Đi ra ngoài và làm ngay 1 chai coca cola mát lạnh để tự thưởng cho thành quả của chúng ta nào, chúc các bạn thành công.

Youtube: 
lên
6 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

HƯỚNG DẪN SỬ DỤNG INUT CẢM BIẾN ĐỂ ĐIỀU KHIỂN 8 RELAY QUA INTERNET (KHÔNG CẦN INUT NODE - RED IDE)

Để điều khiển 8 relay qua internet với iNut cảm biến, trước giờ muốn thực hiện được việc này các bạn cần phải sử dụng iNut Node - RED IDE để điều khiển nó, đôi khi cũng bất tiện cho một số bạn newbie vì phải thực hiện qua quá nhiều bước vừa trên máy tính vừa trên điện thoại. Hoặc nhưng bạn master thì sẽ sử dụng bộ API có sẵn của iNut Platform để tự làm app riêng cho mình. Hôm nay, mình sẽ hướng dẫn bạn cách sử dụng APP INUT để điều khiển 8 relay từ xa qua internet mà không cần iNut Node - RED IDE.

lên
15 thành viên đã đánh giá bài viết này hữu ích.

Hướng Dẫn Test Gửi Từ iNut-Node-RED-IDE Đến MQTT Broker Trên Raspberry

Chào các bạn, ở bài trước mình đã hướng dẫn các bạn cách setup 1 MQTT-Broker trên con raspberry-Pi rồi, qua đó các bạn cũng đã nắm được các thao tác setup cơ bản cũng như cách sử dụng remote cho pi. Các bạn xem lại ở đây nha.

Ở bài viết này mình sẽ hướng dẫn các bạn cách gửi data từ iNut-Node-RED-IDE để xem nó hoạt động như thế nào nhé, mình sẽ chỉ các bạn cách setup và lấy thông số có sẵn để test luôn nha. Bắt tay vào làm thôi.

lên
4 thành viên đã đánh giá bài viết này hữu ích.