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

DIY Slimme IoT-apparaat: Bouw met ATmega32U4, ESP8266 & Sensoren

Onderdelen en Benodigdheden

Onderdeel Aantal
Microchip ATmega32U4 1
Espressif ESP8266 ESP-12E 1
16 MHz Kristal 1
Power MOSFET N-kanaal 4
Spanningsregelaar Module 1
DHT11 Temperatuur & Vochtigheidssensor 1
DS18B20 Waterdichte Temperatuursensor (1-Wire) 1
Waterdetectie Sensor 1
Arduino LCD Scherm (128x64 Graphic) 1
Fotoweerstand (LDR) 1

Benodigde Tools en Machines

  • 3D-printer
  • Lasersnijder

Apps en Online Services

  • Autodesk Fusion 360
  • Arduino IDE

Over dit Project

Inleiding

Geïnspireerd door Caleb Harper's TED Talk over digitale landbouw (MIT OpenAg): "What if we could grow delicious, nutrient-dense food, indoors anywhere in the world?"

Ik bouw een "grow box" / incubator die ideaale klimaatomstandigheden creëert: precies licht, voedingsstoffen, vocht, temperatuur. Doel: zonnelicht-emulator, irrigatiesysteem (aeroponics/fogponics), automatische voedingsdosing, waterkwaliteitssensoren (pH, TDS), waterverversing, luchtbehandeling – alles in één elegant ontwerp.

Geplande Technologieën

  • Grow LED-licht: Rood (650nm) + Blauw (450nm) voor vegetatieve en bloeifase.
  • Ultrasoon Verstuiver: Aeroponics – voedingsrijke mist als irrigatie.
  • Automatische Voedingsdosing: Precies doseren wanneer planten het nodig hebben.
  • Water Sensor Systeem: pH en TDS sensoren voor gebalanceerde voedingsoplossing.
  • Water Verversen Systeem: Automatische waterwisseling per knopdruk.
  • Lucht Regeling: Temperatuur/vochtigheid regeling via DHT22/DHT11 + ventilator + spoel.
  • Mobiele App: Realtime data, grafieken, alerts, instellen van klimaat.

Bestaande systemen hebben nadelen: te groot, te klein, te duur, maar 1 gewas tegelijk. Ik wil een open-source systeem met de beste features.

Experimenten

Planten kweken neemt weken tot maanden. Ik startte experimenten vroeg om de beste groeimethode te vinden:

  • Groep 1: Aarde + Zonlicht (natuurlijk)
  • Groep 2: Mist + Zonlicht
  • Groep 3: Aarde + Grow LED
  • Groep 4 (HERO): Mist + Grow LED (mijn toekomstige systeem)

Zaailingen (gekruide mengsel) gekeimt in plastic container met vochtig papierhanddoek. Na 1,5 week waren bijna alle zaden gekeimt. Beste plantjes geselecteerd (dikkere stam). Overgeplaatst naar kokosvezels (zwellen 6x op bij water). Na een week zichtbare groei, wortels zichtbaar. Daarna overgeplaatst naar aarde en kleiballen voor fog-test.

Resultaat: weinig planten overleefden in fog-systeem – mist houdt kleiballen/aarde niet vochtig genoeg.

Paasvakantie & Herstart

Tijdens paasvakantie was lab gesloten, systemen uit – alle planten gedood. Met verse moed nieuw systeem met Steenwol (Rock Wool) als groeimedium (van IKEA). Nieuwe zaden gekeimt in steenwol. Tegelijkertijd fog-systeem verbeterd (langere draaitijd) om te testen of zaden alleen met fog kunnen ontkiemen.

Elektronica Ontwerp & Productie

Alles op papier geschetst: features, pin-gebruik, microprocessor keuze. Keuze tussen satshakit (ATmega328P, 16MHz, kristal, Arduino UNO compatibel, ~€7-9) en FabLeo (ATmega32U4, hardware USB). Gekozen voor FabLeo (nieuwe chip uitproberen).

Ontwerp in EAGLE (Schematic + Board Layout). Belangrijk: logische verbindingen in schematic, labels gebruiken voor netnamen (GND, VCC, etc.). Polygon voor GND-vlak op board layout bespaart routing.

PCB gefreesd op CNC (Roland via FabModules): boven- en onderkant (onderkant gespiegeld). Vervolgens gesoldeerd, met multimeter na elke component getest op kortsluiting. Een foutje (VCC-GND kortsluiting) gevonden en gerepareerd met mesje.

Step-up spanningsregelaar (12V→24V voor ultrasoon verstuiver) op onderkant gemonteerd en gekalibreerd. WiFi-board (van Networking-week) ook op onderkant. Resultaat: "The BEAST" – een dubbelzijdige PCB met alle functionaliteit.

