Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Slimme Huismonitoring Aangedreven door Alexa

Onderdelen en Benodigdheden

Arduino UNO 1
Espressif ESP8266 ESP-01 1
DHT11 Temperatuur & Vochtigheidssensor (4 pinnen) 1
ControlEverything.com 4-KANALS RELAY CONTROLLER VOOR I2C 1
IR-objestsensor 1
Camera 1
Jumper wires (generic) 1

Apps en Online Services

  • Arduino IDE
  • Amazon Alexa Alexa Skills Kit
  • Amazon Alexa echosim.io
  • ThingSpeak API
  • Backendless
  • PushingBox

Over Dit Project

Inleiding

In de huidige wereld besteden mensen meer tijd op het werk dan thuis. Er is dus behoefte aan een huismonitoring-systeem waarmee je de toestand van je huis kunt controleren tijdens je werk. Het zou nog beter zijn als je gewoon "iemand" kunt vragen over je huis tijdens werkuren. Dit kan bereikt worden door Amazon Alexa te gebruiken als assistent die je de benodigde informatie over je huis geeft.

Niet alleen vanaf het werk, maar van overal ter wereld kun je de huistoestand opvragen, mits je een internetverbinding en een Amazon Alexa-apparaat hebt.

De volgende functies zijn geïmplementeerd in dit project:

  1. Huishoudelijke apparaten besturen (ventilator en licht)
  2. Status van apparaten opvragen
  3. Weersomstandigheden in huis opvragen (temperatuur en vochtigheid)
  4. Een snapshot van de binnenruimte naar je Gmail sturen wanneer gewenst
  5. Meldingen sturen bij:
    • Inbreker (ook met foto)
    • Brand
    • Bezoeker (ook met foto)

Stap 1: Arduino en ESP8266 Programmeren

Download de Arduino IDE van de officiële website: https://www.arduino.cc/en/Main/Software

Open Arduino IDE en ga naar Bestand → Voorkeuren → in "Additional Board Manager URL" typ: https://arduino.esp8266.com/stable/package_esp8266com_index.json

Ga naar Tools → Boards → Board Manager → en installeer het esp8266-pakket (laatste in de lijst).

Arduino programmeren: Sluit de USB-kabel aan van de Arduino op de computer, selecteer Arduino/Genuino UNO in Tools → Boards. Zorg dat je de juiste COM-poort selecteert (te vinden in Apparaatbeheer). Schrijf het programma, compileer en klik op upload als er geen fouten zijn.

ESP8266 programmeren: Maak de verbinding zoals in het diagram getoond.

Slimme Huismonitoring Aangedreven door Alexa
Slimme Huismonitoring Aangedreven door Alexa

Sluit de USB van de Arduino aan op de computer. In Tools → Board → selecteer "Generic ESP8266" en de juiste COM-poort. Schrijf het programma, compileer en upload. Zorg dat je Arduino RST met GND verbindt (de Arduino fungeert als programmer voor de ESP8266).

In dit project wordt eerst de ESP8266 geprogrammeerd en daarna de schakeling losgemaakt. Vervolgens wordt de schakeling opnieuw verbonden zoals in de figuur "Circuit Connections" getoond, en daarna wordt de Arduino geprogrammeerd.

Stap 2: Thingspeak.com Configureren

  1. Maak een account aan op thingspeak.com.
  2. We gebruiken kanalen in ThingSpeak om apparaatbesturingsinformatie op te slaan en door te sturen naar Arduino/Alexa. We slaan ook temperatuur- en vochtigheidswaarden op. Het fungeert als opslaglocatie voor informatie.
  3. Ga naar Channels → My Channels en maak een nieuw kanaal aan. Geef naam en beschrijving.
  4. In dit project hebben we 8 kanalen nodig (je kunt het met minder doen, maar programmeren wordt dan complexer). ThingSpeak heeft een tijdsbeperking: er moet 10-15 seconden zitten tussen opeenvolgende updates van hetzelfde kanaal.

De acht kanalen met hun waarden en betekenissen:

