Innehållsförteckning:
- Tillbehör
- Steg 1: Designa värmekretsen
- Steg 2: Designa styrkortet
- Steg 3: CircuitPython Bootloader
- Steg 4: CircuitPython -kod
- Steg 5: Montering
- Steg 6: Avslutat projekt
Video: Termokrom temperatur- och luftfuktighetsdisplay - PCB -version: 6 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:39
För ett tag sedan gjorde jag ett projekt som heter Thermochromic Temperature & Humidity Display där jag byggde en 7-segmentskärm av kopparplattor som värmdes/kyldes av peltierelement. Kopparplattorna täcktes med en termokrom folie som ändrar färg med temperaturen. Detta projekt är en mindre version av displayen som istället för peltiers använder ett kretskort med uppvärmningsspår som föreslagits av användaren DmitriyU2 i kommentarsfältet. Att använda en kretskortsvärmare möjliggör en mycket enklare och mer kompakt design. Uppvärmningen är också mer effektiv vilket leder till en snabbare färgförändring.
Titta på videon för att se hur displayen fungerar.
Eftersom jag hade några PCB kvar så säljer jag också den här displayen i min Tindie -butik.
Tillbehör
- Värmare PCB (se min GitHub för Gerber -filer)
- Styr PCB (se min GitHub för Gerber -filer och BoM)
- DHT22 -sensor (t.ex. ebay.de)
- 3D -tryckt stativ (se min GitHub för stl -fil)
- Termokrom lim, 150x150 mm, 30-35 ° C (SFXC)
- M2x6 bult + mutter
- 2x stifthuvud 1x9, 2,54 mm (t.ex. mouser.com)
- 2x SMD -kortkontakt 1x9, 2,54 mm (t.ex. mouser.com)
Steg 1: Designa värmekretsen
Värmaren PCB designades i Eagle. PCB -måtten är 100x150 mm eftersom 150x150 mm är standardstorleken på de termokroma plåtarna jag använde. Först gjorde jag en skiss över segmenten i Fusion360 som sparades som dxf och sedan importerades till Eagle. Segmenten har frästa mellanrum mellan dem och är endast anslutna med små broar. Detta förbättrar värmeisoleringen för de enskilda segmenten och möjliggör därför snabbare uppvärmning och minskar "termisk överhörning". Segmenten fylldes med PCB -spår på det översta lagret (sett i rött) med hjälp av meanderverktyget i Eagle. Jag använde en spårvidd och ett avstånd på 6 mil, vilket är den minsta storlek som kan tillverkas av PCBWay utan extra kostnader. Varje spår slingras mellan två vias som sedan ansluts till stiften via bottenlagret (sett i blått) med mycket tjockare 32 mil spår. Alla segment delar en gemensam grund.
Jag gjorde inga beräkningar för den värmeeffekt som krävs för en viss temperaturhöjning och jag beräknade inte heller det förväntade motståndet för ett segment. Jag tänkte att varje justering av värmeeffekten kan göras med hjälp av en PWM -signal med varierande driftscykel. Jag upptäckte senare att segmenten värms ganska snabbt när de drivs via 5V USB -porten med en driftscykel på ~ 5%. Den totala strömmen vid uppvärmning av alla 17 segment är cirka 1,6 A.
Alla kortfiler finns på min GitHub.
Steg 2: Designa styrkortet
För att styra kretskortsvärmaren väljer jag en SAMD21E18 MCU som jag också använde i mitt GlassCube -projekt. Denna mikrokontroller har tillräckligt med stift för att styra alla 17 värmesegment och läsa av DHT22 -sensorn. Den har också inbyggd USB och kan blixtas med Adafruit's CircuitPython bootloader. En mikro -USB -kontakt användes som strömförsörjning och för programmering av MCU. Värmarsegmenten styrs av 9 tvåkanals MOSFET (SP8K24FRATB). Dessa kan hantera upp till 6 A och har en gränströskelspänning <2,5 V så att de kan växlas med 3,3 V logiksignal från MCU. Jag tyckte att den här tråden var mycket hjälpsam för att hjälpa mig att utforma värmekretsens krets.
Jag beställde kretskorten från PCBWay och de elektroniska delarna separat från Mouser och monterade kretskorten själv för att spara kostnader. Jag använde en lödpasta -dispenser som placerade delarna för hand och lödde dem med en infraröd IC -värmare. Men på grund av den relativt stora mängden komponenter som är inblandade och den nödvändiga omarbetningen var detta ganska tråkigt och jag överväger att använda en monteringstjänst i framtiden.
Återigen kan tavlorna hittas på min GitHub. Där kan du hitta en förbättrad version av kretskortet som använder en USB-C-kontakt istället för mikro-USB. Jag korrigerade också avståndet mellan genomgående hål för DHT22-sensorn och lade till en 10-polig kontakt för enklare blinkning av startladdaren via J-Link.
Steg 3: CircuitPython Bootloader
Först blinkade jag SAMD21 med en UF2 bootloader baserad på Adafruit's Trinket M0. Bootloader måste ändras något eftersom Trinket har en lysdiod ansluten till en av stiften som jag använder för uppvärmning. Annars kommer denna pin att gå högt en kort tid efter start och värma det anslutna segmentet med full effekt. Blinkande av startladdaren görs genom att ansluta en J-Link till MCU via SWD- och SWC-portarna. Hela processen beskrivs i detalj på Adafruit -webbplatsen. Efter installation av bootloader känns MCU igen som en flash -enhet när den är ansluten via mikro -USB -porten och efterföljande bootloaders kan enkelt installeras genom att dra en UF2 -fil till enheten.
Som ett nästa steg ville jag installera en CircuitPython bootloader. Men eftersom mitt kort använder många stift som inte är anslutna på Trinket M0, var jag först tvungen att ändra kortets konfiguration något. Återigen finns det en bra handledning för detta på Adafruit -webbplatsen. I grund och botten måste man bara kommentera några ignorerade stift i mpconfigboard.h och sedan kompilera om allt. De anpassade bootloader -filerna är också tillgängliga på min GitHub.
Steg 4: CircuitPython -kod
Efter att CircuitPython bootloader har installerats kan du bara programmera kortet genom att spara din kod som en code.py -fil direkt till USB -flashenheten. Koden jag skrev läser upp DHT22 -sensorn och visar sedan växelvis temperaturen och luftfuktigheten genom att värma motsvarande segment. Som redan nämnts sker uppvärmningen genom att byta MOSFET med en PWM -signal. Istället för att konfigurera stiften som PWM -utgångar genererade jag en "falsk" PWM -signal med en låg kopplingsfrekvens på 100 Hz i koden med hjälp av fördröjningar. För att ytterligare sänka strömförbrukningen slår jag inte på segmenten samtidigt utan sekventiellt som visas i schemat ovan. Det finns också några knep för att göra uppvärmningen av segmenten jämnare. Först och främst är arbetscykeln lite annorlunda för varje segment. Till exempel strecket på "%" -tecknet behöver en mycket större driftscykel på grund av dess högre motstånd. Jag fann också att segment som omges av många andra segment måste värmas mindre. Dessutom, om ett segment upphettades i föregående "körning" kan arbetscykeln reduceras i nästa. Slutligen anpassas uppvärmnings- och kyltiden till den omgivande temperaturen som bekvämt mäts av DHT22 -sensorn. För att hitta rimliga tidskonstanter kalibrerade jag faktiskt displayen i en klimatkammare som jag lyckligtvis har tillgång till på jobbet.
Du hittar hela koden på min GitHub.
Steg 5: Montering
Monteringen av skärmen är ganska enkel och kan delas upp i följande steg
- Lödhona för kvinnliga stift till värmare -kretskort
- Fäst det självhäftande termokroma arket på värmarens kretskort
- Löd DHT22 -sensor till styrkortet och fäst med M2 -bult och mutter
- Lödhylsor till hantering av kretskort
- Anslut båda kretskorten och placera i 3D -tryckt stativ
Steg 6: Avslutat projekt
Jag är ganska nöjd med den färdiga diplayen som nu ständigt pågår i vårt vardagsrum. Målet att göra en mindre, enklare version av min ursprungliga termokroma display uppnåddes definitivt och jag vill tacka användaren DmitriyU2 än en gång för förslaget. Projektet hjälpte mig också att förbättra mina PCB -designkunskaper i Eagle och jag lärde mig att använda MOSFET som switchar.
Man kan kanske ytterligare förbättra designen genom att göra ett fint hölje för kretskortet. Jag funderar också på att göra en digital klocka i samma stil.
Om du gillar det här projektet kan du bara göra om det eller köpa det i min Tindie -butik. Överväg också att rösta på mig i PCB -designutmaningen.
Domarpris i PCB Design Challenge
Rekommenderad:
Allt i en digital kronometer (klocka, timer, larm, temperatur): 10 steg (med bilder)
Allt i en digital kronometer (klocka, timer, larm, temperatur): Vi planerade att göra en timer för någon annan tävling, men senare implementerade vi också en klocka (utan RTC). När vi kom in i programmeringen blev vi intresserade av att tillämpa fler funktioner på enheten och slutade lägga till DS3231 RTC, som
PWM -reglerad fläkt baserad på CPU -temperatur för Raspberry Pi: 4 steg (med bilder)
PWM -reglerad fläkt baserad på CPU -temperatur för Raspberry Pi: Många fodral för Raspberry Pi har en liten 5V fläkt för att hjälpa till att kyla CPU: n. Dessa fläktar är dock vanligtvis ganska bullriga och många ansluter den till 3V3 -stiftet för att minska bullret. Dessa fläktar är vanligtvis klassade för 200mA vilket är ganska
Veckodag, kalender, tid, luftfuktighet/temperatur med batterisparläge: 10 steg (med bilder)
Veckodag, kalender, tid, luftfuktighet/temperatur med batterisparläge: Energisparläget här är det som skiljer denna instruktör från andra exempel som visar veckodag, månad, dag i månaden, tid, luftfuktighet och temperatur. Det är denna förmåga som gör att detta projekt kan köras från ett batteri, utan
Mät temperatur från PT100 med Arduino: 6 steg (med bilder)
Mätning av temperatur från PT100 Användning av Arduino: PT100 är en motståndstemperaturdetektor (RTD) som ändrar dess motstånd beroende på dess omgivande temperatur, den används i stor utsträckning för industriella processer med långsam dynamik och relativt breda temperaturområden. Den används för långsam dynami
Skickar ett SMS med temperatur i tid: 5 steg (med bilder)
Skickar ett SMS med temperatur i tid: Tanken är att få ett temperatur -sms från mina faders hus. Inget fancy bara att snabbt sätta ihop delar. Delarna är: Geekcreit ® ATmega328P Nano V3 Controller Board Compatible ArduinoDIY NANO IO Shield V1.O Expansionskort för ArduinoDS130