Inhoudsopgave:

Thermochrome temperatuur- en vochtigheidsweergave - PCB-versie - Ajarnpa
Thermochrome temperatuur- en vochtigheidsweergave - PCB-versie - Ajarnpa

Video: Thermochrome temperatuur- en vochtigheidsweergave - PCB-versie - Ajarnpa

Video: Thermochrome temperatuur- en vochtigheidsweergave - PCB-versie - Ajarnpa
Video: Screen70 's temperatuur-gevoelige-stickers 2024, Juli-
Anonim
Image
Image
De verwarmings-PCB ontwerpen
De verwarmings-PCB ontwerpen

Een tijdje geleden deed ik een project genaamd Thermochromic Temperature & Humidity Display, waarbij ik een 7-segments display bouwde uit koperen platen die werden verwarmd/gekoeld door peltier-elementen. De koperplaten waren bedekt met een thermochrome folie die van kleur verandert met de temperatuur. Dit project is een kleinere versie van het display dat in plaats van peltiers een PCB met verwarmingssporen gebruikt, zoals voorgesteld door gebruiker DmitriyU2 in de opmerkingensectie. Het gebruik van een PCB-verwarmer zorgt voor een veel eenvoudiger en compacter ontwerp. De verwarming is ook efficiënter wat leidt tot een snellere kleurverandering.

Bekijk de video om te zien hoe het display werkt.

Omdat ik nog een paar PCB's over had, verkoop ik deze display ook in mijn Tindie-winkel.

Benodigdheden

  • Heater PCB (zie mijn GitHub voor Gerber-bestanden)
  • Besturingsprintplaat (zie mijn GitHub voor Gerber-bestanden en BoM)
  • DHT22-sensor (bijv. ebay.de)
  • 3D-geprinte standaard (zie mijn GitHub voor stl-bestand)
  • Thermochroom zelfklevend vel, 150x150 mm, 30-35°C (SFXC)
  • M2x6 bout + moer
  • 2x pin header 1x9, 2,54 mm (bijv. mouser.com)
  • 2x SMD-kaartconnector 1x9, 2,54 mm (bijv. mouser.com)

Stap 1: De verwarmings-PCB ontwerpen

De verwarmings-PCB ontwerpen
De verwarmings-PCB ontwerpen
De verwarmings-PCB ontwerpen
De verwarmings-PCB ontwerpen

De verwarmingsprintplaat is ontworpen in Eagle. De PCB-afmetingen zijn 100x150 mm omdat 150x150 mm de standaardmaat is van de thermochrome platen die ik heb gebruikt. Eerst maakte ik een schets van de segmenten in Fusion360, die werd opgeslagen als dxf en vervolgens geïmporteerd in Eagle. De segmenten hebben tussenruimten gefreesd en zijn alleen verbonden door kleine bruggen. Dit verbetert de thermische isolatie van de afzonderlijke segmenten en maakt daardoor een snellere verwarming mogelijk en vermindert 'thermische overspraak'. De segmenten werden gevuld met PCB-sporen op de bovenste laag (gezien in rood) met behulp van de meandertool in Eagle. Ik heb een spoorbreedte en afstand van 6 mil gebruikt, wat de minimale maat is die door PCBWay zonder extra kosten kan worden vervaardigd. Elk spoor wordt gemeanderd tussen twee via's die vervolgens via de onderste laag (gezien in blauw) met de pinnen worden verbonden met behulp van veel dikkere 32 mil-sporen. Alle segmenten delen een gemeenschappelijke basis.

Ik heb geen berekeningen gemaakt voor het verwarmingsvermogen dat nodig is voor een bepaalde temperatuurstijging, noch heb ik de verwachte weerstand van een segment berekend. Ik dacht dat elke aanpassing van het verwarmingsvermogen kan worden gemaakt door een PWM-signaal te gebruiken met een variërende werkcyclus. Later ontdekte ik dat de segmenten redelijk snel opwarmen wanneer ze worden gevoed via de 5V USB-poort met een inschakelduur van ~ 5%. De totale stroom bij verwarming van alle 17 segmenten is ongeveer 1,6 A.

Alle bordbestanden zijn te vinden op mijn GitHub.

Stap 2: De controller-printplaat ontwerpen

De controller-printplaat ontwerpen
De controller-printplaat ontwerpen
De controller-printplaat ontwerpen
De controller-printplaat ontwerpen
De controller-printplaat ontwerpen
De controller-printplaat ontwerpen

Om de PCB-verwarmer aan te sturen, heb ik een SAMD21E18 MCU gekozen die ik ook in mijn GlassCube-project heb gebruikt. Deze microcontroller heeft genoeg pinnen om alle 17 verwarmingssegmenten aan te sturen en de DHT22-sensor uit te lezen. Het heeft ook native USB en kan worden geflitst met de CircuitPython-bootloader van Adafruit. Een micro-USB-connector werd gebruikt als voeding en voor het programmeren van de MCU. De verwarmingssegmenten worden aangestuurd door 9 tweekanaals MOSFET's (SP8K24FRATB). Deze kunnen tot 6 A aan en hebben een gate-drempelspanning <2,5 V, zodat ze kunnen worden geschakeld door het logische signaal van 3,3 V van de MCU. Ik vond deze draad erg nuttig om me te helpen bij het ontwerpen van het regelcircuit van de verwarming.

Ik bestelde de PCB's bij PCBWay en de elektronische onderdelen apart bij Mouser en monteerde de PCB's zelf om kosten te besparen. Ik gebruikte een soldeerpasta-dispenser en plaatste de onderdelen met de hand en soldeerde ze met een infrarood IC-verwarmer. Vanwege de relatief grote hoeveelheid componenten en de benodigde nabewerking was dit echter behoorlijk vervelend en ik overweeg om in de toekomst een montageservice in te schakelen.