Kanaal Waarden en Betekenis
1) Apparaatbesturing 0 = licht AAN, 1 = licht UIT, 2 = ventilator AAN, 3 = ventilator UIT
2) Lichtstatus 0 = licht uit, 1 = licht aan
3) Ventilatorstatus 0 = ventilator uit, 1 = ventilator aan
4) Vochtigheid Waarde van vochtigheid
5) Temperatuur Waarde van temperatuur
6) Inbrekermelding 1 = inbreker alarm
7) Brandmelding 1 = brand alarm
8) Bezoekersmelding 1 = bezoeker alarm

Klik op een kanaal om het Channel ID en Write API Keys te zien (API Keys-tab). Channel ID is nodig om data op te halen, Write Key om data op te slaan.

HTTP-request voor updaten:
https://api.thingspeak.com/update?api_key=<write_key>&field1=<waarde>

HTTP-request voor uitlezen:
https://api.thingspeak.com/channels/<channel_id>/field/field1/last.html

Stap 3: Het Programma

Het programma is verdeeld in 3 delen:

A) Programma voor Arduino: Heel simpel. Het ontvangt data van de ESP8266 via serieel en stuurt apparaten aan op basis van de ontvangen data. Meer info in de commentaren in de code.

B) Programma voor ESP8266: Omvat 3 dingen:

  1. Temperatuur en vochtigheid updaten via HTTP-request:
