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 zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

Onderdelen en benodigdheden

Espressif ESP8266 ESP-01 × 1
Arduino Nano R3 × 1
Microchip Technology ATtiny85 × 1
DHT22 Temperatuursensor × 1
Servo's (Tower Pro MG996R) × 1

Apps en online diensten

  • Arduino IDE

Over dit project

Winter is coming

Toen mijn vrouw en ik vorig jaar ons eerste kind kregen, kochten we een elektrische estufa om de directe omgeving van onze dochter warm te houden. Wij verhuisden de estufa mee van kamer naar kamer, denkend dat we super-efficiënt waren met punt-van-gebruik klimatregeling. Een maand later was de energierekening dubbel zo hoog – het had goedkoper uitgepakt om het hele huis met de gas-CV ketel te verwarmen.

Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

Deze winter upgrade ik naar een WiFi-thermostaat voor afstandsbediening. Handiger, maar we verwarmen nog steeds het hele huis terwijl we meestal in één deel wonen.

Slimmer werken

Uit de logs van de bewegingssensoren (die de verlichting sturen) blijkt dat we maandag t/m vrijdag 4-5 uur 's avonds beneden zijn en om 9 uur naar boven gaan slapen. Weekends verschillen, maar de werkdagen lopen als een klokje (vooral met een 10-maanden-oude op strikt schema).

Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688
Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

Multi-zone HVAC-systemen met draadloze duct-klappen zijn duur en de software voelt als een nabeschouwing. Ik had al WiFi-temperatuursensors en wilde servos in een project gebruiken. Alles wat ik nodig had: WiFi-verbonden servos die duct-ventilaties open/dicht doen – makkelijk toch?

Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

MediaTek's LinkIt™ Smart 7688

De LinkIt Smart 7688 Duo HDK is een WiFi-microprocessor met OpenWRT en een onboard Arduino-compatibele microcontroller. Perfect: alle I/O-pins voor sensoren en servos, plus WiFi om met mijn bestaande temperatuursensors te praten. Omdat het OpenWRT met uHTTPd draait, kan de WebApp direct op de LinkIt draaien – een volledig zelfstandig pakket.

Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688
Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

LinkIt Smart 7688 HDK instellen

Eerste keer een board met ingebouwde WiFi – ik verwachtte een steile leercurve. Gelukkig is setup 3 stappen:

  1. LinkIt aanzetten en verbinden met zijn WiFi-accesspoint vanaf je computer
  2. Inloggen op de webinterface en je eigen WiFi-instellingen invoeren
  3. Het board "LinkIt Smart 7688 Duo" toevoegen in de Arduino IDE

Klaar! Je kunt sketches via seriële poort uploaden of via WiFi (handig later). De getting started en developers guides zijn nuttig.

Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

Om de microcontroller WiFi rechtstreeks in je sketch te laten gebruiken, ssh naar de HDK en zet een bit om Arduino Yun-bibliotheekcompatibiliteit in te schakelen.

Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688
Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

WiFi-client en servocontroller

Dankzij Yun Bridge-bibliotheekcompatibiliteit en Arduino IDE is bestaande code makkelijk aan te passen. De HDK polt de onboard-webserver voor de ventilatiestand (boven, beneden, heel huis) en stuurt de twee servos daarbij aan. In de video draaide dit op een Raspberry Pi 2, maar ik porteerde de WebApp naar de LinkIt (code bijgevoegd).

Mijn WebApp draait op PHP. Installeer via opkg (inbegrepen in OpenWRT op LinkIt):

opkg update
opkg install php7 php7-cgi

Update /etc/config/uhttpd om PHP te interpreteren (regel toevoegen) en herstart uHTTPd.

Hardware

De servo-arm is direct aan de ventilatie bevestigd. Ik maakte een aluminiumbeugel met RVS-afstandsbusjes om de servo te fixeren. Nog iets spel – ik ga tyraps toevoegen voor permanentere montage.

Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688
Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

Software

De build bestaat uit drie componenten:

  • Temperatuursensors in huis sturen periodiek updates naar de uHTTPd-webserver op de LinkIt.
  • Een WebApp op de LinkIt toont de staat en laat handmatige herconfiguratie van ventilaties toe.
  • De MCU op de LinkIt stuurt de ventilaties om warme lucht boven of beneden te sturen afhankelijk van tijdstip.
Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

