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

Arduino gekoelde spiegelhygrometer

Componenten en benodigdheden

Arduino UNO
× 1
12V 10A voeding
× 1
12V 40 mm krachtige ventilator
× 1
12V 40 mm TEC
× 1
40 mm koellichaam
× 1
kleine spiegel
× 1
Thermisch geleidende lijm
× 1
Thermische pasta
× 1
BTS7960-motorstuurprogramma
× 1
3 mm LED:geel
× 1
OPT101 lichtsensor
× 1
IRF520 MOSFET-module
× 1
Maxim Integrated DS18B20 Programmeerbare resolutie 1-draads digitale thermometer
× 1
SparkFun-uitbraak van vochtigheids- en temperatuursensor - Si7021
× 1

Benodigde gereedschappen en machines

Hot lijmpistool (algemeen)

Apps en online services

Arduino IDE

Over dit project

Over

Het meten van luchtvochtigheid kan op veel verschillende manieren. De meest populaire methode is het gebruik van een capacitieve vochtigheidssensor. Helaas verliezen deze sensoren snel aan nauwkeurigheid wanneer ze continu in een zeer vochtige omgeving worden gebruikt. Een Chilled Mirror Hygrometer heeft hier geen last van en is ook veel nauwkeuriger, vooral in het hoge luchtvochtigheidsbereik. Helaas kostte een commerciële gekoelde spiegelhygrometer letterlijk duizenden dollars. De basishandeling is echter vrij eenvoudig, dus het is mogelijk om er zelf een te maken. Het zal niet dezelfde nauwkeurigheid van 0,1 graad hebben als een commercieel apparaat, maar voor de meeste doeleinden zal het goed genoeg zijn, en zeker nauwkeuriger dan een capacitieve sensor.

Dit project is een proof of concept en zeker niet productieklaar. Er kunnen veel verbeteringen worden aangebracht, maar het bewijst dat het werkt.

Hoe het werkt

Een Chilled Mirror Hygrometer gebruikt een Peltier (TEC) om een ​​reflecterend oppervlak af te koelen totdat condensatie optreedt. De condensatie wordt gedetecteerd met een lichtbron en een optische sensor. De temperatuur van het spiegeloppervlak wordt geregistreerd op het moment dat condensatie optreedt. Deze temperatuur is gelijk aan het dauwpunt. De relatieve vochtigheid kan dan worden berekend aan de hand van het dauwpunt en de omgevingstemperatuur.

Vereenvoudiging

Er zijn een paar verschillen met deze DIY Chilled Mirror Hygrometer in vergelijking met een commerciële unit.

Een commerciële gekoelde spiegel-hygrometer gebruikt geen conventionele spiegel omdat die de warmte niet goed geleidt en verdeelt, waardoor de nauwkeurigheid en efficiëntie afnemen. Deze apparaten gebruiken meestal platina of gerhodineerd koper als spiegel. Omdat dat niet gemakkelijk verkrijgbaar of kosteneffectief is, wordt in deze DIY Chilled Mirror-hygrometer een gewone spiegel gebruikt. Een kleine vierkante spiegel zou beter zijn dan een ronde, maar ik kon er geen vinden. Als alternatief zou een gepolijste plaat van roestvrij staal nog beter zijn.

Een commerciële gekoelde spiegelhygrometer gebruikt een platina weerstandsthermometer (PRT) die onder de spiegel is ingebed in plaats van een SMD-thermometer die op het spiegeloppervlak is gemonteerd. Een PRT vereist extra elektronica en het is problematisch om deze tussen de Peltier en de spiegel te monteren en tegelijkertijd een goede thermische geleidbaarheid te bieden. Het nadeel van het monteren van een thermometer op het spiegeloppervlak is dat het de warmtedistributie-eigenschappen wijzigt, waardoor de nauwkeurigheid afneemt. Maar een op het oppervlak gemonteerde thermometer is veel gemakkelijker te bouwen en nauwkeurig genoeg.

