Variac O Matic (deel 2)

Een slimme thermostaat voor de Variac.

In dit uit twee delen bestaande blog beschrijf ik de ombouw van een Variac naar een Stappenmotor aangedreven Variac.

Deel 1 omvat de ombouw van de Variac en de koppeling met de motor
Deel 2 omvat de aansturing van de Variac.

Deel 2

Nadat de Variac is omgebouwd en de stappen motor is aangesloten op de plaats waar voorheen de draaiknop zat wordt het tijd om de stappen motor ook daadwerkelijk aan te gaan sturen.

Het is van belang dat de Limit Switches zo zijn ingesteld dat als de dial (het plastic lipje) de limit switch raakt, de dial nog een paar stappen extra verder moet kunnen draaien. Dit kun je doen door de arm van de limit switch iets te buigen. De reden hiervoor is dat een contact nooit echt meteen is gesloten omdat het oppervlak van de contacten nooit helemaal glad is. Hierdoor kan het gebeuren dat de limit switch doorgeeft dat er contact gemaakt is (de motor stopt), maar vervolgens is het contact weer verbroken. Om dit te voorkomen zal de motor nog een paar stappen extra draaien zodat we zeker zijn van een goed contact.

Onderdelen

De benodigde onderdelen voor de Variac Controller bestaan uit de volgende onderdelen.

    • Arduino UNO
    • CNC Shield
    • Motor Drivers

 

 

Controller

De controller bestaat uit een Arduino Uno met daarop vastgeklikt het Arduino CNC Shield. Op dit CNC Shield worden twee motor controllers geplaatst, één voor de Inlet Variac aansturing (Y) en één voor de Outlet Variac aansturing (X).plaatsing_controllers

Plaatsing van het CNC Shield op de Arduino Uno en de motor controllers op het CNC Shield. Voor onze controller plaatsen we alleen de bovenste 2 motor controllers (Outlet X en Inlet Y).

 

De overige onderdelen worden als volgt aangesloten:

variac-controller

Aansluiten Stappen Motor

aansluiting-motor

Onder het zwarte tonnetje (Elektrolytische Condensator) kun je 3 jumpers plaatsen in verticale positie. Omdat we voor de Variac stappen motoren gebruiken van 200 stappen plaatsen we één jumper over de middelste aansluiting. Hierdoor worden het aantal stappen vergroot naar 800. De jumper is op de foto nog niet geplaatst.

Als de motor de verkeerde kant opdraait, draai de motor aansluiting dan 90 graden. De kleur volgorde wordt dan van boven naar onder Blauw, Zwart, Groen, Rood.

Nadat alle componenten zijn aangesloten moeten we de firmware nog in de Arduino plaatsen.

Om dit te kunnen doen heb je de volgende software componenten nodig

De firmware kent globaal de volgende functies

  • Aansturen stappenmotor Inlet / Outlet afhankelijk van:
    • Outlet: Temperatuur en Luchtvochtigheid
    • Inlet: Afstand tussen ultrasoon Sensor en tentzijde
  • Wijzigen van instellingen en automatische opslag in EEPROM
  • Tent Open detectie
    Schakelt de Inlet uit en de Outlet naar ingestelde maximum.

Om de instellingen te kunnen wijzigen en controller acties zichtbaar te maken kun je gebruik maken van bijvoorbeeld Putty.

Koppel de Arduino UNO middels een geschikte USB kabel aan de PC. Als het goed is zal Windows de Arduino herkennen. Dit is zichtbaar in apparaatbeheer. In dit geval is de Arduino gekoppeld via COM14.herkenning-com-poort

 

upload-firmware

 

 

Selecteer de juiste .hex file, het type Arduino en de COM poort en kies Upload.

 

 

upload_completed

 

 

De upload is gereed.

 

 

 

Open Putty.putty-config

Kies kies onder Connection type voor Serial.

Vul de juiste COM poort in.

Vul bij speed 115200 in. Kies vervolgens voor Open.

 

 

De Arduino firmware wordt opnieuw gestart en er zal een soortgelijk scherm zichtbaar worden.

putty_screen_overview

Het sterretje voor de tekst ‘Tent is Closed’ zal knipperen als de controller actief is. Is de kleur van het sterretje rood, dan is er een DHT leesfout geconstateerd. Blijft hij rood dan heb je een probleem met de DHT sensor of aansluiting van de sensor.

