Pewnego razu żona wystraszyła się, że mogę mieć koronawirusa i nie pozwoliła mi przez tydzień wracać do domu, taka krótka kwarantanna. Tydzień ten okazał się być bardzo owocny, gdyż w tym czasie miałem okazję zbudować termometr. Czemu zbudowałem akurat termometr? Z dwóch powodów:
- mam małe dziecko i czasem nie wiadomo, jak należy je ubrać do snu - termometr pokazuje temperatury z ostatnich 12 godzin, więc nadaje się do tego doskonale,
- miałem na stanie kilka starych bezużytecznych mikroprocesorów PIC16F628A i nie wiedziałem, co z nimi zrobić.
Szczegóły konstrukcji
Termometr zbudowany w oparciu o wspomniany wyżej PIC16F628A, czujnik temperatury DS18B20 oraz wyświetlacz z kontrolerem PCD8544 lub kompatybilnym (czyli taki, jaki podobno znajdował się w starych Nokiach 5110). Do tego kilka elementów pasywnych. To tyle jeśli chodzi o elektronikę.
Jeśli chodzi o obudowę, to mój autorski design wydrukowany na drukarce 3D (zmodyfikowany Anet A8, jeśli to kogoś interesuje). Pierwsza iteracja projektu zawsze zawiera jakieś niedociągnięcia (o nich wspomnę za chwilę), natomiast na pierwszej się skończyło, gdyż sam nie posiadam drukarki i na każdy wydruk od kolegi czekam kilka dni.
Wrażenia z projektowania, montażu i użytkowania
Narzekać nie mogę, działa jak należy. RAMu w mikrokontrolerze jest mało, więc rozdzielczość pomiarów w czasie wynosi godzinę (+/- kilka minut, ze względu na wybór wbudowanego generatora RC jako źródła referencyjnego czasu i design programu). Można to było zrobić lepiej, np. czas odmierzać na timerze, nie musiałbym wtedy uwzględniać zgrubnych poprawek ze względu na opóźnienia z powodu transmisji danych z czujnika temperatury, ale po pierwsze obecne rozwiązanie jest wystarczające, po drugie było najszybsze w implementacji, a po trzecie nie wiem, czy bardziej dokładna wersja zmieściłaby mi się w pamięci programu, jako że obecny program zajmuje prawie 100% ROMu.
Montaż nie był zbyt kłopotliwy, choć trzeba przyznać, że kable wewnątrz obudowy są ułożone chaotycznie. Połączenia między wyświetlaczem a płytką bazową są zrealizowane za pomocą przewodów do płytek stykowych, reszta połączeń znajduje się na uniwersalnej PCB, gdzie zamontowany jest mikrokontroler i czujnik temperatury. Kabelki są trochę za długie, więc lekko rozpierają od środka obudowę - na szczęście śrubki trzymają całość w kupie.
Wspominałem wcześniej o problemach z obudową - po części wynikają one z doraźnego projektowania poszczególnych części projektu, jednak część z nich można by było zrobić lepiej przy aktualnym projekcie elektroniki. Otwory na śrubki mogły by być trochę mniejsze, obecnie śrubki wchodzą w nie moim zdaniem trochę ze zbyt dużym luzem. W udostępnionym projekcie ten element już poprawiłem. Drugą kwestią jest też fakt, że luty na płytce wyświetlacza napierają na przedni panel obudowy - w tej sytuacji należałoby zmienić kształt wycięcia na wyświetlacz lub zmienić grubość przedniego panelu w miejscu, gdzie luty go dotykają.
Urządzenie nie posiada żadnych przycisków, co jest dla mnie zaletą - lubię bezobsługowość. Zasilane jest napięciem 5V z jakiejś starej ładowarki, których sporo wala mi się po mieszkaniu.
Nie polecam stosowania PIC16F628A i innych opartych o architekturę PIC16 do nowych urządzeń. Architektura jest przestarzała i jej wady widać od pierwszych chwil programowania na ten sprzęt (np. zachowanie w pamięci ROM pojedynczego bajtu wymaga poświęcenia 14 bitów). Płatne kompilatory Microchipa również nie powalają jakością, w dodatku ich wersje darmowe mają ograniczone możliwości optymalizacyjne, co dodatkowo pogarsza kompaktowość kodu. Do kupna też nie zachęcam, -Os (optymalizacja względem rozmiaru dostępna w komercyjnej wersji XC8) daje co najwyżej kilkuprocentową oszczędność ROMu w porównaniu do -O2 (najwyższy stopień optymalizacji w darmowej wersji).
Dokumentacja projektu (źródła, projekt obudowy)
Wszystkie pliki projektu potrzebne do zbudowania własnej kopii znajdują się na GitHubie. Obudowa została zaprojektowana w SolveSpace, jeśli ktoś ma ochotę ją wydrukować, to w pierwszej kolejności należy wyeksportować modele do formatu STL. Kod źródłowy firmware'u został napisany w C i mogę zaświadczyć, że buduje się poprawnie w Microchip MPLAB XC8 C Compiler V2.31. Schemat ideowy narysowałem w KiCADzie, ale wyeksportowałem go też do PDFa, więc na potrzeby montażu nie ma konieczności instalacji KiCADa.
Kosztorys
Trudno mi szacować koszt wykonania, gdyż sporo komponentów kupowałem kilka lat temu bądź są z odzysku. Myślę, że 50 zł wystarczy do złożenia duplikatu, w razie wątpliwości zachęcam do przejrzenia dokumentacji projektu i sporządzenia kosztorysu na własną rękę.
- mam małe dziecko i czasem nie wiadomo, jak należy je ubrać do snu - termometr pokazuje temperatury z ostatnich 12 godzin, więc nadaje się do tego doskonale,
- miałem na stanie kilka starych bezużytecznych mikroprocesorów PIC16F628A i nie wiedziałem, co z nimi zrobić.
Szczegóły konstrukcji
Termometr zbudowany w oparciu o wspomniany wyżej PIC16F628A, czujnik temperatury DS18B20 oraz wyświetlacz z kontrolerem PCD8544 lub kompatybilnym (czyli taki, jaki podobno znajdował się w starych Nokiach 5110). Do tego kilka elementów pasywnych. To tyle jeśli chodzi o elektronikę.
Jeśli chodzi o obudowę, to mój autorski design wydrukowany na drukarce 3D (zmodyfikowany Anet A8, jeśli to kogoś interesuje). Pierwsza iteracja projektu zawsze zawiera jakieś niedociągnięcia (o nich wspomnę za chwilę), natomiast na pierwszej się skończyło, gdyż sam nie posiadam drukarki i na każdy wydruk od kolegi czekam kilka dni.
Wrażenia z projektowania, montażu i użytkowania
Narzekać nie mogę, działa jak należy. RAMu w mikrokontrolerze jest mało, więc rozdzielczość pomiarów w czasie wynosi godzinę (+/- kilka minut, ze względu na wybór wbudowanego generatora RC jako źródła referencyjnego czasu i design programu). Można to było zrobić lepiej, np. czas odmierzać na timerze, nie musiałbym wtedy uwzględniać zgrubnych poprawek ze względu na opóźnienia z powodu transmisji danych z czujnika temperatury, ale po pierwsze obecne rozwiązanie jest wystarczające, po drugie było najszybsze w implementacji, a po trzecie nie wiem, czy bardziej dokładna wersja zmieściłaby mi się w pamięci programu, jako że obecny program zajmuje prawie 100% ROMu.
Montaż nie był zbyt kłopotliwy, choć trzeba przyznać, że kable wewnątrz obudowy są ułożone chaotycznie. Połączenia między wyświetlaczem a płytką bazową są zrealizowane za pomocą przewodów do płytek stykowych, reszta połączeń znajduje się na uniwersalnej PCB, gdzie zamontowany jest mikrokontroler i czujnik temperatury. Kabelki są trochę za długie, więc lekko rozpierają od środka obudowę - na szczęście śrubki trzymają całość w kupie.
Wspominałem wcześniej o problemach z obudową - po części wynikają one z doraźnego projektowania poszczególnych części projektu, jednak część z nich można by było zrobić lepiej przy aktualnym projekcie elektroniki. Otwory na śrubki mogły by być trochę mniejsze, obecnie śrubki wchodzą w nie moim zdaniem trochę ze zbyt dużym luzem. W udostępnionym projekcie ten element już poprawiłem. Drugą kwestią jest też fakt, że luty na płytce wyświetlacza napierają na przedni panel obudowy - w tej sytuacji należałoby zmienić kształt wycięcia na wyświetlacz lub zmienić grubość przedniego panelu w miejscu, gdzie luty go dotykają.
Urządzenie nie posiada żadnych przycisków, co jest dla mnie zaletą - lubię bezobsługowość. Zasilane jest napięciem 5V z jakiejś starej ładowarki, których sporo wala mi się po mieszkaniu.
Nie polecam stosowania PIC16F628A i innych opartych o architekturę PIC16 do nowych urządzeń. Architektura jest przestarzała i jej wady widać od pierwszych chwil programowania na ten sprzęt (np. zachowanie w pamięci ROM pojedynczego bajtu wymaga poświęcenia 14 bitów). Płatne kompilatory Microchipa również nie powalają jakością, w dodatku ich wersje darmowe mają ograniczone możliwości optymalizacyjne, co dodatkowo pogarsza kompaktowość kodu. Do kupna też nie zachęcam, -Os (optymalizacja względem rozmiaru dostępna w komercyjnej wersji XC8) daje co najwyżej kilkuprocentową oszczędność ROMu w porównaniu do -O2 (najwyższy stopień optymalizacji w darmowej wersji).



Dokumentacja projektu (źródła, projekt obudowy)
Wszystkie pliki projektu potrzebne do zbudowania własnej kopii znajdują się na GitHubie. Obudowa została zaprojektowana w SolveSpace, jeśli ktoś ma ochotę ją wydrukować, to w pierwszej kolejności należy wyeksportować modele do formatu STL. Kod źródłowy firmware'u został napisany w C i mogę zaświadczyć, że buduje się poprawnie w Microchip MPLAB XC8 C Compiler V2.31. Schemat ideowy narysowałem w KiCADzie, ale wyeksportowałem go też do PDFa, więc na potrzeby montażu nie ma konieczności instalacji KiCADa.
Kosztorys
Trudno mi szacować koszt wykonania, gdyż sporo komponentów kupowałem kilka lat temu bądź są z odzysku. Myślę, że 50 zł wystarczy do złożenia duplikatu, w razie wątpliwości zachęcam do przejrzenia dokumentacji projektu i sporządzenia kosztorysu na własną rękę.
Cool? Ranking DIY