Een commerciële Chilled Mirror Hygrometer gebruikt een veel kleinere spiegel van ongeveer 5 mm in plaats van 4 cm. omdat dat minder stroom vereist en een kleinere vormfactor heeft. Een kleine spiegel en bijpassende Peltier is echter niet zo gemakkelijk verkrijgbaar als de grotere variant. Bovendien vereist een kleine Peltier een zeer lage spanning, waardoor een aangepaste driver nodig is. Het is ook moeilijker om een ​​SMD-thermometer op een klein spiegeloppervlak te monteren terwijl er voldoende ruimte overblijft om wat licht te weerkaatsen.

De huidige versie heeft geen lichtblokkerende behuizing. Dit kan echter gemakkelijk 3D-geprint worden en wordt sterk aanbevolen om interferentie van lichtbronnen van buitenaf te blokkeren. Het kan ook worden gebruikt om de lichtbron en lichtsensor op hun plaats te houden. Als je een 3D-geprinte behuizing maakt, zorg dan dat deze goed geventileerd is. U kunt de Peltier-ventilator gebruiken voor ventilatie, maar zorg ervoor dat u lucht in de behuizing zuigt en er niet in blaast. De binnenkant moet ook gemakkelijk toegankelijk zijn voor spiegelreiniging.

De huidige implementatie kan het vriespunt niet meten, omdat daarvoor onderscheid moet worden gemaakt tussen ijsdeeltjes en waterdruppels, waarvoor een tweede optische sensor nodig is om verstrooid licht te meten.

Hoe te bouwen

Pak de Peltier, reinig beide oppervlakken en breng warmtegeleidende lijm aan op de hete kant. Zorg ervoor dat het gelijkmatig verdeeld is. Als je geen warmtegeleidende lijm hebt, kun je koelpasta gebruiken met een paar druppels superlijm aan de randen. Dit werkt even goed. Reinig het oppervlak van het koellichaam en druk het koellichaam en Peltier samen en laat de lijm drogen.

Nadat het koellichaam aan de Peltier is bevestigd en de lijm is opgedroogd, bevestigt u de spiegel op dezelfde manier, waarbij u ervoor zorgt dat u eerst de onderkant schoonmaakt. Het is belangrijk dat de koelpasta gelijkmatig wordt verdeeld en er geen luchtspleten aanwezig zijn, anders wordt de warmteverdeling op de spiegel ongelijkmatig.

Wanneer alle lijm is opgedroogd, bevestigt u de ventilator. Zorg ervoor dat u een ventilator gebruikt die krachtig genoeg is om het koellichaam te koelen, want dat wordt behoorlijk heet. Hoe u de ventilator op het koellichaam bevestigt, hangt af van het type koellichaam dat u gebruikt. Ik heb de twee gewoon aan elkaar gelijmd met een heet lijmpistool.

Schakel de ventilator in en vervolgens de Peltier om te controleren of er ten minste twee gebieden op de spiegel zijn waar de condensatie tegelijkertijd verschijnt. Zet de Peltier niet te lang aan, want dan ontstaat er zeker een uniform condensatieprofiel. Je wilt zien hoe het eruit ziet als de condens net zichtbaar wordt. Als u niet tevreden bent met het resultaat, probeer het dan opnieuw met een nieuwe Peltier, spiegel en koellichaam, aangezien het onwaarschijnlijk is dat u de onderdelen kunt verwijderen en het gladde oppervlak kunt herstellen.

Ik heb de koelpasta niet gelijkmatig verdeeld, wat resulteert in een onregelmatig condensatieprofiel, zoals je op de bovenstaande foto kunt zien.

Het is belangrijk om tegelijkertijd een foto te maken of het gebied te markeren waar de condensatie optreedt, omdat dit het gebied is waar u de temperatuursensor voor het spiegeloppervlak moet monteren en de hoeveelheid licht moet meten die door de spiegel wordt weerkaatst.