De waarden zullen telkens worden bijgewerkt.

Daar waar L/I/H staat wordt bedoelde de Laagste, Initiële en Hoogste waarde.

Het Voltage % is ten opzicht van het Variac Voltage.

De Sw. State geeft de status weer van de Limit Switches of Soft Limits (ingestelde Min/Max).

L staat voor de Low Switch en H voor de High Switch. Rood geeft aan dat de switch actief is.

Achter de huidige temperatuur en humidity staan de minimum en optimale waarden vermeld.

Achter de huidige cm waarde staan de implosion, explosion en tent-open afstand vermeld.

De (P) geeft de voorkeur aan, in dit geval Humidity.

De voltages worden berekend vanuit de motor positie en Steps per Volt. Deze laatste wordt bepaald tijdens een firmware herstart en ná het zoeken van de Limit Switches.

Achter Inlet: en Outlet: zie je de uit te voeren actie(s) door de controller.

Als de Arduino niet via een USB kabel is gekoppeld moet de 12V adapter worden gebruikt om de Arduino van spanning te voorzien. Als je de Arduino IDE gebruikt, geef dan het commando $S-NOANSI. De informatie zal van onder naar boven weergegeven worden (scrolling)

Na het starten van de Arduino zullen de volgende stappen worden doorlopen:

  • Bij de allereerste eerste start zal worden gezocht naar de low én high limit switches en zullen standaard instellingen worden opgeslagen in de Arduino (EEPROM). Deze instellingen zijn achteraf te wijzigen. Bij een volgende start zal alleen naar de low limit switch worden gezocht.
  • De opgeslagen instellingen zullen bij iedere start worden gecontroleerd op corruptie en indien dat het geval is zal de voorgaande stap worden uitgevoerd. Blijven de instellingen corrupt dan zal de controller niet werken en de LED op de arduino snel gaan knipperen. In de Serial console zal het bericht “INVALID CRC, possible EEPROM Error!” zichtbaar zijn.
  • Als de instellingen niet corrupt zijn zal de stappenmotor vervolgens naar het ingestelde voltage draaien ($O-VINIT).
  • Vanaf dat moment zal iedere 1,5 seconden een Sensor meting worden verricht en afhankelijk van de waarden zal de Stappen motor de juiste Variac instelling proberen te handhaven als de condities dat toelaten.
  • De aansturing van de Inlet controller is standaard niet ingeschakeld (Inschakelen Inlet controller: $I-ENABLED=1)

Firmware Settings

Het is mogelijk om diverse instellingen te wijzigen in de firmware. Dit is mogelijk door een commando in te geven in de vorm $x-yyyy=z

De opbouw van het commando is als volgt

  • $
    Start van een nieuwe Instelling

  • x
    De groep waarop het commando betrekking heeft.

    • S = Systeem

    • I = Inlet Motor

    • T = Inlet Sensor

    • O = Outlet Motor

    • C = Outlet Sensor

  • yyyy
    De Setting naam, niet hoofdletter gevoelig.

  • z
    De nieuwe waarde voor de instelling
    Indien geen waarde wordt ingegeven zal de ingestelde waarde worden weergegeven.

De volgende instellingen zijn beschikbaar waarbij tussen haakjes de minimale, maximale of mogelijke waarden voor de setting is weergegeven.