De tempsensors zijn ATtiny85's of Arduino Nano's met DHT11/22, die data via ESP8266 (software serial) naar de webserver sturen. Ik heb een uitgebreide write-up over die sensors (oorspronkelijk fase II van mijn punt-van-gebruik airco-project).

De LinkIt HDK zit op de zolder aangesloten op de duct-ventilaties. Op de OpenWRT-kant updatet een cronjob het tekstbestand vent.txt. De MCU-kant (Arduino sketch) checkt dit bestand periodiek en stuurt de ventilaties aan.

Voor status en handmatige bediening bouwde ik een WebApp gehost op de LinkIt. Met dyndns en port forwarding ben ik van buitenaf bereikbaar.

Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688
Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688
Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

Ruimte voor verbetering

Vanwege koude nachten moest ik snel deployen – enkele concessies:

  • Hardware: 3D-print proper servobeugels (huidige hack-job heeft spel). De RC-servo heeft plastic tandwielen die niet jaren mee gaan; ik swap ze voor metalen tandwielen.
  • Toekomst: extra WiFi-servos per kamer, allemaal terug naar één LinkIt.
  • Tempsensors dumpen nu naar CSV voor grafieken. Leuk: verwarming vroeger aanzetten bij koud huis, maar mijn WiFi-thermostaat heeft nog geen API. Ook koppeling aan home automation voor op bezetting gebaseerde ventilatieregeling (bewegingssensors) ipv vast tijdschema – handig voor weekends.

Code

LinkIt Smart Duo WiFi Vent C/C++

Deze sketch gebruikt de Bridge en HTTP Client bibliotheken van de Arduino Yun om een webserver te polen en HVAC-ventilaties open/dicht te doen.

/* Adapted from Sweep servo example by BARRAGAN <https://barraganstudio.com> and Yun HTTP Client example by Tom Igoe <https://www.arduino.cc/en/Tutorial/HttpClient> */
/* Code Adapted for HAI (Home Automation w/ Intelligence) by Buddy Crotty */
#include <Servo.h>
#include <Bridge.h>
#include <HttpClient.h>
Servo upservo;
Servo downservo;
int uppos = 0;
int downpos = 0;
const char* host = "192.168.1.80";
int dopenangle = 80;
int dcloseangle = 0;
int uopenangle = 140;
int ucloseangle = 0;

void setup() {
  upservo.attach(9);
  downservo.attach(10);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
  digitalWrite(13, HIGH);
}

void wholehouse() {
  if (downpos <= dcloseangle) {
    for(downpos = dcloseangle; downpos <= dopenangle; downpos += 1) {
      downservo.write(downpos);
      delay(20);
    }
  }
  if (uppos <= uopenangle) {
    for(uppos = ucloseangle; uppos <= uopenangle; uppos += 1) {
      upservo.write(uppos);
      delay(20);
    }
  }
}

void downstairs() {
  if (downpos <= dopenangle) {
    for(downpos = dcloseangle; downpos <= dopenangle; downpos += 1) {
      downservo.write(downpos);
      delay(20);
    }
  }
  if (uppos >= ucloseangle) {
    for(uppos = uopenangle; uppos >= ucloseangle; uppos -= 1) {
      upservo.write(uppos);
      delay(20);
    }
  }
}

void upstairs() {
  if (uppos <= uopenangle) {
    for(uppos = ucloseangle; uppos <= uopenangle; uppos += 1) {
      upservo.write(uppos);
      delay(20);
    }
  }
  if (downpos >= dcloseangle) {
    for(downpos = dopenangle; downpos >= dcloseangle; downpos -= 1) {
      downservo.write(downpos);
      delay(20);
    }
  }
}

void loop() {
  HttpClient client;
  String cmd = "https://";
  cmd += host;
  cmd += "/vent.txt";
  client.get(cmd);
  while (client.available()) {
    int c = client.read();
    if (c == '2') upstairs();
    if (c == '1') downstairs();
    if (c == '0') wholehouse();
  }
  delay(60000);
}

WiFi Temp Sensor C/C++

Verbonden temperatuur- en vochtigheidssensor. Logt data naar centrale Home Automation-server.

/* Code Adapted for HAI by Buddy Crotty */
const char* host = "192.168.1.80";
const char* devID = "downstairs";
#include <SoftwareSerial.h>
SoftwareSerial ser(10, 11);
long utime = 300000;
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  ser.begin(9600);
  ser.println("AT+RST");
  delay(10);
  dht.begin();
  Serial.println("Giving everything a chance to warm up");
  Serial.println("|-------------------------|");
  Serial.print("|");
  for(int x = 0; x < 25; x++) { Serial.print("#"); delay(1000); }
  Serial.println("|");
  Serial.println("Done");
}

void loop() {
  float t = dht.readTemperature(true);
  int h = dht.readHumidity();
  float hi = dht.computeHeatIndex(t, h);
  Serial.print("Temperature: "); Serial.print(t); Serial.print(" *F\t");
  Serial.print("Heat Index: "); Serial.print(hi); Serial.println(" *F");
  Serial.print("Humidity: "); Serial.print(h); Serial.println("%\t");
  Serial.print("...connecting to "); Serial.println(host);

  String cmd = "AT+CIPSTART=\"TCP\",\""; cmd += host; cmd += "\",80";
  ser.println(cmd);
  delay(1000);
  if(ser.find("Error")) { Serial.println("AT+CIPSTART error"); return; }

  String getStr = "GET /tempupdate.php?ID="; getStr += devID;
  getStr += "&field1="; getStr += t;
  getStr += "&field2="; getStr += h;
  getStr += "&field3="; getStr += hi;
  getStr += "\r\n\r\n";
  Serial.print("Sending data URL: "); Serial.println(getStr);

  cmd = "AT+CIPSEND="; cmd += String(getStr.length());
  ser.println(cmd);
  if(ser.find(">")) { ser.print(getStr); Serial.println("Success!"); }
  else { ser.println("AT+CIPCLOSE"); Serial.println("Connection Failed"); }

  Serial.print("Next update in "); Serial.print(utime / 1000); Serial.println(" seconds");
  delay(utime);
}

Vent.php PHP

Status controleren en handmatig ventilaties overschrijven.

<html> <head> <style> ... </style> <link rel="manifest" href="manifest.json"> </head> <body> <div align="center"> <a href="vent.php?zone=2" class="myButton">Upstairs Only</a><br><br> <a href="vent.php?zone=0" class="myButton">Whole House </a><br><br> <a href="vent.php?zone=1" class="myButton">Downstairs Only</a> <br><br> <?php ... ?> </div> </body> </html>

LinkIt Smart Vent Android WebApp JSON

Manifest voor Chrome op Android om de ventilatiecontroller als webapp te openen.

{ "name": "LinkIt Smart Vent", "icons": [...], "start_url": "vent.php", "display": "standalone", "orientation": "portrait" }

Schema's

ATtiny85 of Arduino Nano leest temperatuur via DHT11/22 en WiFi via ESP8266.

Slimme zonale klimaatregeling met MediaTek LinkIt™ Smart 7688

Productieproces

  1. Geïntegreerde QR, RFID en Temperatuurverificatie Toegangscontrolesysteem
  2. Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
  3. Zelfgemaakte Arduino TV-afstandsbediening – Batterij, 3D-geprinte behuizing
  4. Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
  5. Twee Stappenmotors Sturen met Arduino Nano & Joystick – Simpele Tutorial
  6. Een Arduino LED besturen met Cortana via Bluetooth op Windows 10
  7. Kwaliteitscontrole Verhogen: 3D‑Geprint Tooling Verbetert Productieprecisie
  8. GÖPEL verbetert kwaliteitscontrole in auto-industrie met Universal Robots' UR10e cobot
  9. Slim inkoop: AI samensmelten met menselijk inzicht
  10. Millport SmartLathez 1740 CNC Draaibank – Precisie & Vermogen
  11. DATA MODUL lanceert 23,1″ ultra‑slank TFT-display met slimme Wi‑Fi‑besturing