In dit project gebruik ik een Si7021 om de spiegeltemperatuur te meten omdat het een lage ruisoutput geeft. Helaas is het I2C-adres hard gecodeerd, dus je kunt maar één van die sensoren gebruiken. Voor de omgevingstemperatuur gebruik ik een DS18B20 temperatuursensor maar deze heeft niet een erg hoge nauwkeurigheid. De enige reden dat ik die sensoren gebruik, is omdat ik ze toevallig beschikbaar had.

Om de Si7021 (of een op PCB gebaseerde temperatuursensor) op de spiegel te monteren, plaatst u eerst een grote druppel niet-elektrisch geleidende koelpasta op de temperatuursensor. Ook de printplaat moet worden afgedekt met koelpasta om condensatie op de elektronica te voorkomen. Plaats vervolgens 4 grote klodders hete lijm op elke hoek van de printplaat. Je moet snel handelen. Druk de sensor gelijkmatig tegen de spiegel op de plaats waar condensatie optrad. Zorg ervoor dat u de sensor horizontaal plaatst en druk de sensor stevig tegen de spiegel. De hete lijm zal snel stollen zodra deze de spiegel raakt. Als u de sensor opnieuw moet positioneren, kunt u deze er gemakkelijk afschrapen met een stanleymes, de lijm eraf halen en het opnieuw proberen. Als er condens op de print zit, isoleer deze dan met hete lijm of spuitplastic.

De ventilator wordt aangestuurd door een IRF520 MOSFET-module.

De gebruikte lichtsensor is een OPT101, die gevoelig is, een laag uitgangsgeluid heeft en gemakkelijk te gebruiken is.

Voor de lichtbron kunt u een laserdiode met laag vermogen of een gewone LED gebruiken. Ik heb ze allebei geprobeerd en ze werken allebei prima. De laser heeft het voordeel van een betere respons, maar is moeilijker uit te lijnen. De LED heeft een vlakkere respons omdat er meer licht rond wordt verspreid, maar is gemakkelijker uit te lijnen. Als u een LED gebruikt, zorg er dan voor dat deze een gerichte straal afgeeft.

De output van led- en laserlicht is waarschijnlijk te hoog en het gebruik van PWM om de output te verminderen is geen optie, omdat dit interferentie veroorzaakt in de lichtsensor. Plaats in plaats daarvan gewoon een weerstand in serie met de LED of laser om de output te verminderen.

Om de LED of laser en de OPT101-lichtsensor te monteren, heb ik wat koperdraad gebruikt dat in vergrendelingsdraad is gedraaid om het meer stijfheid te geven. Beide uiteinden werden vastgezet met hete lijm. Dit is goed voor een proof of concept, maar het is ook veel te kwetsbaar om te worden gebruikt in een laboratorium (of kelder). Het is echter eenvoudig om de sensor en de lichtbron op één lijn te brengen. Een betere manier zou zijn om een ​​houder voor deze apparaten te 3D-printen, ook omdat een 3D-geprinte behuizing een must is om interferentie van buitenlicht te voorkomen.

Voor de aansturing van de Peltier wordt een BTS7960 motordriver gebruikt. De meest efficiënte manier om een ​​Peltier te besturen is om de stroom te veranderen, niet om PWM te gebruiken. Peltier-controllers zijn echter niet zo gemakkelijk verkrijgbaar als de BTS7960-motordriver en voor deze proof-of-concept is het stroomverbruik geen factor.

Eenmaal gemonteerd, uploadt u de code naar de Arduino en past u het OPT101-gevoeligheidsbereik aan met een potentiometer. Een hogere weerstand betekent een hogere uitgangsspanning voor dezelfde hoeveelheid licht. Raadpleeg het OPT101-gegevensblad, Afbeelding 3 - Spanningsgevoeligheid versus bestraling. Voor debuggen kun je op de spiegel blazen om condensatie te creëren, of een object voor de sensor plaatsen. Als u een airconditioner heeft, probeer deze dan aan (of uit) te zetten en wacht. U kunt de vochtigheidsverandering zien.