[System]
Deze instellingen hebben betrekking op de firmware in het algemeen

  • $S-METRIC (0, 1)
    Standaard 1 (Metrisch). Waarden zijn in CM en Graden Celsius.
    Indien waarde 0 dan Inches en Fahrenheit.

  • $S-VARIACV (0, 230)
    Variac Input Voltage. Voltage dat uit je wandcontactdoos komt. In Nederland is dat 230V.

  • $S-ALERTPIN (2, 70)
    De plus zijde voor een LED dit zal gaan knipperen indien er problemen zijn geconstateerd die aandacht behoeven.
    Standaard is dit 13, een pin voor
    de ingebouwde LED op de Arduino.

  • $S-SLEEP (0, 60000)
    De pauze in milli seconden tussen iedere aansturing van de motoren. Hiermee bepaal je hoe snel de controller moet reageren op gewijzigde omstandigheden in het klimaat. De standaard waarde is 1500 (1,5 seconde). Hoe hoger deze waarde, hoe lastiger het voor de controller wordt tijdig bij te sturen.

  • $S-ANSI
    De seriële output zal standaard van ANSI stuurcodes worden voorzien waardoor de output beter te volgen is. Gebruik je de Arduino IDE Serial Output, gebruik dan het commando $S-NOANSI.

  • $S-NOANSI
    De seriële output zal geen ANSI stuur commando’s bevatten.

  • $S-SHOW= (S, I, O, C of T)
    Laat de Settings van één groep zien ( Systeem, Inlet, Outlet, C Outlet Sensor, T Inlet Sensor)

  • $S-CLS
    Maakt het uitvoerscherm leeg.

  • $S-RESET
    Reset de configuratie naar de originele toestand. Alle door de gebruiker gemaakte instellingen zullen worden overschreven!
    Bij een herstart zal de hoge Limit Switch worden gezocht en het aantal stappen worden bepaald noodzakelijk voor de berekeningen van het aantal motor stappen per volt.

[Inlet Motor]
Deze instellingen hebben betrekking op de Inlet motor. De Outlet motor kent dezelfde instellings- mogelijkheden.

  • $I-GOTO (0, 230)
    Goto Voltage. De stappen motor zal naar het gevraagde Voltage draaien. Indien dit voltage lager is dan de VLOW of hoger dan VHIGH dan zal de Variac niet meer reageren op automatische stuur commando’s omdat door zo’n GOTO actie de soft limit switches geactiveerd zullen worden. De automatische werking vindt dus alleen plaats indien het voltage zicht beweeg tussen het ingestelde laag- en hoge voltage.

    Om na een GOTO buiten deze waarden de Controller weer te activeren geef je een GOTO commando met een waarde tussen VLOW en VHIGH of het commando O-INIT en/of I-INIT

  • $I-INIT
    Zoek de Low Limit Switch positie en ga naar $I-INITV

  • $I-ENABLED (1, 0)
    Indien een waarde groter dan 0 wordt gebruikt zal de Inlet motor worden geactiveerd en de Ultrasoon sensor worden ingeschakeld.

  • $I-STEPPIN (2, 70)
    Motor Step pin

  • $I-VARIACV (0, 230)
    Variac Voltage, standaard waarde is $S-VARIACV

  • $I-DIRPIN (2, 70)
    Motor Direction pin

  • $I-ENAPIN (2, 70)
    Motor Enable pin. Het CNC Shield gebruikt voor alle motorcontroller dezelfde enable pin.

  • $I-LIMITPIN (2, 70)
    Limit Switch pin voor de Inlet Variac (hard limit)

  • $I-SPEED (100, 10000)
    Snelheid in Microseconden. Dit is de pauze tussen ieder stap die de motor maakt. Gebruik een waarde groter dan 100.

  • $I-HOMESPEED (100, 10000)
    Snelheid in Microseconden voor het vinden van de limit switches en in te stellen start Voltage

  • $I-MINV (0, 230)
    Het laagste Voltage dat de Variac mag leveren (soft limit)

  • $I-MAXV (0, 230)
    Het hoogste Voltage dat de Variac mag leveren (soft limit)

  • $I-INITV (0, 230)
    Initiële Voltage nadat de firmware is gestart

  • $I-STEPS (0, 6400)
    Aantal stappen van de motor. Deze waarde wordt automatisch bepaald tijdens het vinden van de limit switches en is noodzakelijk het bij benadering het aantal motor stappen te kunnen berekenen voor een gegeven Voltage.

  • $I-ADJSTEPS (0, 6400)
    Aantal stappen van de motor voor iedere correctie op de Variac. Je bepaald hiermee de stappen vertaald naar Voltage. Hoe lager deze waarde, hoe fijner de regeling, maar het kan ook langer duren alvorens de gewenste stand van de Variac is bereikt. Hoe hoger deze waarde, hoe meer de controller zal moeten bijsturen.

