Przejdź do głównej zawartości

Programowanie AVR cz. 9: Mierzymy temperaturę.

Co prawda w zamierzeniu miał to być obszerny artykuł na temat pomiaru temperatury przez układ mikroprocesorowy na bazie ATmegi 48P, ale po dłuższych przemyśleniach doszedłem do wniosku, że o wiele lepiej będzie po prostu pokazać schemat układu i listingi programów, z niewielkim, niezbędnym komentarzem.

Mając do dyspozycji mikrokontroler ATmega 48P możemy zbudować prostu termometr na co najmniej dwa sposoby. Pierwszy z nich może się opierać na odczytywaniu temperatury z wewnętrznego sensora, jednak aby uzyskać w miarę zadowalające wyniki, należy przeprowadzić kalibrację - szczegóły znajdziecie w specjalnie tej tematyce poświęconym dokumencie, dostępnym na stronach firmy Atmel.
Poniższy listing pokazuje, jak możemy wykorzystać wewnętrzny sensor (wyniki wyświetlane są na "szeregowym" LCD mojej produkcji):

Kalibracji dokonałem z grubsza, nie dysponując ani możliwością uzyskania znacznej różnicy temperatur, ani też dobrym termometrem wzorcowym. Zauważmy, że z wbudowanym czujnikiem temperatury komunikujemy się w taki sam sposób, jak z przetwornikiem analogowo-cyfrowym; jest to jakby dodatkowy kanał ADC.

Drugi sposób, o wiele ciekawszy, polega na wykorzystaniu zewnętrznego, scalonego czujnika temperatury. Na rynku znajdziemy wiele tego typu układów - najciekawsze z nich to układy, z którymi mikrokontrolery komunikują się za pomocą magistral I2C czy 1Wire, jednak w moim termometrze zastosowałem układ scalony analogowy LM35DZ. Ta wersja pozwala na pomiar temperatur w zakresie od 0 do 100 st. C, czyli nadaje się doskonale do zastosowań typu indoor. Wartość napięcia, na którą układ konwertuje temperaturę otoczenia (właściwie jest to temperatura jego obudowy), przetwarzana jest przez przetwornik analogowo-cyfrowy mikrokontrolera i prezentowana przez szesnaście diod LED, przy czym dla zbyt niskich i zbyt wysokich temperatur przewidziana jest specjalna sygnalizacja - osobne, pulsujące LED-y (PWM). Dodatkowo wyniki pomiarów można śledzić na opcjonalnym LCD.
Diody LED są sterowane za pomocą dwóch ekspanderów magistrali I2C (PCF8574P), dzięki czemu obsługa wyświetlania wyników realizowana jest przez dwa wyprowadzenia mikrokontrolera (stały problem: jak rozszerzyć liczbę wejść/wyjść mikrokontrolerów).
Oto schemat układu:


i listing programu:

Schemat, dla poprawy czytelności, nie zawiera wartości zastosowanych elementów biernych, oto więc spis:

  • C1, C2: 22pF - 33pF
  • C3, C4, C5: 100nF
  • C6: 10μF
  • L1: 10μH
  • R1 - R18: 220Ω
  • R19: 10kΩ
  • R20, R21: 330Ω
  • R22, R23: 4,7kΩ
  • LED1 - LED18: zestaw dowolnych diod elektroluminescencyjnych

Przedstawione rozwiązanie z wielu względów nie jest optymalne - jakoś szczególnie go nie dopracowywałem - weźmy choćby pobór prądu przez szesnaście święcących diod...
Jednak efekt ciekawy, szczególnie, gdy dobierzemy różnokolorowe diody dla poszczególnych przedziałów temperatur.

Komentarze

Popularne posty z tego bloga

Niesamowicie prosty czujnik zmierzchowy.

Tym razem zero programowania, będzie natomiast nostalgiczno-wspomnieniowy układzik, lekko zmodyfikowany. Otóż kilka dni temu rozmawialiśmy w gronie znajomych o różnego rodzaju czujnikach zmierzchowych i czujnikach ruchu. Ponieważ należę do tych wariatów, co to hołdują jeszcze owej przestarzałej i kompletnie odrealnionej dziś zasadzie: "po co kupować, gdy można zrobić", stwierdziłem, że poskładam takie coś (czujnik zmierzchowy; sensor ruchu faktycznie lepiej nabyć, choćby ze względu na rozmiary ;)) i być może podłączę do jakiegoś mikrokontrolera. Przypomniało mi się też przy okazji, że znalazłem ostatnio w elektronicznych śmieciach stary fotorezystor (dla niewtajemniczonych: element zmieniający rezystancję, czyli opór elektryczny, pod wpływem działania strumienia światła) RPP130, jeden z kilku pozostałych po montowanych wieki temu układach tranzystorowych do zdalnego sterowania pracą urządzeń za pomocą latarki... No OK, nie było to specjalnie rozbudowane zdalne sterowanie ;)

Płytka prototypowa na bazie ESP8266 (ESP-01)

To nie jest kolejny artykuł traktujący od początku do... nieco dalej (bo na pewno nie do końca) o płytkach ESP8266 . Żeby się dowiedzieć, co to takiego, odwiedźcie proszę np. tę stronę (oraz wiele innych – poproście o pomoc Waszą ulubioną wyszukiwarkę): http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family . No ale żeby nie było, ESP8266 to układ zawierający na pokładzie wydajny mikrokontroler z rdzeniem RISC-owym, taktowany zegarem 40MHz (wersja, o której jest ten wpis) lub 80MHz, 512KB pamięci flash i podsystem komunikacji przez sieć WiFi . Jest powszechnie wykorzystywany jako swego rodzaju karta sieciowa do połączeń bezprzewodowych naszych urządzeń IoT , które budujemy w zaciszu domowych laboratoriów (i nie tylko). Układ montowany jest na płytkach występujących w kilku wersjach, różniących się przede wszystkim liczbą wyprowadzeń uniwersalnych, czyli GPIO – im większa liczba, tym większe możliwości wykorzystania układu (więcej urządzeń peryferyjnych itp.). Są też pewne

Programowanie AVR cz.8: Przetwornik analogowo-cyfrowy oraz modulacja szerokości impulsu.

Dziś kolejny wgląd w wyposażenie mikrokontrolera ATmega48P - tym razem przyglądamy się wbudowanemu w układ przetwornikowi analogowo-cyfrowemu oraz - dostępnej również w modelach ATtiny - modulacji szerokości impulsu realizowanej przez timery. Artykuł ten jest w pewnym sensie wstępem do następnego, który pojawi się już wkrótce, a którego tematykę zdradziłem na końcu. Przetwornik A-C (skrót spotykany w anglojęzycznej literaturze to ADC od Analog to Digital Converter ) to układ pozwalający na zamianę wartości napięcia (elektrycznego sygnału analogowego ;-)) na liczbę. W przypadku mojej ATmegi przetwornik ma rozdzielczość 10-bitową, co oznacza, że wartość napięcia podawanego na wejście przetwornika może być po konwersji zapisana jako liczba z przedziału od 0 do 1023 (musimy użyć zmiennej word do zapamiętania tej liczby). Jeśli jesteśmy w posiadaniu mikrokontrolera w obudowie PDIP 28-wyprowadzeniowej, to mamy do dyspozycji sześć kanałów (niezależnych wejść) przetwornika A-C, przyporzą