In onderstaande grafiek zie je de temperatuur (blauw), optische uitlezing (rood), en gemeten dauwpunt (groen). Je kunt het dauwpunt zien stijgen toen ik net de airconditioner uitzette.

Veiligheid

Hoewel de meegeleverde code dit niet ondersteunt, kan de hardware de spiegel niet alleen verwarmen, maar ook verwarmen. Dit wordt gedaan door simpelweg de polariteit op de Peltier om te draaien. Spiegelverwarming kan worden gebruikt om condens snel te verwijderen en de reactietijd te verbeteren. Bovendien verwijdert flitsverdampende condensatie kleine verontreinigingen. Dit vormt echter ook een potentieel veiligheidsrisico omdat het spiegeloppervlak geen koellichaam heeft. Als de code vastzit bij het verwarmen van de Peltier, zal het in het beste geval de hete lijm smelten die de thermometer op zijn plaats houdt en in het slechtste geval zal het een brand veroorzaken door smeltende draden die een kortsluiting veroorzaken.

Nauwkeurigheid

Omdat de gemeten dauwpunttemperatuur een absolute waarde is, is kalibratie niet zo belangrijk als bij een capacitieve of resistieve hygrometer. Er zal echter op zijn minst enig temperatuurverschil zijn tussen het gebied van de temperatuursensor van het spiegeloppervlak en het lichtgevoelige gebied. Als u de nauwkeurigheid van de metingen wilt verifiëren, kunt u het apparaat kalibreren met een gekalibreerde commerciële gekoelde spiegelhygrometer.

Wat betreft spiegelvervuiling is dit slechts ten dele een probleem. De aflezing van gereflecteerd licht is niet absoluut, maar relatief aan het begin van een koelcyclus. Wanneer een koelcyclus start, is de spiegel condensvrij. De hoeveelheid gereflecteerd licht wordt gemeten en gebruikt als referentie om condensatie te detecteren. Als de spiegel vervuild is en er minder licht wordt gereflecteerd, mag dit de condensdetectie niet beïnvloeden. Sommige verontreinigingen verlagen of verhogen echter de temperatuur waarbij condensatie optreedt, dus reinig het spiegeloppervlak van tijd tot tijd voor de beste nauwkeurigheid.

De spiegel- en omgevingstemperatuursensoren hoeven geen hoge gekalibreerde nauwkeurigheid te hebben, maar de resolutie moet hoog zijn. Als de werkelijke temperatuur bijvoorbeeld 24,0 graden is, maar hij meet 24,5 graden, dan is dat prima zolang zowel de spiegel als de omgevingsthermometer ook 24,5 meet (kan worden genormaliseerd) en het aantal alleen maar kriebelt met één decimaal. Veel thermometers hebben een jitter van 0,2 of 0,3 graden. Het is beter om een ​​TSYS01-temperatuursensor te gebruiken voor zowel het meten van de temperatuur van het spiegeloppervlak als de omgevingstemperatuur, aangezien deze sensoren dezelfde nauwkeurigheid bieden als een platina weerstandsthermometer van 0,1 graad.

Het is belangrijk dat de temperatuursensor goed contact maakt met het spiegeloppervlak. Het gebruik van niet-elektrisch geleidende koelpasta is absoluut noodzakelijk.

Koel de spiegel niet sneller dan de responstijd van de thermometer, anders is het waargenomen dauwpunt onnauwkeurig.

De temperatuursensor moet op een plaats van de spiegel worden geplaatst waar tegelijkertijd de condensatie van het lichtgevoelige gebied zichtbaar is.

Door een temperatuursensor op het spiegeloppervlak te monteren, wordt de warmteverdeling gewijzigd, waardoor de nauwkeurigheid wordt verminderd. Het is misschien verleidelijk om als alternatief een infraroodthermometer te gebruiken, maar helaas reflecteert de spiegel een bepaalde hoeveelheid warmtestraling, zodat de meting wordt beïnvloed door de omgeving.