Download Bestanden

  • GIY Schematics (.sch)
  • GIY Layout (.brd)
  • Board#1 Internal/External Cut (.png)
  • Board#2 Internal/External Cut (.png)

Wiring & Embedded Programmering (I/O Apparaten)

Programmeren via Arduino IDE: Arduino als ISP programmer → Burn Bootloader (board = Arduino Leonardo) → Blink test → Sensoren integreren.

DHT11 Temperatuur & Vochtigheid

Goedkoop, 3-5V, 2,5mA max, 20-80% RH (±5%), 0-50°C (±2°C), 1 Hz sample rate. Aansluiting: VCC, GND, Data (digitale pin). Code met DHT.h bibliotheek.

DS18B20 1-Wire Temperatuursensor

-55 tot +125°C, ±0,5°C, 9-12 bit, uniek 64-bit serienummer. Eén datapin + 4,7k pull-up weerstand (vergeten op PCB → handmatig gesoldeerd). Bibliotheken: OneWire.h, DallasTemperature.h.

Eerste sensor stopte na integratie → nieuwe sensor zelf waterdicht gemaakt met krimpkousjes ("Mama ama engineer!").

LDR (Lichtgevoelige Weerstand)

Weerstand daalt bij meer licht (1MΩ donker → paar kΩ helder). Analog uitgang op analoge pin. ADC converteert 0-5V naar 0-1023. Code met drempelwaarden: Donker (<100), Dim (<200), Licht (<500), Helders (<800), Zeer helder (>800).

Waterniveausensor (Zelfgemaakt)

Geen waterniveausensor in voorraad → Bodemvochtigheidssensor hergebruikt (meet geleiding). Kalibratie: 0 = LEEG, ~800 = LAAG, >900 = VOL.

Grafisch LCD Display (128x64)

Normaal veel pinnen, maar via ST7920 controller alleen 3 digitale pinnen nodig. Bibliotheek: U8glib. Pinnen: 4, 12, 6. FabLab logo als bitmap weergeven (BMP → HEX array via LCD Assistant).

pH Sensor (logo v1.1)

Lastigste sensor. Probe = mini-batterij (mV niveau) → op-amp bordje nodig (0-5V voor Arduino). Kalibratie met bufferoplossingen (pH 4.01, 6.86, 9.18).

  • Offset: Kortsluit BNC, potmeter bij BNC op 2,5V zetten (pH 7 = 2,5V = analogRead 511).
  • Stap (slope): Probe in buffer pH 4.01, spanning noteren (bv. 3,05V). Stap = (2,5 - 3,05) / (7 - 4,01) ≈ -0,18 V/pH.

Formule: pH = 7 + ((2.5 - voltage) / 0.18).

MOSFET Uitgangen

  • RGB LED strip → steeds aan (GROW_LIGHT pin HIGH in setup).
  • Ultrasoon verstuiver (FOG_PUMP) → aan als waterniveau OK, uit als LEEG.

Finale Geïntegreerde Code

#include "dht.h"
#include "U8glib.h"
#include <OneWire.h>
#include <DallasTemperature.h>

#define DHT11_PIN 2
#define ONE_WIRE_BUS 3
#define WATER_LEVEL A4
#define LDR_PIN A3
#define PH_PIN A5
#define GROW_LIGHT 10
#define FOG_PUMP 13

int waterLevel, LightLevel, pH;
dht DHT;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature waterTemp(&oneWire);
U8GLIB_ST7920_128X64 u8g(4, 12, 6, U8G_PIN_NONE);

// FabLab logo bitmap array (1024 bytes)
const unsigned char logo[] PROGMEM = { ... };

bool first = true;
float hum = 0.0;
double T = 0.0;

void dht_test(float *humPerc);

void setup() {
  waterTemp.begin();
  pinMode(GROW_LIGHT, OUTPUT);
  pinMode(FOG_PUMP, OUTPUT);
  digitalWrite(GROW_LIGHT, HIGH);
  first = true;
  // Display kleurmodus instellen
  if (u8g.getMode() == U8G_MODE_R3G3B2) u8g.setColorIndex(255);
  else if (u8g.getMode() == U8G_MODE_GRAY2BIT) u8g.setColorIndex(3);
  else if (u8g.getMode() == U8G_MODE_BW) u8g.setColorIndex(1);
  else if (u8g.getMode() == U8G_MODE_HICOLOR) u8g.setHiColorByRGB(255,255,255);
  // Logo tonen bij opstart
  u8g.firstPage();
  do { u8g.drawBitmapP(32, 0, 16, 64, logo); } while (u8g.nextPage());
  dht_test(&hum);
}

