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
4 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 Với Module RFID MFRC-522 Và Servo Qua Internet Và Thẻ RFID RMD8800.

Để điều khiển các thiết bị và đồng bộ dữ liệu nhanh chóng trên internet bạn cần làm gì?

iNut cảm biết sẽ giải quyết tất cả việc này giúp bạn. Hôm nay tụi mình sẽ cùng bạn làm một dự án nhỏ để ứng dụng trong việc đóng mở cửa qua internet và thẻ RFID nha, lần này mình sẽ làm bản V1 là sử dụng Servo trong ứng dụng đóng-mở cửa, lần sau mình sẽ làm bản V2 bằng khóa chốt điện DC12V (hoặc DC24V) LY-03 nha

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

Lần đầu trải nghiệm iNut cảm biến và sử dụng phần mềm iNut cảm biến

Hôm nay, mình sẽ chia sẻ những trải nghiệm đầu tiên của mình khi lần đầu sử dụng sản phẩn IOT của Cty cổ phần đầu tư và phát triển công nghệ INUT, đó là board mạch Inut cảm biến do chính công ty nghiên cứu và phát triển. Đây là lần đầu mình trải nghiệm sản phẩm này, vì quỹ thời gian tiếp xúc với nó còn hạn chế nên mình sẽ nói lên những cảm nhận ban đầu của mình khi được cầm,sờ,nắn,bóp… và test thử em nó

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