client.print(String("GET ") + "/update?key=<write_key>&field1=" + humidity + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
client.print(String("GET ") + "/update?key=<write_key>&field1=" + temperature + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

Vervang <write_key> door de juiste write keys van de ThingSpeak-kanalen voor vochtigheid en temperatuur. host is api.thingspeak.com.

Download DHT-bibliotheek: https://github.com/adafruit/DHT-sensor-library

  1. Uitlezen van ThingSpeak-kanalen en apparaten besturen:
client.print(String("GET ") + "/channels/<channel_id>/field/field1/last.html HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");

Vervang <channel_id> door het corresponderende Channel ID uit ThingSpeak.

  1. Waarschuwing sturen bij hoge temperatuur via PushingBox:
String host1 = "api.pushingbox.com";
client.print(String("GET ") + "/pushingbox?devid=<your_dev_id> HTTP/1.1\r\n" + "Host: " + host1 + "\r\n" + "Connection: close\r\n\r\n");

Vervang <your_dev_id> door je Device ID in PushingBox.

Stap 4: LinkIt Smart 7688 Duo en Webcam Configureren

In dit project worden een webcam en LinkIt Smart 7688 Duo gebruikt om benodigde foto's te maken en naar de gebruiker te sturen. Je kunt ook een Arduino-cameramodule gebruiken of een IP-camera.

  1. Druk 20 seconden op de WiFi-knop van de LinkIt Smart 7688 om te resetten. Je ziet dan de access point-naam in je netwerkverbindingen. Verbinding maken met dat netwerk.
  2. Open browser en ga naar 192.168.100.1. Je ziet de portal.
  3. Stel een wachtwoord in voor de portal.
Slimme Huismonitoring Aangedreven door Alexa
  1. Na inloggen: Ga naar Network-tab, selecteer Station Mode (nodig voor internettoegang), verbind met je WiFi-netwerk, klik Configure en Restart.
Slimme Huismonitoring Aangedreven door Alexa
  1. Na herstart krijgt het bord een lokaal IP-adres. Vind dit uit via IP-tools of je router-portal (bijv. 192.168.1.4).
  2. Typ het lokale IP-adres in de browser. Je moet opnieuw inloggen.
  3. Om streaming van de webcam in te schakelen, activeer MJPG-streamer (kopieert JPEG-frames van input-plugins naar output-plugins). In de portal: Ga naar OpenWrt (rechtsboven), log in opnieuw, ga naar Service-tab, vink "Enable MJPG streamer" aan, wijs een poort toe (bijv. 4440). Klik Save & Apply.
Slimme Huismonitoring Aangedreven door Alexa
Slimme Huismonitoring Aangedreven door Alexa
  1. Sluit de webcam aan op de USB-host van de LinkIt Smart 7688 Duo via een OTG-kabel.
  2. Om de stream te bekijken: open browser en ga naar <lokaal IP>:<poort> (bijv. 192.168.1.4:4440).
Slimme Huismonitoring Aangedreven door Alexa
  1. Om een snapshot te maken: <lokaal IP>:<poort>?action=snapshot
Slimme Huismonitoring Aangedreven door Alexa
  1. Deze afbeelding is lokaal beschikbaar, maar we moeten deze beschikbaar maken voor PushingBox. Hiervoor is port forwarding nodig. Dit doe je in de router-portal (meestal onder NAT-service). Zoek "port forwarding [jouw router-model]" op Google.
  2. Na port forwarding kun je deze poort (bijv. 4440) bereiken via je externe IP (vind dit via "what is my ip" in Google).
  3. Plaats dit adres (https://<externe IP>:<poort>?action=snapshot) in PushingBox (volgende stap) zodat PushingBox de afbeelding kan ophalen en als bijlage mailen.

Je kunt de afbeelding ook opslaan op SD-kaart (LinkIt Smart 7688 Duo heeft een SD-kaartslot).

Meer info: MediaTek Docs

Stap 5: PushingBox Configureren

PushingBox wordt gebruikt om meldingen over verschillende alerts naar Gmail te sturen.

  1. Meld aan bij PushingBox met Google-account: https://www.pushingbox.com/
  2. Ga naar My Services → Add Service. Kies Gmail (voor foto-bijlage) en vul configuratienaam en Gmail-adres van de ontvanger in.
  3. Ga naar My Scenarios en maak een nieuw scenario aan. Geef een naam (bijv. ALERT), voeg de zojuist gemaakte service toe.
Slimme Huismonitoring Aangedreven door Alexa
  1. Schrijf een passende onderwerp en body voor de mail en voer de URL in voor de webcam-snapshot (?action=snapshot). Maak verschillende scenario's voor verschillende alerts.
  2. API voor het uitvoeren van een PushingBox-scenario: https://api.pushingbox.com/pushingbox?devid=<device_id>

Stap 6: Alexa Skill Maken met Backendless

Backendless is een drag-and-drop programmeeromgeving om Alexa Skills (en andere programma's) te maken, toegankelijk via Backendless API.

  1. Maak account op https://backendless.com/
  2. Log in, klik Create App, geef een naam.
  3. Klik Business Logic-icoon (linker balk). Je ziet API SERVICES.
  4. Klik "+" voor nieuwe service. Selecteer CODELESS. Naam: "AlexaService". Klik SAVE.
Slimme Huismonitoring Aangedreven door Alexa
  1. Backendless maakt de API Service en vraagt om een methode. Naam: "handleRequest". Selecteer POST als REST-operatie, declareer argument "req" met type "Any Object".
Slimme Huismonitoring Aangedreven door Alexa
  1. Klik EDIT om naar de Codeless Logic Designer te gaan.
  2. In het functie-placeholder-blok, verander "doSomething" in "sendAlexaResponse". Deze functie laat Alexa iets zeggen wat als argument wordt doorgegeven. Klik SAVE.
Slimme Huismonitoring Aangedreven door Alexa
  1. Klik het tandwiel-icoon in het paarse blok naast "Function". Voeg twee argumenten toe: "whatToSay" en "waitForResponse". Klik SAVE.
Slimme Huismonitoring Aangedreven door Alexa
  1. Wijzig de functielogica zoals in de afbeelding. Gebruik het tandwiel bij "Create Objects" om object-eigenschappen te benoemen. Vergeet niet op SAVE te klikken.
Slimme Huismonitoring Aangedreven door Alexa
  1. Ga terug naar de handleRequest-methode van AlexaService. Sleep de sendAlexaResponse-blok naar de return-connector van je servicemethode.
Slimme Huismonitoring Aangedreven door Alexa

Deze stappen zijn ook te vinden op de Backendless-website:
Deel 1
Deel 2

  1. Klik "Add New" onder Functions in de BROWSER-sectie. Verander "doSomething" in "getIntentName".
Slimme Huismonitoring Aangedreven door Alexa
  1. Wijzig de blokken zodat de functie eruitziet als in de afbeelding.
Slimme Huismonitoring Aangedreven door Alexa
Slimme Huismonitoring Aangedreven door Alexa

Dit haalt de intent-naam op basis van sample utterances. Ga terug naar API Services → <app-naam> → handle request in de browser-sectie. Maak variabelen en logica vanuit de System-sectie:

Slimme Huismonitoring Aangedreven door Alexa

Sla de intent-naam op in request-variabele. Vergelijk met intents. Bijvoorbeeld: als request "introduction" is, zet respond op "hallo! Ik kan regelen..." en Alexa leest dit voor.

Wijzig de blokken zoals getoond:

Slimme Huismonitoring Aangedreven door Alexa

Bij "LightsOn" intent: update ThingSpeak-kanaal naar '0' via HTTP GET en update apparaatstatus (1/0 afhankelijk van AAN/UIT). Hetzelfde voor LightsOff, FanOn, FanOff.

Slimme Huismonitoring Aangedreven door Alexa

Voor "Weather": lees uit temperatuur- en vochtigheidskanaal, sla op in respond. Voeg tekst toe voor duidelijke response:

Slimme Huismonitoring Aangedreven door Alexa

Voor "Camera" (snapshot woonkamer): draai PushingBox-scenario:

Slimme Huismonitoring Aangedreven door Alexa

Voor "Status": lees informatie uit statuskanalen van ThingSpeak:

Slimme Huismonitoring Aangedreven door Alexa

Voor "Notification" (alerts): lees uit alert-kanalen (brand, inbreker, bezoeker):

Slimme Huismonitoring Aangedreven door Alexa

Op basis van waarden uit notificatievelden worden alert-berichten opgeslagen in respond0. Geen notificatie = geen bericht.

Slimme Huismonitoring Aangedreven door Alexa

Na voorlezen notificatie: update '0' in notificatiekanalen zodat Alexa niet herhaalt. Tot slot: respond0/respond wordt hardop voorgelezen.

Slimme Huismonitoring Aangedreven door Alexa

LET OP: Na het maken van het model in Backendless, klik "Deploy Model" rechtsboven in de Codeless-editor om het model te deployen.

Stap 7: Alexa Skill Configureren in Amazon Developer Console

  1. Ga naar Amazon Developer Console en meld aan met Amazon-account.
  2. Ga naar Developer Console → ALEXA-tab → Alexa Skills Kit Get Started.
Slimme Huismonitoring Aangedreven door Alexa
  1. Maak Custom Skill-type, geef naam en invocation name.
  2. De intents en sample utterances staan in de onderstaande code.
{
  "languageModel": {
    "intents": [
      { "name": "AMAZON.CancelIntent", "samples": [] },
      { "name": "AMAZON.HelpIntent", "samples": [] },
      { "name": "AMAZON.StopIntent", "samples": [] },
      { "name": "Camera", "samples": [
        "please send a snapshot of my living room",
        "please send a snapshot of my home",
        "please send a photo of my living room",
        "please send a photo of my home"
      ], "slots": [] },
      { "name": "FanOff", "samples": [
        "turn off Fan", "switch off Fan", "turn off the Fan", "switch off the Fan"
      ], "slots": [] },
      { "name": "FanOn", "samples": [
        "turn on Fan", "switch on Fan", "turn on the Fan", "switch on the Fan"
      ], "slots": [] },
      { "name": "Introduction", "samples": [
        "what you can do", "what can you do", "what can you do for me"
      ], "slots": [] },
      { "name": "LightsOff", "samples": [
        "turn off lights", "switch off lights", "turn off the lights", "switch off the lights"
      ], "slots": [] },
      { "name": "LightsOn", "samples": [
        "turn on lights", "switch on lights", "turn on the lights", "switch on the lights"
      ], "slots": [] },
      { "name": "Notification", "samples": [
        "what are my notifications", "is there any notifications", "is there any updates", "read out my notifications"
      ], "slots": [] },
      { "name": "Status", "samples": [
        "what is my device status", "what is the status of my devices"
      ], "slots": [] },
      { "name": "Weather", "samples": [
        "what is the weather condition of my home",
        "what is the weather of my home",
        "what is the weather",
        "what is the temperature of my home",
        "what is the temperature"
      ], "slots": [] }
    ],
    "invocationName": "my home"
  }
}
  1. In Configuration-tab: selecteer HTTPS als Service Endpoint Type, vul Default URL in met de API-URL van Backendless.
Slimme Huismonitoring Aangedreven door Alexa
Slimme Huismonitoring Aangedreven door Alexa
  1. Selecteer de 2e optie in Certificate voor Default Endpoint in SSL Certificate. Je kunt de skill testen met de Test Simulator.
  2. Na succesvolle test: publiceer de skill met benodigde publicatie-informatie.

Stap 8: Eindinstallatie en Klaar!

Maak de schakeling zoals getoond:

Slimme Huismonitoring Aangedreven door Alexa
Slimme Huismonitoring Aangedreven door Alexa

Soms functioneert de ESP8266 niet goed door onvoldoende stroom. Hoewel niet in het schema vermeld, wordt aangeraden de ESP8266 vanuit een aparte 3,3V-bron te voeden. Als je een powerbank gebruikt, zorg dan dat je de spanning van 5V naar 3,3V verlaagt met een 3,3V-spanningsregelaar.

Upload programma naar ESP8266 en Arduino. De verbinding met de lamp is getoond; hetzelfde kan uitgebreid worden naar ventilator of andere apparaten.

Test je skill met Amazon Echo of echosim.io.

Je MOET de skill activeren met de invocation name (in mijn geval "my home"). Soms werkt het niet als je het zonder invocation name gebruikt, zoals ik in mijn video een paar keer getoond heb.

Veel plezier met de tutorial!

Dank je!

Code

Smart_bell_ESP8266.ino

Code voor ESP8266 om alerts te krijgen over inbreker en bezoeker

/* Smart bell en home security */
#include <ESP8266WiFi.h>
#include <String.h>
int intruder=0, guest=2;
const char* ssid = "SSID";
const char* password = "password";
const char* host = "api.thingspeak.com";
void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println(); Serial.println();
  Serial.print("Connecting to "); Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
  Serial.println(""); Serial.println("WiFi connected");
  Serial.println("IP address: "); Serial.println(WiFi.localIP());
}
int value = 0, x, y=0, z, k=0;
void loop() {
  delay(1000); ++value;
  Serial.print("connecting to "); Serial.println(host);
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; }
  Serial.print("Requesting URL: ");
  // Inbreker alert
  x = digitalRead(intruder);
  if(x==0) { y=0; }
  if(x==1 && y==0) {
    Serial.println("Sending Alert Pls Wait.....");
    delay(1000);
    String host1 = "api.pushingbox.com";
    client.print(String("GET ") + "/pushingbox?devid=<deviceID_intruderAlert> HTTP/1.1\r\n" + "Host: " + host1 + "\r\n" + "Connection: close\r\n\r\n");
    client.print(String("GET ") + "/update?api_key=<write_key_intruderAlert>&field1=1 HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
    delay(1000); y=1;
  }
  // Bezoeker alert
  long t1; z = digitalRead(guest);
  if(z==0 && (millis()>=t1+300000)) { k=0; }
  if(x==1 && k==0) {
    t1 = millis();
    Serial.println("Sending Alert Pls Wait.....");
    delay(1000);
    String host1 = "api.pushingbox.com";
    client.print(String("GET ") + "/pushingbox?devid=<deviceID_guestAlert> HTTP/1.1\r\n" + "Host: " + host1 + "\r\n" + "Connection: close\r\n\r\n");
    client.print(String("GET ") + "/update?api_key=<write_key_guestAlert>&field1=1 HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
    delay(1000); k=1;
  }
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) { Serial.println(">>> Client Timeout !"); client.stop(); return; }
  }
}
Home_monitor_arduino.ino

Code voor Arduino om apparaten te besturen

#include <SoftwareSerial.h>
#include <String.h>
#define Light 2
#define fan 3
char e; int p=0, q=0;
SoftwareSerial home_monitor(10, 11);
char control_data;
void setup() {
  home_monitor.begin(115200);
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}
void loop() {
  if (home_monitor.available()){
    control_data = home_monitor.read();
    e = control_data;
    Serial.print(control_data);
    // LICHT
    if(e=='0' && p==0) { digitalWrite(Light, LOW); p=1; }
    if(e=='1' && p==1) { digitalWrite(Light, HIGH); p=0; }
    // VENTILATOR
    if(e=='2' && q==0) { digitalWrite(fan, HIGH); q=1; }
    if(e=='3' && q==1) { digitalWrite(fan, LOW); q=0; }
  }
}
Home_Monitor_ESP8266.ino

Code voor ESP8266: vochtigheid/temperatuur updaten in ThingSpeak en besturingsinfo ophalen

#include <ESP8266WiFi.h>
#include <String.h>
#include "DHT.h"
#define DHTTYPE DHT11
#define dht_dpin 2
DHT dht(dht_dpin, DHTTYPE);
char c, e;
float temp, h;
String humidity, temperature, line;
int co=0;
const char* ssid = "SSID";
const char* password = "password";
const char* host = "api.thingspeak.com";
void setup() {
  dht.begin();
  Serial.begin(115200);
  delay(10);
  Serial.println(); Serial.println();
  Serial.print("Connecting to "); Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }
  Serial.println(""); Serial.println("WiFi connected");
  Serial.println("IP address: "); Serial.println(WiFi.localIP());
}
int value = 0;
void loop() {
  delay(1000); ++value;
  Serial.print("connecting to "); Serial.println(host);
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; }
  Serial.print("Requesting URL: ");
  // Mini Weerstation
  h = dht.readHumidity();
  temp = dht.readTemperature();
  if(temp < 50.0) { co=0; }
  if(temp >= 50.0 && co==0) {
    Serial.println("Sending Alert please wait.......");
    delay(1000);
    String host1 = "api.pushingbox.com";
    client.print(String("GET ") + "/pushingbox?devid=<deviceID_fireAlert> HTTP/1.1\r\n" + "Host: " + host1 + "\r\n" + "Connection: close\r\n\r\n");
    delay(1000);
    client.print(String("GET ") + "/update?key=<write_key_fireAlert>&field1=1 HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
    co=1;
  }
  humidity = String(h);
  temperature = String(temp);
  Serial.println(h); Serial.println(temp);
  client.print(String("GET ") + "/update?key=<write_key_humidity>&field1=" + humidity + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  client.print(String("GET ") + "/update?key=<write_key_temperature>&field1=" + temperature + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  // Besturingsinfo naar Arduino sturen
  client.print(String("GET ") + "/channels/<channelID_control>/field/field1/last.html HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) { Serial.println(">>> Client Timeout !"); client.stop(); return; }
  }
  while(client.available()){
    line = client.readStringUntil('\r');
  }
  Serial.print(line);
}

Schema's

Slimme Huismonitoring Aangedreven door Alexa
Slimme Huismonitoring Aangedreven door Alexa

Productieproces

  1. Slimme stadsmonitoring van luchtkwaliteit met LoRa
  2. Meerpositie-temperatuursensorsysteem voor slimme thuisintegratie
  3. K30 CO2-sensor: Real-time binnenluchtkwaliteitmonitoring met Arduino
  4. Slimme 3D-sensor: Stemgeactiveerde lampbesturing voor Amazon Echo
  5. Slimme Plantenwateringssysteem met Arduino Nano
  6. Alexa-ingeschakelde Arduino Thuiscontroller: Slimme Automatisering Made Simple
  7. Slim Temperatuurmonitoring Systeem voor Scholen: Nauwkeurig, Real-time en Beveiligd
  8. Arduino Nano Weerstation: Sensor Kit & OLED Display
  9. Slimme polsband bouwen met Arduino MKR GSM 1400 en Hologram IoT
  10. RFID‑gebaseerde huisbeveiliging: Lage‑kost, batterijvrije monitoringsoplossingen
  11. Hoe slimme huistechnologie het alledaagse leven transformeert