void RefreshDisplay(float *humPerc, double *T, int *WL, int *LL, int *pH_value) {
  u8g.setFont(u8g_font_fub11);
  u8g.setFontRefHeightExtendedText();
  u8g.setDefaultForegroundColor();
  u8g.setFontPosTop();
  u8g.drawStr(4, 0, "Vocht%");
  u8g.setPrintPos(68, 0); u8g.print(*humPerc);
  u8g.drawStr(4, 15, "Temp");
  u8g.setPrintPos(68, 15); u8g.print(*T);
  u8g.drawStr(4, 30, "Water");
  if (*WL == 0) {
    u8g.drawStr(68, 30, "LEEG!");
    digitalWrite(FOG_PUMP, LOW);
  } else {
    if (*WL < 800) u8g.drawStr(68, 30, "LAAG");
    else { digitalWrite(FOG_PUMP, HIGH); u8g.drawStr(68, 30, "HOOG"); }
  }
  if (*LL < 100) u8g.drawStr(68, 45, "Donker");
  else if (*LL < 200) u8g.drawStr(68, 45, "Dim");
  else if (*LL < 500) u8g.drawStr(68, 45, "Licht");
  else if (*LL < 800) u8g.drawStr(68, 45, "Helder");
  else u8g.drawStr(68, 45, "ZeerHelder");
  double voltage = 5.0 / 1024.0 * (*pH_value);
  float Po = 7 + ((2.5 - voltage) / 0.18);
  u8g.drawStr(4, 45, "pH");
  u8g.setPrintPos(28, 45); u8g.print(Po);
}

void loop() {
  waterTemp.requestTemperatures();
  T = waterTemp.getTempCByIndex(0);
  waterLevel = analogRead(WATER_LEVEL);
  LightLevel = analogRead(LDR_PIN);
  pH = analogRead(PH_PIN);
  int chk = DHT.read11(DHT11_PIN);
  hum = DHT.humidity;
  dht_test(&hum);
  if (first) { first = false; }
  else {
    u8g.firstPage();
    do { RefreshDisplay(&hum, &T, &waterLevel, &LightLevel, &pH); } while (u8g.nextPage());
  }
}

void dht_test(float *humPerc) { delay(1000); }

3D-Ontwerp & 3D-Printen

Veel 3D-onderdelen: watercontainer, netpotten, bodem, afgeronde hoeken. Software: Fusion 360. Printers: BigRep (1m³, watercontainer, bodem) en Ultimaker 2+ (netpotten, hoeken). Materiaal: PLA. Instellingen aangepast per onderdeel (laagdikte, infill, support, temperatuur, koeling). Watercontainer had gaten door ondersteuning → later waterdicht gemaakt via vacuümvormen.

2D-Ontwerp & Lasersnijden

Acrylaten delen (groen voor zijkanten, wit voor voor/achter, transparant voor boven) uit Fusion 360 geëxporteerd als DXF, bewerkt in Rhino, gelaserd op Epilog Fusion 60W (plexiglas 5mm).

CNC Frezen

Structuurwanden uit 18mm multiplex op e(sign Easy Worker MasterPro 2513 (2600x1400x300mm). Ook vorm voor vacuümvormen (10mm hout, 7 lagen) gefreesd.

Vacuümvormen (Moulding & Casting)

Watercontainer waterdicht maken: 7 gelaagde houten vorm, eerste dunne laag vacuümvormen, met silicon besproeien, daarna echte container erop vacuümvormen. Resultaat: perfecte, verwijderbare waterdichte inlay.

Alles Monteren

Structuur monteren, RGB LED strips zagen/solderen, sensoren aansluiten, PCB in elektronica-compartment vastzetten. Resultaat: werkend, mooi "GIY" (Grow It Yourself) systeem.

Eindpresentatie

Project gedocumenteerd op Fab Academy 2017: archive.fabacademy.org. Licentie: CC BY-NC-SA 4.0.

Productieproces

  1. Aangepaste 4×4 Boter-Kaas-Eieren Visitekaartje PCB – Ontwerp, Bouw en Code Handleiding
  2. Meerpositie-temperatuursensorsysteem voor slimme thuisintegratie
  3. DIY Soldeerbout-controller voor 862D+ — Precisie & Betrouwbaarheid
  4. MotionSense: Slimme inbraakdetectie met Arduino en ESP8266
  5. 3D-Printer Brandpreventie: Slimme Sensor Veiligheidssysteem
  6. Web-IoT Meter Bouwen met Arduino, Yaler en IFTTT
  7. Arduino-gebaseerde Afstotende Magnetische Levitatie: Eenvoudige Schakeling & DIY Handleiding
  8. Geavanceerde Remote-gecontrolleerde Gripper Robot voor Precisiehantering
  9. High-Performance Arduino Weerballon Datalogger
  10. ArduFarmBot Deel 2: Een Extern IoT-besturingsstation Bouwen
  11. CoroFence Thermische Detector: Geavanceerde PIR-sensor & IoT-integratie