안주 디스펜서를 IoT 화해 보았다.

"술"에는 "안주"가 붙는 것으로 이번에는 터치 센서가있는 안주 디스펜서를 IoT 화해 보았다.

🍶 🍺 🍻 🍷 🍸 ​​🍹 🍾 🥃 + 🍲 🍔 🌭 🌮 🌯 🍕 🍖 🍗 🍙 🍛 🍛

캔디·디스펜서라든지, 안주 디스펜서라든지, 오토 디스펜서등의 검색 키워드로 나오는 제품으로, 이하 2개의 제품을 입수해 분해했는데 같은 기반·부품·배선으로 실장되고 있었으므로, 같은 구조로 이케 라고 생각한다.



구성



스마트 스피커(Google Home 또는 Amazon Alexa)를 입력하여 Node-RED를 통해 webhook 요청을 MQTT 요청(Publish)으로 변환하고 Milkcocoa를 통해 안주 디스펜서에 MQTT 요청(Subscribe)을 보내도록 구성했습니다. 음성 입력의 내용에 의해 Node-RED로부터의 MQTT 요구의 내용을 변경해, 안주 디스펜서에의 요구를 배분하는 구성으로 했다.



분해



본 제품은 내용물(안주)을 바꾸므로 기본적으로 분해하여 씻을 수 있게 되어 있다.



케이스, 트레이, 회전체를 제거하고 3개의 나사를 플러스 드라이버로 분리하면 기반, 모터, 터치 센서에 액세스할 수 있다.




받침대는 뒷면의 미끄럼 방지(스펀지)를 제거하면 4개의 나사가 나타나고, 플러스 드라이버로 분리하면 전지 박스, 슬라이드 스위치에 액세스할 수 있다.




배선도



기반에 탑재된 싱글 채널 터치 센서 스위치의 칩 사양은 여기 ( 사양서 )
기존의 터치 센서 기능을 살리면서 원격 조작이 가능하도록 Wio-Node에서 MOS-FET의 게이트 전압을 조작함으로써 모터의 음극(-)을 스위칭시키는 배선으로 했다. MOS-FET는 정평 2SK2232(60V25A)의 입수가 어려워졌기 때문에 대체품으로서 2SK4017(60V5A) 또는 2SK703(100V5A)를 사용했다.
또한 Wio-Node의 전원은 기존의 전원 박스에서 공급하여 슬라이드 스위치로 ON/OFF 할 수 있는 배선으로 했다.



중개를 제거한 후, 베이스(기반을 멈추고 있는 나사 부근)에 1개의 리드선을 납땜하고, 각통을 통해 받침대의 이면에 배선한다.




・모터의 음극(-)을 제어하기 위해 기반에 납땜하여 받침대의 이면에 배선한 리드선을 MOS-FET(드레인)에 접속하고, 전지 박스의 음극(-)에서 MOS-EFT(소스)로 연결하고 Grove 커넥터 (노란색 리드선)를 저항 (220Ω)을 사이에두고 MOS-FET (게이트)에 연결하십시오.
Wio-Node에 전원을 공급하기 위해 PH2 커넥터의 음극 (-)을 배터리 박스에 연결하고 양극 (+)을 슬라이드 스위치에 연결하십시오.



소스 코드



Wio-Node의 소스 코드는 여기

ESP8266_MOTOR_01.ino
#include <ESP8266WiFi.h>
#include <Milkcocoa.h>

#define WLAN_SSID ""  // Wi-Fi
#define WLAN_PASS ""  // Wi-Fi

#define MOTORPIN 5 // Wio-Node IO5 => MOTOR,  NodeMCU D1=GPIO5 D6=GPIO12
#define DEVICEID 1 // if selector is 0, MOTOR works in 0.1 second for health check purpose. 
                   // if selector is DEVICEID, MOTOR is switched on during timer. if NOT, MOTOR doesn't work.

WiFiClient client;

#define MILKCOCOA_APP_ID    ""  // MilkCocoa Application ID
#define MILKCOCOA_DATASTORE ""  // MilkCocoa Datastore Name
#define MILKCOCOA_SERVERPORT  1883

const char MQTT_SERVER[] PROGMEM    = MILKCOCOA_APP_ID ".mlkcca.com";
const char MQTT_CLIENTID[] PROGMEM  = __TIME__ MILKCOCOA_APP_ID;

Milkcocoa milkcocoa = Milkcocoa(&client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID);

int red, green, blue, selector, timer;

void onpush(DataElement *elem) {
  Serial.println("onpush");
  Serial.print("r:");
  Serial.print(elem->getInt("r"));
  Serial.print(",g:");
  Serial.print(elem->getInt("g"));
  Serial.print(",b:");
  Serial.print(elem->getInt("b"));
  Serial.print(",s:");
  Serial.print(elem->getInt("s"));
  Serial.print(",t:");
  Serial.print(elem->getInt("t"));
  Serial.println();

  red = elem->getInt("r");
  green = elem->getInt("g");
  blue = elem->getInt("b");
  selector = elem->getInt("s");
  timer = elem->getInt("t");

  if (selector) {
    if (selector == DEVICEID) {
      digitalWrite(MOTORPIN, HIGH); 
      delay(timer * 1000);
      digitalWrite(MOTORPIN, LOW); 
    }
  } else {
    digitalWrite(MOTORPIN, HIGH); 
    delay(100);
    digitalWrite(MOTORPIN, LOW); 
  }
}

void setupWiFi() {
  Serial.println(); Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);
  WiFi.begin(WLAN_SSID, WLAN_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void setup() {
  pinMode(15, OUTPUT);  // for Wio-Node
  digitalWrite(15, 1);  // for Wio-Node
  Serial.begin(115200);
  setupWiFi();
  Serial.println( milkcocoa.on(MILKCOCOA_DATASTORE, "push", onpush) );
  pinMode(MOTORPIN, OUTPUT); 
}

void loop() {
  milkcocoa.loop();
}

요약



현재 구상 중인 IoT 선술집(가정)의 실현을 향해 한 걸음이라도 가까워지면 다행입니다.

좋은 웹페이지 즐겨찾기