[Inlet Sensor]
Deze instellingen hebben betrekking op de Inlet Sensor. De Inlet Sensor is een Ultrasoon sensor waarmee door middel van geluid de afstand tot een object wordt bepaald. We gebruiken deze sensor om de afstand van een tent zijde te bepalen om actie te kunnen ondernemen als te tent te hol dan wel te bol komt te staan.

  • $T-TRIGGERPIN (2, 70)
    Trigger pin aansluiting

  • $T-ECHOPIN (2, 70)
    Echo pin aansluiting

  • $T-IMPLODEU (2, 400)
    Aantal centimeters/inches tussen Ultrasoon sensor en tentzijde dat wordt gezien als ‘imploding’. De tent wordt te ver naar binnen getrokken waardoor de naden onder stress komen te staan en de inhoud van de tent kleiner wordt.

    De Inlet zal sneller gaan draaien.

  • $T-EXPLODEU (2, 400)
    Aantal centimeters/inches tussen Ultrasoon sensor en tentzijde dat wordt gezien als ‘exploding’. De tent wordt te ver opgepompt waardoor de naden onder stress komen te staan en het klimaat in de tent naar buiten kan lekken. De inhoud van de tent zal wel zijn maximale grootte bereiken, maar de nadelen wegen daar niet tegenop.
    De Inlet zal langzamer gaan draaien.

  • $T-OUT2MAXU (2, 400)
    Aantal centimeters/inches tussen Ultrasoon sensor en tentzijde dat wordt gezien als ‘tent open‘. Dit moet minimaal 10 seconden het geval zijn. De Inlet zal worden uitgeschakeld en Outlet zal naar O-VHIGH gaan.

    Als gedurende 10 seconden de afstand weer kleiner is dan de ‘tent open’ afstand zal de controller de In- en Outlet opnieuw initialiseren en op de ingestelde start positie instellen. Het duurt dus maximaal 10 seconden na het sluiten van de Grow tent alvorens de controller weer actief wordt.

    Deze Setting probeert het lekken van het klimaat in de Grow Tent tegen te gaan door geen lucht meer in te blazen en harder te gaan afzuigen.

[Outlet Motor]

$O-………… (zie Inlet Motor)

[Outlet Sensor]
Deze instellingen hebben betrekking op de Outlet Sensor. De sensor levert meetgegevens voor de temperatuur (max. 80 graden C / 176 F) en luchtvochtigheid met een interval van 2 seconden.

Negatieve waarden zijn niet mogelijk met deze firmware.

  • $C-DHTPIN (2, 70)
    DHT22 Sensor data Pin

  • $C-MINT (0, 176)
    De minimale temperatuur waarop de firmware geen actie meer mag ondernemen die de temperatuur nog verder naar beneden zal brengen. Dit kan bijvoorbeeld het geval zijn als de Luchtvochtigheid te hoog is waardoor extra afzuiging gewenst is.

  • $C-OPTIMALT (0, 176)
    De firmware zal proberen de ingestelde temperatuur te handhaven door de Outlet sneller of langzamer te laten draaien.

  • $C-MINH (0, 100)
    De minimale luchtvochtigheid waarop de firmware geen actie meer mag ondernemen die de luchtvochtigheid nog verder naar beneden zou brengen. Dit kan bijvoorbeeld het geval zijn als de Temperatuur te hoog is waardoor extra afzuiging gewenst is.

  • $C-OPTIMALH (0, 100)
    De firmware zal proberen de ingestelde luchtvochtigheid te handhaven door de Outlet sneller of langzamer te laten draaien.

  • $C-PREFERH (0, 0)
    $C-PREFERT (1, 1)
    Het kan gebeuren dat de Luchtvochtigheid het noodzakelijk maakt om de Outlet sneller te laten draaien terwijl de temperatuur het noodzakelijk maakt om de Outlet langzamer te laten draaien. De beslissing zowel sneller en langzamer is een conflict dat kan worden opgelost door één van de twee voorrang te geven.

    • Indien Temperatuur ( $C-PREFERT=1 ) dan zal bij een conflicterende actie de Temperatuur actie voorrang krijgen.

    • Indien Luchtvochtigheid ( $C-PREFERH=0 ) dan zal bij een conflicterende actie de Luchtvochtigheid actie voorrang krijgen.

Een waarde kan worden gewijzigd door het ingeven van een bepaalde Setting met de nieuwe waarde.

Voorbeelden