Wederom zijn de bordbestanden te vinden op mijn GitHub. Daar vind je een verbeterde versie van de print die gebruik maakt van een USB-C connector in plaats van micro USB. Ik heb ook de afstand tussen de doorgaande gaten voor de DHT22-sensor gecorrigeerd en een 10-pins connector toegevoegd om de bootloader gemakkelijker te laten flitsen via J-Link.

Stap 3: CircuitPython Bootloader

In eerste instantie flitste ik de SAMD21 met een UF2-bootloader op basis van Adafruit's Trinket M0. De bootloader moest enigszins worden aangepast omdat de Trinket een LED heeft die is aangesloten op een van de pinnen die ik gebruik voor verwarming. Anders zal deze pin na het opstarten korte tijd hoog gaan en het aangesloten segment met vol vermogen verwarmen. Het flashen van de bootloader doe je door een J-Link aan te sluiten op de MCU via de SWD- en SWC-poorten. Het hele proces staat uitgebreid beschreven op de website van Adafruit. Na het installeren van de bootloader wordt de MCU herkend als een flashdrive bij aansluiting via de micro-USB-poort en daaropvolgende bootloaders kunnen eenvoudig worden geïnstalleerd door een UF2-bestand naar de drive te slepen.

Als volgende stap wilde ik een CircuitPython-bootloader installeren. Omdat mijn bord echter veel pinnen gebruikt die niet zijn aangesloten op de Trinket M0, moest ik eerst de bordconfiguratie enigszins aanpassen. Wederom is er een geweldige tutorial hiervoor op de Adafruit-website. Kortom, je hoeft alleen maar een paar genegeerde pinnen in de mpconfigboard.h te becommentariëren en dan alles opnieuw te compileren. De aangepaste bootloader-bestanden zijn ook beschikbaar op mijn GitHub.

Stap 4: CircuitPython-code

CircuitPython-code
CircuitPython-code
CircuitPython-code
CircuitPython-code

Nadat de CircuitPython-bootloader is geïnstalleerd, kunt u het bord gewoon programmeren door uw code als een code.py-bestand rechtstreeks op de USB-stick op te slaan. De code die ik heb geschreven, leest de DHT22-sensor uit en geeft vervolgens afwisselend de temperatuur en vochtigheid weer door de overeenkomstige segmenten te verwarmen. Zoals reeds vermeld, gebeurt de verwarming door de MOSFET's te schakelen met een PWM-signaal. In plaats van de pinnen als PWM-uitgangen te configureren, heb ik een "nep" PWM-signaal gegenereerd met een lage schakelfrequentie van 100 Hz in de code met behulp van vertragingen. Om het stroomverbruik nog verder te verlagen schakel ik de segmenten niet gelijktijdig maar sequentieel in zoals in bovenstaand schema. Er zijn ook een paar trucjes om de verwarming van de segmenten gelijkmatiger te maken. Allereerst is de duty-cycle voor elk segment een beetje anders. Het streepje van het "%"-teken heeft bijvoorbeeld een veel grotere inschakelduur nodig vanwege de hogere weerstand. Ook ontdekte ik dat segmenten die omgeven zijn door vele andere segmenten minder verwarmd hoeven te worden. Bovendien, als een segment in de vorige "run" werd verwarmd, kan de duty-cycle in de volgende worden verminderd. Ten slotte wordt de verwarmings- en koeltijd aangepast aan de omgevingstemperatuur, die gemakkelijk wordt gemeten door de DHT22-sensor. Om redelijke tijdconstanten te vinden heb ik het display gekalibreerd in een klimaatkamer waar ik gelukkig toegang toe heb op mijn werk.

Je kunt de volledige code vinden op mijn GitHub.

Stap 5: Montage

samenkomst
samenkomst
samenkomst
samenkomst
samenkomst
samenkomst

De montage van het display is vrij eenvoudig en kan in de volgende stappen worden onderverdeeld:

  1. Soldeer vrouwelijke pin-headers aan verwarmings-PCB
  2. Bevestig zelfklevende thermochrome plaat aan de verwarmings-PCB
  3. Soldeer de DHT22-sensor op de printplaat van de controller en zet vast met M2-bout en moer
  4. Soldeer mannelijke pin-headers naar controller-PCB
  5. Sluit beide PCB's aan en plaats ze in een 3D-geprinte standaard

Stap 6: Voltooid project

Voltooid project
Voltooid project
Voltooid project
Voltooid project

Ik ben best blij met het afgewerkte display dat nu constant in onze woonkamer draait. Het doel om een kleinere, eenvoudigere versie van mijn originele thermochrome display te maken, is zeker bereikt en ik wil gebruiker DmitriyU2 nogmaals bedanken voor de suggestie. Het project hielp me ook om mijn PCB-ontwerpvaardigheden in Eagle te verbeteren en ik leerde over het gebruik van MOSFET's als schakelaars.

Je zou het ontwerp misschien nog verder kunnen verbeteren door een mooie behuizing voor de PCB's te maken. Ik denk er ook over om een digitale klok in dezelfde stijl te maken.

Als je dit project leuk vindt, kun je het gewoon opnieuw maken of kopen in mijn Tindie-winkel. Overweeg ook om op mij te stemmen in de PCB design challenge.

PCB-ontwerpuitdaging
PCB-ontwerpuitdaging
PCB-ontwerpuitdaging
PCB-ontwerpuitdaging

Juryprijs in de PCB Design Challenge

Aanbevolen: