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ả

Tài Liệu Kỹ Thuật Bỏ Túi Để Xây Dựng – Vận Hành – Quản Lý Một Dự Án Internet Of Things Với iNut Platform

Kính chào quý vị và các bạn!

Lập trình Internet of Things được biết đến là một thứ vô cùng khó khăn và phức tạp. Nơi này, trước đây không phải dành cho tất cả mọi người. Nhưng, để đưa Việt Nam trở thành một cường quốc về công nghệ cao và đi tắt đón đầu nhờ cuộc cách mạng công nghệ 4.0 thì bài toán Internet of Things phải được giải quyết bằng chính trí tuệ của tất cả mọi người. Cuối cùng, để giải quyết được đồ thị Đa dụng và Dễ sử dụng, iNut Node-red IDE đã ra đời, giải pháp cung cấp một phương pháp sáng tạo, cho phép người dùng lập trình ứng dụng IoT bằng những khối lệnh kéo thả với những ví dụ ngay trong app. Ngay cả một học sinh tiểu học học STEM cũng có thể làm được. Hãy cùng khám phá nhé!

Mặc dù trên http://arduino.vn/ đã có rất nhiều bài viết về iNut nhưng chưa có một bài viết nào cụ thể dành cho các bạn newbie khi mới mua một bộ iNut cảm biến về thì phải làm như thế nào, bắt đầu từ đâu, các bước thực hiện như thế nào….? Bài viết này sẽ tổng hợp lại và hướng dẫn các bạn thực hiện setup từng bước một và demo 1 ví dụ cụ thể để các bạn có thể biết các iNut cảm biến vận hành thế nào nha. Ở mỗi mục mình sẽ trích dẫn link bài viết liên quan để các bạn tham khảo thêm, từ đó có cái nhìn tổng quát nhất khi mới bắt đầu sử dụng iNut cảm biến.

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

HƯỚNG DẪN SỬ DỤNG INUT CẢM BIẾN VỚI MODULE 1 RELAY, MFRC522 VÀ KHÓA ĐIÊN DY_03 (bản V2)

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

INut cảm biến sẽ cùng bạn thực hiện các dự án IOT từ nhỏ đến lớn. Ở bài viết trước,mình đã hướng dẫn bạn cách sử dụng INut cảm biến và module MFRC522 để điều khiển Servo thông qua internet và thẻ từ. Lần này mình sẽ cùng các bạn làm bản V2 với khóa điện DY_03.

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