Jak już pisałem w poprzednim poście nowa sonda nadaje nieco inaczej. Wczoraj zabrałem się za pierwszą analizę danych. Nie jest, niestety, tak prosto jak poprzednio. O ile same bity są wysyłane prawie analogicznie jak w poprzedniej sondzie, to ich interpretacja na razie mi się nie udała.
Po wielu latach postanowiłem wrócić do mojego starego hobby - elektroniki. Rozpocząłem od zakupu arduino i poznania świata mikrokontrolerów. Co będzie dalej - zobaczymy :)
Szukaj na tym blogu
czwartek, 10 października 2013
środa, 9 października 2013
Nowa sonda bezprzewodowa
Wstęp
Kupiłem sobie właśnie nowy zestaw, termometr + sonda, tej samej firmy co poprzednio. Sama sonda z zewnątrz jest identyczna z poprzednią. Byłem przekonany, że ta sonda będzie nadawać w identyczny sposób jak poprzednia. Nie jest tak niestety. Obie sondy, które mam nie są odbierane przez termometry.Tzn stara sonda tylko przez stary termometr jest odczytywana, a nowa przez nowy.wtorek, 20 sierpnia 2013
Podłączenie odczytu sondy do reszty układu
sobota, 13 lipca 2013
Odczyty z bezprzewodowej sondy po I2C - POC
Wstęp
Ostatnio zmontowałem układ do odczytu bezprzewodowej sondy temperatury i wilgotności. Patrz:- http://arduinoj.blogspot.com/2013/05/odczyt-bezprzewodowej-sondy-temperatury.html
- http://arduinoj.blogspot.com/2013/05/odczyt-bezprzewodowej-sondy-programowa.html
- http://arduinoj.blogspot.com/2013/06/pierwszy-artyku-na-majsterkowopl.html
Wybór padł na interfejs I2C. Czemu akurat ten. A bez konkretnego powodu, raz żeby go poznać, a dwa bo jakoś intuicyjnie wydał mi się dobry.
Na zdjęciu poniżej widać wszystko co akurat mam zmontowane i oryginalną stację odczytującą dane z tej samej bezprzewodowej sondy.
czwartek, 4 lipca 2013
wyświetlacz LCD po I2C i zegar RTC - testowanie zabawek
Wstęp
Nadszedł czas na testowanie zabawek zakupionych wcześniej. Na pierwszy ogień poszły:- przystawka do wyświetlacza LCD o symbolu I2C lcd1602
- zegar RTC oparty o układ DS1307
piątek, 14 czerwca 2013
Promocyjne zakupy w nettigo
Zakupy
Dzięki temu, że mój artykuł dostał się na stronę główną majsterkowo.pl dostałem możliwość dokonania promocyjnych zakupów w sklepie internetowym nettigo.pl.To wszystko z 50% zniżką:
poniedziałek, 10 czerwca 2013
Główna na majsterkowo.pl
Mój artykuł http://majsterkowo.pl/odczyt-bezprzewodowej-sondy-temperatury-i-wilgotnosci/ trafił na główną stronę portalu. A to oznacza, że w sklepie http://nettigo.pl będę miał 50% zniżki na zakupy :)
sobota, 1 czerwca 2013
Pierwszy artykuł na majsterkowo.pl
Opublikowałem pierwszy artykuł na majsterkowo.pl - http://majsterkowo.pl/odczyt-bezprzewodowej-sondy-temperatury-i-wilgotnosci/
Ciekawe czy trafi na główną.
Ciekawe czy trafi na główną.
czwartek, 30 maja 2013
Odczyt bezprzewodowej sondy - programowa poprawa jakości odczytu
Dzisiaj zabrałem się za ostateczną poprawę algorytmu do odczytu danych.
niedziela, 26 maja 2013
Odczyt bezprzewodowej sondy temperatury i wilgotności
Krótkie wprowadzenie
Dawno mnie nie było, ale poważnym tematem się zająłem ;) i dlatego tyle to trwało.Jak widać na blogu od jakiegoś czasu zajmuję się monitorowaniem warunków (temperatura, wilgotność) w mieszkaniu i na zewnątrz.
Jestem w posiadaniu stacji pogodowej (mniej więcej takiej http://www.biowin.pl/bioterm/elektroniczne-stacje-pogody/bezprzewodowy-barom--term--higrom-wew--zew-/bezprzew-stacja-pog-barometr-pogod-zeg-kal-rcc) z bezprzewodową sondą temperatury i wilgotności i postanowiłem nauczyć się odczytywać jej wskazania i przesyłać je do komputera.
niedziela, 28 kwietnia 2013
Pierwsza produkcyjna implementacja - dołożenie czujnika DHT22
Kolejna porcja zabawek z Chin
czwartek, 25 kwietnia 2013
DHT22 i lcd Display
Dzisiaj uruchomiłem czujnik temperatury i wilgotności DHT22, a potem wyświetlacz LCD. Nic ciekawego, jedno i drugie po prostu działa.
Następnie zbudowałem prosty termometr i wilgotnościomierz z wyświetlaczem.
Następnie zbudowałem prosty termometr i wilgotnościomierz z wyświetlaczem.
sobota, 20 kwietnia 2013
Programowanie Atmega328P-PU za pomocą USBAsp
Programowanie Atmega328P-PU za pomocą Arduino
Na początku zaprogramowałem mikrokontroler. Analogicznie jak Atmega16 wcześniej (patrz artykuł Pierwsza produkcyjna implementacja - programowanie mikrokontrolera).Schemat analogiczny:
niedziela, 14 kwietnia 2013
sobota, 13 kwietnia 2013
Pierwsza produkcyjna implementacja - zasilanie
niedziela, 7 kwietnia 2013
Pierwsza produkcyjna implementacja - standard przesyłania danych i czas systemowy
Standard
Postanowiłem opracować prosty standard danych aby:- wyeliminować ewentualne dodatkowe teksty wprowadzane do strumienia danych przez programy jak cu
- zapewnić kompatybilność rozwiązania w przyszłości kiedy dane będą się zmieniać
sobota, 6 kwietnia 2013
Pierwsza produkcyjna implementacja - komunikacja po rs232
Kabelek
Podczas prac nad połączeniem mojego atmega16 do komputera posiłkowałem się artykułem RS-232: Komunikacja ATmega8 z komputerem.Do zrobienia wtyczki wykorzystałem trzy linie z taśmy (trzeba było chyba cztery albo pięć, ale o tym później), akurat kolory przewodów to czerwony, pomarańczowy i żółty. Przylutowałem je następująco:
- czerwony - RXD - pin nr 2
- pomarańczowy - TXD - pin nr 3
- zółty - GND - pin nr 5
Z drugiej strony przewodów przylutowałem goldpiny i zabezpieczyłem koszulkami termokurczliwymi.
Gotowy przewód prezentuje się następująco:
Przewód do podłączania układu do RS232 |
Reszta układu na płytce stykowej
Na początek zaprojektowałem sobie układ w programie fritzing.Projekt układu we Fritzing |
piątek, 5 kwietnia 2013
Pierwsza produkcyjna implementacja - komunikacja po rs232
Zakupy
Kupiłem dzisiaj części potrzebne żeby skomunikować kontroler z komputerem:- układ scalony MAX232
- kilka kondensatorów
- wtyczkę
czwartek, 4 kwietnia 2013
Pierwsza produkcyjna implementacja - programowanie mikrokontrolera
Zakupy
Okazało się, że aby zaprogramować mikrokontroler nie trzeba nic kupować poza tym co mam czyli:- płytka stykowa
- arduino uno r3
- trochę kabelków
Programowanie
Informacji o tym jak zaprogramować mikrokontroler zacząłem szukać na stronie http://majsterkowo.pl, a konkretnie od artykułu Programowanie ATmega8A oraz ATmega328P za pomocą Arduino. Wywnioskowałem z niego, że po pierwsze to muszę mieć bootloader, który później wgram. W artykule były linki do bootloaderów do dwóch innych kontrolerów, ale nie do atmega16 którego posiadałem. Zacząłem więc przeszukiwać internet w celu znalezienia odpowiedniego bootloadera i ... nie znalazłem.Poprosiłem więc o pomoc na forum Majsterkowa - patrz wątek. Już po niecałych 24h dostałęm odpowiedź od kolegi czaja000. Wskazał mi artykuł z rozwiązaniem mojego problemu. Artykuł był ... tuż obok poprzedniego. Pod latarnią najciemniej :)
Podłączenie kabelków
Zmontowałem układ wg schematu:Schemat połączeń |
posiłkując się przy tym artykułami Programowanie mikrokontolerów na przykładzie ATTINY2313 oraz Opis wyprowadzeń Atmega16/Atmega32.
wtorek, 2 kwietnia 2013
Pierwsza produkcyjna implementacja - wybór i kupno mikrokontrolera
Mikrokontroler
Kupiłem ATMEGA16-16PU. 14 PLN kosztował w sklepie, nie wiem czy to najlepszy wybór, ale powinien się nadać.Teraz trzeba się nauczyć jak go zaprogramować przy pomocy arduino i zrobić to, ale to już nie dzisiaj.
poniedziałek, 1 kwietnia 2013
Pierwsza produkcyjna implementacja - sprawdzenie czemu na wykresach brakuje danych
Co było powodem
Po "ciężkich" bojach z wykresami na których brakowało danych (patrz wpis Pierwsza produkcyjna implementacja - instalacja na Linuksie okazało się, że powodem jest zapisywanie liczb zmiennoprzecinkowych w zależności od jakichś ustawień lokalnych (czyli 0,5 zamiast 0.5).sobota, 30 marca 2013
Pierwsza produkcyjna implementacja - instalacja na Linuksie
Uruchomienie platformy arduino na Linuksie
Na moim serwerze w domu chodzi akurat Ubuntu w wersji 12.04. Poniższy opis będzie się odnosił właśnie do tej platformy.Na początek zainstalowałem menadżerem programów (synaptic) pakiet arduino, menadżer pakietów wskazał dodatkowe pakiety potrzebne do zainstalowania:
- arduino - AVR development board IDE and built-in libraries
- arduino-core - Code, examples, and libraries for the Arduino platform
- avr-libc - Standardowa biblioteka C do programowania kontrolerów Amtel AVR
- avrdude - Oprogramowanie do programowania mikrokontrolerów AVR firmy Atmel
- binutils-avr - Binary utilities supporting Atmel's AVR targets
- extra-xdg-menus - Extra menu categories for applications under GNOME and KDE
- gcc-avr - Kompilator GNU C (kompilator krzyżowy do avr)
- libftdi1 - Library to control and program the FTDI USB controller
- libjna-java - Dynamic access of native libraries from Java without JNI
- librxtx-java - Full Java CommAPI implementation
- default-jre
- java6-runtime
- policykit-1
- fritzing - Easy-to-use electronic design software
- fritzing-data - Easy-to-use electronic design software (data files)
- rrdtool - time-series data storage and display system (programs)
- drraw - A simple web based presentation front-end for RRDtool
Po zainstalowaniu tego wszystkiego podpiąłem zestaw kablem USB zestaw do komputera, uruchomiłem Arduino IDE, poleceniem arduino ;), w Tools/Serial Port wybrałem /dev/ttyACM0 (pojawiło się to urządzenie po podpięciu arduino do komputera), uruchomiłem Serial Monitor i ...
Działające środowisko arduino na Linuksie |
działa :)
Próba skompilowania i załadowania innego programu także się powiodła :)
czwartek, 28 marca 2013
Pierwsza produkcyjna implementacja - plan działania
Wstęp
Po zrobieniu działającego prototypu monitora temperatury opisanego w RRDTool i wykresy, którego efekty działania można obejrzeć na obrazkach poniżejWszystkie temperatury |
Temperatura na zewnątrz |
- całość działa całkowicie bezobsługowo, wystarczy załączyć zasilanie i już,
- wyniki działania dostępne są przez przeglądarkę (także z internetu),
- nie jest użyte arduino, ono posłuży do kolejnych prototypów.
Oszczędzanie energii - część II
Witam,
Tak mi się jakoś wierzyć nie chciało, że nie da się oszczędzać energii w arduino (patrz wpis Oszczędzanie energii).
I okazało się, że oczywiście się da :)
Trzeba skorzystać z biblioteki avr\sleep.h
Dla mojego arduino są tam zdefiniowane takie tryby oszczędzania energii jak:
Tak mi się jakoś wierzyć nie chciało, że nie da się oszczędzać energii w arduino (patrz wpis Oszczędzanie energii).
I okazało się, że oczywiście się da :)
Trzeba skorzystać z biblioteki avr\sleep.h
Dla mojego arduino są tam zdefiniowane takie tryby oszczędzania energii jak:
- SLEEP_MODE_IDLE
- SLEEP_MODE_ADC
- SLEEP_MODE_PWR_DOWN
- SLEEP_MODE_PWR_SAVE
- SLEEP_MODE_STANDBY
- SLEEP_MODE_EXT_STANDBY
niedziela, 24 marca 2013
RRDTool i wykresy
Dzisiaj napiszę kilka słów o wykresach.
Kupiłem cztery czujniki temperatury d18b20. Przykład ich podłączenia jest np tu. W sumie w sieci jest wiele takich przykładów.
Teraz chcę napisać nie jak zmierzyć temperaturę tylko jak narysować wykres tej temperatury. Najpierw napisałem programik, o taki:
Program raz na minutę wysyła na RS232 informację o czasie od uruchomienia w milisekundach i wartości pomiarów z czterech czujników, coś takiego konkretnie:#include <OneWire.h> #include <DallasTemperature.h> // Data wire is plugged into port 2 on the Arduino #define ONE_WIRE_BUS 2 #define TEMPERATURE_PRECISION 12 #define MAX_NUM_OF_DEVICES 8 // Setup a oneWire instance to communicate with any OneWire devices OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); int numberOfDevices; // Number of temperature devices found DeviceAddress arrTempDeviceAddress [MAX_NUM_OF_DEVICES]; // odstęp między pomiarami #define ODSTEP_MIEDZY_POMIARAMI 60000 unsigned long ostatniCzasPomiaru = 0; void setup(void) { // start serial port Serial.begin(57600); // Start up the library sensors.begin(); // Grab a count of devices on the wire numberOfDevices = sensors.getDeviceCount(); if (numberOfDevices > MAX_NUM_OF_DEVICES) numberOfDevices = MAX_NUM_OF_DEVICES; for (int i = 0; i < numberOfDevices; i++) { // Search the wire for address if (sensors.getAddress(arrTempDeviceAddress [i], i)) { sensors.setResolution(arrTempDeviceAddress [i], TEMPERATURE_PRECISION); } } } void loop(void) { unsigned long czasPomiaru = millis(); // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus sensors.requestTemperatures(); // Send the command to get temperatures Serial.print(czasPomiaru); Serial.print(";"); // Loop through each device, print out temperature data for(int i = 0; i < numberOfDevices; i++) { float tempC = sensors.getTempC(arrTempDeviceAddress [i]); if (tempC > -127.0) // -127.0 to brak odczytu z sensora Serial.print(tempC); Serial.print(";"); } Serial.println(); // obliczenie ile czasu czekać do następnego pomiaru long waitTime = ODSTEP_MIEDZY_POMIARAMI - (millis() - ostatniCzasPomiaru); ostatniCzasPomiaru += ODSTEP_MIEDZY_POMIARAMI; if (waitTime > 0) delay (waitTime); }
492;-7.75;21.69;19.37;39.44;Przechwytuję te wartości przy pomocy programu CoolTerm i zapisuję do pliku.
60000;-7.88;21.69;19.37;38.94;
120000;-7.81;21.62;19.37;38.50;
...
Można je następnie wkleić do np LibreOffice Calc i uzyskać taki wykres
Wykres całkiem ładny jednak trzeba się trochę narobić aby go zrobić. Może i niedużo ale jednak. A ja chciałbym aby taki wykres sam się robił i jeszcze publikował gdzieś gdzie będzie dla mnie dostępny online.
I tu z pomocą przyszło mi narzędzie RRDTool. Bardzo (ale to bardzo) ogólnie mówiąc jest to narzędzie, które potrafi zbierać dane i tworzyć raporty (także w postaci wykresów).
Po napisaniu kilku prostych skryptów (windowsowe cmd + gawk) otrzymałem taki efekt:
Pełny zbiór kodów dostępny jest tutaj.
W dalszej części zajmę się publikowaniem tych wykresów w sieci oraz jakimś sposobem aby dane pomiarowe lądowały od razu w sposób automatyczny w bazie RRDTool i były publikowane na serwerze www.
Jeżeli Was to interesuje i chcielibyście wiedzieć coś więcej proszę o pytania.
sobota, 23 marca 2013
Podłączanie wyświetlacza led
Zrobiłem sobie monitor temperatury w domu, cztery czujniki ds18b20 podłączone przez skrętkę monitorują temperaturę w mieszkaniu i na zewnątrz - ale to temat na osobny artykuł.
Teraz chciałem się podzielić pewnym doświadczeniem, kupiłem tani wyświetlacz led ldd055bg. Podłączyłem zaledwie jedną cyfrę do rejestru przesuwnego i ... zużyłem większość kabelków z zestawu startowego, a całość wygląda tak:
Chciałem jeszcze podłączyć drugą cyfrę przez ten drugi scalak z zestawu startowego, ale chyba sobie już dzisiaj odpuszczę i zajmę się tematem pobierania danych z rs232 i publikowania ich automatycznie w postaci wykresów. Jak będzie sukces to się podzielę.
Teraz chciałem się podzielić pewnym doświadczeniem, kupiłem tani wyświetlacz led ldd055bg. Podłączyłem zaledwie jedną cyfrę do rejestru przesuwnego i ... zużyłem większość kabelków z zestawu startowego, a całość wygląda tak:
Chciałem jeszcze podłączyć drugą cyfrę przez ten drugi scalak z zestawu startowego, ale chyba sobie już dzisiaj odpuszczę i zajmę się tematem pobierania danych z rs232 i publikowania ich automatycznie w postaci wykresów. Jak będzie sukces to się podzielę.
Oszczędzanie energii
Jestem po pierwszych zabawach z arduino czyli czujnikami temperatury, diodami, odbiornikiem podczerwieni itp postanowiłem opisać swoje pierwsze rozważania na temat poboru energii przez układ.
Budując układ do pomiaru temperatury (patrz Jak mierzyć temperaturę z Arduino) napisałem prosty program
Po nieco trudnej ale ciekawej lekturze dwóch artykułów:
Pytanie jednak brzmi czy zmniejszenie liczby pomiarów poprzez wstawienie instrukcji 'delay' na końcu metody loop zmniejszy pobór energii. Arduino podłączone do 9V baterii wykonując powyższy program pobiera 47,1 mA. Po dodaniu na końcu instrukcji
No i to by było na tyle w temacie oszczędzania energii. Szczerze mówiąc zawiedziony jestem, taki fajny algorytm dynamicznego dostosowywania liczby pomiarów do aktualnych warunków w głowie miałem.
Do tematu jednak zamierzam wrócić bo to się wierzyć nie chce, że nie da się postawić układu w stan zawieszenia kiedy zapotrzebowanie na energię jest minimalne
Budując układ do pomiaru temperatury (patrz Jak mierzyć temperaturę z Arduino) napisałem prosty program
i zauważyłem, że kolejne pomiary potrafią się czasem sporo różnić mimo, że temperatura czujnika tak naprawdę się nie zmienia. No cóż, pewnie napięcie na usb niezbyt stabilne jest więc stąd te niedokładności. Aby je usunąć zrobiłem małą zmianę w programie, a mianowicie:#define TEMP_PIN 2 void setup() { Serial.begin(57600); } void loop() { float wart = analogRead(TEMP_PIN); float temp = ((wart * 5.0 / 1024.0) - 0.5) / 0.01; Serial.print(temp); }
zmianę, która jak łatwo zauważyć przez minutę liczy średnią, a następnie wypisuje ją oraz liczbę pomiarów.W ciągu minuty na moim arduino liczba pomiarów w ciągu minuty to prawie 500 tys. Zaczęło mnie zastanawiać czy tak duża liczba pomiarów jest potrzebna. Intuicja mi bowiem podpowiadała, że każdy taki pomiar zużywa energię, a arduino z baterii potrafi być zasilane więc dobrze aby na niej długo działało.#define TEMP_PIN 2 #define INTERVAL 60000 unsigned long lastTime = 0; unsigned long count = 0; unsigned long value_sum = 0; void setup() { Serial.begin(57600); } void loop() { int value = analogRead(TEMP_PIN); value_sum += value; count ++; unsigned long time = millis(); if (time - lastTime > INTERVAL) { float temp = (((value_sum) * 5.0 / 1024.0 / count) - 0.5) / 0.01; Serial.print(temp); Serial.print(";"); Serial.print(count); Serial.println(); lastTime = time; count = 0; value_sum = 0; } }
Po nieco trudnej ale ciekawej lekturze dwóch artykułów:
- Opracowanie Pani Agnieszki Korgul na temat pomiarów pt Analiza danych pomiarowych
- kilka dodatkowych informacji w Wikipedii - Odchylenie standardowe
Pytanie jednak brzmi czy zmniejszenie liczby pomiarów poprzez wstawienie instrukcji 'delay' na końcu metody loop zmniejszy pobór energii. Arduino podłączone do 9V baterii wykonując powyższy program pobiera 47,1 mA. Po dodaniu na końcu instrukcji
delay (6);
liczba pomiarów spada do 9800, a pobór prądu ... rośnie do 47,8 mA.No i to by było na tyle w temacie oszczędzania energii. Szczerze mówiąc zawiedziony jestem, taki fajny algorytm dynamicznego dostosowywania liczby pomiarów do aktualnych warunków w głowie miałem.
Do tematu jednak zamierzam wrócić bo to się wierzyć nie chce, że nie da się postawić układu w stan zawieszenia kiedy zapotrzebowanie na energię jest minimalne
wtorek, 19 marca 2013
Wstęp do tego wszystkiego
Witam Was
od dłuższego czasu nosiło mnie żeby rozpocząć zabawę z elektroniką, a konkretnie z mikro-kontrolerami.
Ostatnio kupiłem zestaw startowy Arduino i ... zabawa się zaczęła.
Tu zamierzam opisywać moje doświadczenia. Ale to za chwilę jak tylko przestanę się bawić ;)
pozdrawiam
Jacek
ps
tak w ogóle to mój pierwszy blog więc proszę o wyrozumiałość
od dłuższego czasu nosiło mnie żeby rozpocząć zabawę z elektroniką, a konkretnie z mikro-kontrolerami.
Ostatnio kupiłem zestaw startowy Arduino i ... zabawa się zaczęła.
Tu zamierzam opisywać moje doświadczenia. Ale to za chwilę jak tylko przestanę się bawić ;)
pozdrawiam
Jacek
ps
tak w ogóle to mój pierwszy blog więc proszę o wyrozumiałość
Subskrybuj:
Posty (Atom)