Technisch gezien hangt een vochtigheidsmeting ook af van de barometrische druk, maar het effect is erg klein in omgevingen. Elke drukverandering die wordt veroorzaakt door dichtslaande deuren en wind van buiten die een drukverschil in een gebouw veroorzaakt, zal waarschijnlijk meer problemen veroorzaken dan het waard is.

De hete lucht van het Peltier-koellichaam mag niet over de spiegel worden gezogen.

Een langzame temperatuurdaling geeft nauwkeurigere metingen, maar verkort ook de responstijd. De reactietijd kan echter worden verbeterd door de temperatuur dicht bij het dauwpunt te laten schommelen.

Code

  • Hygrometer met gekoelde spiegel
Hygrometer gekoelde spiegelC/C++
Arduino code
#include #include  //Watchdog crashdetectie//Dit zijn aangepaste bibliotheken.#include "Si7021.h" //vochtigheidssensor met verwarming#include  //DS18B20 temp sensor#include  //DS18B20 temp sensor//Timer bibliotheek:https://github.com/brunocalou/Timer#include "timer.h"#include "timerManager.h" //Definieer de hardwarepinnen op het Arduino-bord.#define coolingPWM 6#define verwarmingPWM 5#define coolingEnable 13#define verwarmingEnable 12#define tecFan 7#define opticalSensor 0 //Analog in#define oneWireBus A3 //DS18B20 temp sensor// De toestand van de TEC.#definieer KOELING 0#definieer VERWARMING 1#definieer UIT 2//TimersTimer timerMainLoop;Timer timerTecCooling;Timer timerSampleNoise;//Temperatuursensor (vochtigheid niet gebruikt). Si7021 si7021;// DS18B20 temperatuursensor OneWire oneWire (oneWireBus); DallasTemperature-sensoren(&oneWire);float vochtigheid =0;float ambientTemp =0;float opticalDewpoint =0;//Stel deze in op een aanvankelijk hogere waarde om het bereik van de seriële plotter correct te krijgen.float mirrorTemp =30; float optisch =30; float dauwpunt =15; //beginwaarde moet lager zijn dan de spiegel temp.float relativeHumidity =30;int tecState =OFF;bool cooling =false;int intervalTecCooling =200; //Hoe vaak de TEC-timer wordt bijgewerkt in ms.float opticalThreshold =0.5f; //0.5 //Het aantal graden C dat de optische uitlezing onder de referentie moet vallen om condensatiedetectie te markeren. Dit moet een groter getal zijn dan de signaalruis.int pwmIncrement =1; int startPwm =100;int maxPwm =255;int intervalMainLoop =200; int tecPwm =0;int noiseSampleIndex =0;int noiseSampleAmount =10;float noiseSampleHighest =0;float noiseSampleLowest =10000;bool noiseSampling =false;float berekenvochtigheid (float TD, float T) {//Het dauwpunt kan niet hoger zijn dan de temperatuur. als(TD> T){ TD =T; } //Augustus-Roche-Magnus benadering. zwevende rh =100*(exp((17.625*TD)/(243.04+TD))/exp((17.625*T)/(243.04+T))); return rh;}//Stel de TEC in op verwarming, koeling of uit.void SetTEC(int state, int hoeveelheid){ tecState =state; // Merk op dat voor zowel verwarming als koeling, de verwarmings- EN koelingspen op hoog moet worden ingesteld. Vraag de PCB-ontwerper waarom. // Driver gebruikt om de TEC:BTS7960 motor driver board te besturen. Merk op dat PWM om een ​​TEC aan te sturen niet efficiënt is en dat het beter is om een ​​variabele stroombron te gebruiken. switch (state) { case COOLING:digitalWrite (heatingEnable, HIGH); analogWrite (verwarming PWM, 0); digitalWrite(coolingEnable, HIGH); analogWrite (koeling PWM, hoeveelheid); pauze; behuizing VERWARMING:digitalWrite(coolingEnable, HIGH); analogWrite (koeling PWM, 0); digitalWrite (verwarming inschakelen, HOOG); analogWrite (verwarming PWM, hoeveelheid); pauze; case UIT:digitalWrite (coolingEnable, LOW); analogWrite (koeling PWM, 0); digitalWrite (verwarming inschakelen, LAAG); analogWrite (verwarming PWM, 0); pauze; standaard:digitalWrite(coolingEnable, LOW); analogWrite (koeling PWM, 0); digitalWrite (verwarming inschakelen, LAAG); analogWrite (verwarming PWM, 0); }}void setup() { //Watchdog crashdetectie. Dit is voor de veiligheid, want je wilt niet dat de TEC vast komt te zitten in de verwarmingsmodus. wdt_enable(WDTO_2S); //WDTO_500MS //WDTO_1S Serial.begin (9600); //9600 //57600 pinMode (koeling PWM, OUTPUT); pinMode (verwarming PWM, OUTPUT); pinMode (koeling inschakelen, OUTPUT); pinMode (verwarmen inschakelen, OUTPUT); pinMode (tecFan, UITGANG); pinMode (optische sensor, INGANG); // Stel de timers in timerMainLoop.setInterval (intervalMainLoop); timerMainLoop.setCallback (mainLoop); timerMainLoop.start(); timerTecCooling.setInterval(intervalTecCooling); timerTecCooling.setCallback (tecCoolingCallback); timerSampleNoise.setInterval (intervalTecCooling); timerSampleNoise.setCallback(sampleNoiseCallback); // si7021 temperatuursensor instellen. uint64_t serialNumber =0ULL; si7021.begin(); serienummer =si7021.getSerialNumber(); // DS18B20 ééndraads temperatuursensorsensoren.begin(); // Schakel de foutopsporingsregistratie van de temperatuursensor uit om de grafiek correct te laten werken. /* Serial.print("Si7021 serienummer:"); Serial.print((uint32_t)(serienummer>> 32), HEX); Serial.println((uint32_t)(serienummer), HEX); //Firwareversie Serial.print ("Si7021-firmwareversie:"); Serial.println(si7021.getFirmwareVersion(), HEX); */ startNoiseSampling(); }//Haal de optische sensor reading.float getOptical(){int opt ​​=analogRead(opticalSensor); float optFactored =(float)opt / 30.0f; return optFactored;}//Timer callback.void tecCoolingCallback(){ digitalWrite(tecFan, HIGH); // Verhoog langzaam de kracht van de TEC. tecPwm +=pwmIncrement; // Klem als (tecPwm> maxPwm) {tecPwm =maxPwm; } //Stel de TEC-koelhoeveelheid in SetTEC (COOLING, tecPwm); //Is condensatie gedetecteerd? if (optical <=(noiseSampleLowest - opticalThreshold)) {//Log het dauwpunt; dauwpunt =mirrorTemp; optischDauwpunt =optisch; stopTec(); }}void startNoiseSampling(){ noiseSampling =true; noiseSampleHoogste =0; noiseSampleLaagste =10000; timerSampleNoise.start();}void sampleNoiseReset(){ timerSampleNoise.stop(); noiseSampleIndex =0; noiseSampling =false;}void sampleNoiseCallback(){ if(noiseSampleIndex> noiseSampleAmount){ sampleNoiseReset(); startTecCooling(); } else{ if(optical> noiseSampleHighest){ noiseSampleHighest =optisch; } if(optical =noiseSampleLowest)){ startNoiseSampling(); } }void loop() { //Watchdog crashdetectie wdt_reset(); // Update alle timers. TimerManager::instance().update();}

Schema's


Productieproces

  1. Spiegel
  2. Arduino Spybot
  3. FlickMote
  4. Zelfgemaakte tv B-Gone
  5. Caleidoscope Infinity Mirror
  6. Hoofdklok
  7. Vind mij
  8. Arduino Power
  9. Tech-TicTacToe
  10. Arduino Quadruped
  11. Arduino-joystick