$T-IMPLODEU=30
De implode waarde zal worden gewijzigd naar 30cm

$C-OPTIMALH=50
De optimale luchtvochtigheid zal worden gewijzigd naar 50%

$C-PREFERH=0
De luchtvochtigheid waarden hebben voorrang op beslissingen van de controller.

$C-PREFERT=1
De temperatuur waarden hebben voorrang op beslissingen van de controller.

$C-PREFERT of $C-PREFERT=
Geeft de ingestelde waarde weer voor PREFER. Indien 0 dan heeft Luchtvochtigheid voorrang, indien 1 dan de Temperatuur.

De wijzigingen worden automatisch opgeslagen zodat ze niet verloren gaan en zullen onmiddellijk actief worden.
Als de opgeslagen instellingen corrupt raken dan zal de controller proberen om de standaard waarden opnieuw op te slaan. Hoewel er meer ruimte voor opslag beschikbaar is dan noodzakelijk zal de controller bij een EEPROM defect niet proberen de configuratie op een andere niet corrupte plek op te slaan.

Je kunt volgens de specificaties minimaal 100.000 keer een instellingen wijzigen alvorens de kans op corruptie van de EEPROM aanwezig is.

Er vind geen uitgebreide controle plaats op de waarden die worden ingegeven. Dit is bewust achterwege gelaten omdat de grootte van de firmware beperkt is en wijzigingen in de instellingen zelden zullen plaatsvinden.

Wel wordt gecontroleerd of de ingegeven waarde binnen het bereik ligt van de ingegeven setting en of een setting bestaat.

Er wordt bijvoorbeeld niet gecontroleerd of een pin waarde al in gebruik is voor een andere setting of dat een ingegeven laag Voltage hoger is dan het hoge Voltage.

Bedenk dat er altijd nog een $S-RESET commando is om alles weer naar ‘fabrieks’ instelling te veranderen.

De Praktijk

De Variac O Matic draait hier inmiddels naar tevredenheid. Het was wel even zoeken naar de juiste instellingen en afhankelijk van het klimaat zullen de motoren niet te vaak bewegen. Mijn Inlet heeft minder vermogen dan de Outlet, maar omdat ik de Outlet heb beperkt tot +/- 90V (stil) kan de Inlet het nog net bijbenen.

De controller wordt zeer actief als de optimale RLv en Temperatuur dicht bij elkaar liggen. Als de optimale RLv (voorkeur) bereikt wordt dan zal de temp meestal ook lager worden dan de optimaal ingestelde waarde. Hierdoor zal de Outlet Ven weer langzamer gaan draaien om de temp te verhogen. De RLv gaat dan ook omhoog en omdat die voorrang heeft gaat de VEN weer sneller draaien om de RLv naar beneden te krijgen. Ook de tent open detectie werkt nog niet zoals het zou moeten. Iets voor een volgende firmware versie.

Omdat ik nog niet precies weet of het klimaat beter is als de tent niet strak staat is er nog geen optie die de Outlet langzamer laat draaien als de Inlet het niet bij kan benen. Voor de tent zou het wel beter zijn. Strak getrokken naden laten ook sneller licht door, zeker als de Outlet door iedere porie van de tent lucht probeert te krijgen.

Daarnaast heb ik het idee dat bij een strak getrokken tent de Inlet luchtstroom linea recta richting Outlet gaat en daarbij de gemakkelijkste weg kiest. Maar omdat ik nog geen ‘rook’ test heb gedaan kan ik dat nog niet bevestigen.

Toen alles nog handmatig ging wilde het nog wel eens gebeuren dat ik de Inlet toch net iets te snel had ingesteld zodat, meestal pas na een paar uur, de tent toch te bol kwam te staan en het klimaat behoorlijk naar buiten lekte. Dat zal dus niet snel meer gebeuren.

simons_cat_1

Er kunnen geen rechten worden ontleend aan het gebruik van de firmware. Evenmin is de auteur verantwoordelijk voor mogelijke gevolgen voortkomend uit het gebruik van de instructies en/of software of delen daarvan. Door gebruik te maken van de software en/of instructies of delen daarvan stem je in met deze rechten.

Download software voor Variac O Matic

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Anti-spam: complete the taskWordPress CAPTCHA