Elektroda.pl
Elektroda.pl
X
CControls
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Rejestrator pogodowy

Duch__ 01 Maj 2010 12:49 37905 76
  • Rejestrator pogodowy

    Witam.

    Dzisiaj chciałbym zaprezentować układ który wykonałem na zaliczenie przedmiotu Technika Mikroprocesorowa na Politechnice Opolskiej.
    Układ nazwałem "REJESTRATOR".

    Sercem układu jest Atmega32. Program został napisany w BASCOM-ie. Zajmuje 42%.

    Pomiary wykonywane są na 3 czujnikach:

    - Temperatura i wilgotność wewnętrzna: SHT10

    Aktualizacja 6.06.10 czujnik został zmieniony na SHT11

    - Temperatura zewnętrzna: DS18b20
    - Ciśnienie atmosferyczne: MPX4115

    Do odmierzania czasu zastosowałem zegar RTC PCF8583 z podtrzymywaniem za pomocą kondensatora 1F/5,5V.

    Wyniki pomiarów zapisywane są na karcie SD do pliku TXT, zawsze wtedy gdy minuty wynoszą 0,10,20,30,40 lub 50, natomiast co 15 sekund dokonywany jest pomiar i odświeżany na LCD.

    Dodatkowo układ posiada automatyczną regulację jasności podświetlania wyświetlacza tak by w nocy nie raził, a za to w dzień był czytelny. Pomiar jasności dokonywany jest przez dzielnik rezystancyjny składający się z fotorezystora i rezystora 100kohm, a następnie dokonywana jest programowo korekcja sygnału PWM. Korekta jasności odbywa się w 25 sekundzie każdej minuty. Takie rzadkie sprawdzanie ma na celu zabezpieczenie przed drażniącym migotaniem podświetlania.

    Układ w zasadzie jest bezobsługowy, chociaż zastosowałem 2 przyciski do ustawiania daty i godziny w układzie PCF8583, oraz dwie diody LED do sygnalizacji komunikacji z PCF8583 (zielona), oraz zapisu danych na SD (czerwona). Problemy z zapisem na SD sygnalizowane są ikonką karty na ekranie (cała zamalowane), oraz ciągłym świeceniem diody LED. W normalnej pracy dioda czerwona nie świeci, a symbol karty jest "pusty".

    Za obudowę posłużył kawałek plexi wygięty za pomocą hot air-a.

    Koszty:
    DS18b20 - miałem.
    SHT10 - 35zł (allegro) / 6.06.10 wymieniony na SHT11
    MPX4115 - 45zł (allegro)
    Atmega32 - miałem
    Gniazdo SD - 4zł
    Wyświetlacz i reszta elementów - miałem.

    Zdjęcia:

    Rejestrator pogodowy Rejestrator pogodowy Rejestrator pogodowy




    Rejestrator pogodowy Rejestrator pogodowy Rejestrator pogodowy

    Sposób zapisu wyników na SD:
    Rejestrator pogodowy

    Prezentacja wyników w arkuszu kalkulacyjnym:
    Rejestrator pogodowy

    Zapraszam do komentowania.

    Pozdrawiam, Duch__

    PS. Projekt został zaliczony na 5 :D


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • CControls
  • #3 01 Maj 2010 15:07
    smalski
    Poziom 17  

    Super konstrukcja!!!

    Czy do zapisu na SD użyłeś AVR-DOS??
    Również proszę o udostępnienie kodu.
    pozdrawiam/smalski

  • CControls
  • #5 01 Maj 2010 21:56
    farrix
    Poziom 17  

    Fajna konstrukacja tylko jedna rzecz mnie dziwi:

    Czemu nie dałeś bateri cr2032 albo jakiegoś akumulatorka AAA zamiast tego kondensatora, długo on wogóle trzyma, coś m się wydaje że nie za długo,
    ale jestem za udostępnieniem kodu.

  • #6 01 Maj 2010 22:02
    charwer
    Poziom 15  

    Cześć. Podoba mi się to, że wykorzystałeś podtrzymanie przy pomocy kondensatora dla RTC. Nie trzeba się martwić o to czy bateria jest sprawna. Poza tym obniża to koszty, bateryjkę trzeba co jakiś czas dla pewności wymienić. Sprawdzałeś może ile czasu pracuje RTC przy takim podtrzymaniu?

  • #7 01 Maj 2010 22:27
    pillot
    Poziom 2  

    Bardzo ciekawy projekt i dobre wykonanie. Podoba mi się ikonka karty. Czy dobrze widzę, że płytka pokryta jest czymś od strony druku? Nitro bądź spirytus + kalafonia czy jakiś lakier? Dołączam się do pytania o RTC.

    Mam jeszcze pytanie innego rodzaju - długo już szukam (tzn. gdy "przy okazji" mam możliwość) takich "kołków", w które wkręcasz śrubę M3 lub inną. U Kolegi pełnią funkcję nóżek/dystansów do pleksi. Czy wie ktoś może jak to się fachowo nazywa i gdzie je nabyć, może być hurtowo lub detalicznie. Pamiętam, że w zwykłym metalowcu nie mogłem się doszukać.

  • #8 01 Maj 2010 22:52
    JaroFon
    Poziom 23  

    pillot napisał:
    Mam jeszcze pytanie innego rodzaju - długo już szukam (tzn. gdy "przy okazji" mam możliwość) takich "kołków", w które wkręcasz śrubę M3 lub inną. U Kolegi pełnią funkcję nóżek/dystansów do pleksi. Czy wie ktoś może jak to się fachowo nazywa i gdzie je nabyć, może być hurtowo lub detalicznie. Pamiętam, że w zwykłym metalowcu nie mogłem się doszukać.

    Cała gama dystansów o które Pytasz jest dostępna w TME. Tuleje dystansowe metalowe mosiężne z gwintem 2,5mm, 3mm i 4mm

  • #9 02 Maj 2010 00:27
    biglolo94
    Poziom 16  

    Świetny projekt. Dobre wykonanie i wogole pomysł.
    Interesuje mnie zapis wartosci z czujnikow na karte pamieci (data godzina temperatura itp.).
    Czy moglbym prosic o kod?

  • #10 02 Maj 2010 07:45
    Villen
    Poziom 21  

    Polecam poczytać dokumentację bascoma. Karty SD można dosyć łatwo obsługiwać przez interfejs SPI.

    Projekt ładnie wykonany i na pewno spełniający swoje zadanie.

    Mogę spytać przy jakiej temperaturze giąłeś plexi? Sam będę w najbliższym czasie wykonywał obudowę w podobnym stylu...

  • #11 02 Maj 2010 09:45
    Duch__
    Poziom 31  

    Dziękuję za opinie.

    JaroFon napisał:
    Czy jest szansa żebyś udostępnił wsad do Atmegi jak również pliki do projektu PCB?


    Na obecną chwilę mogę udostępnić tylko schemat i wzór płytki, natomiast co do programu to zainteresowanym mogę przedstawić wybrane fragmenty kodu. Proszę pytać.

    smalski napisał:
    Czy do zapisu na SD użyłeś AVR-DOS??


    Tak.

    Miar napisał:
    Na jakiej zasadzie polega odczyt z ciśnieniomierza?


    Jest to po prostu pomiar napięcia na przetworniku ADC Atmegi32, a następnie przeliczenie tego na wartość ciśnienia. Wartość napięcia na wyjściu MPX4115 zmienia się w przedziale od 0.2 do 4,8V i jest proporcjonalna do panującego ciśnienia. Można by było użyć jakiegoś zewnętrznego przetwornika A/C o wyższej rozdzielczości w celu uzyskania lepszej dokładności, ale ja z tego zrezygnowałem gdyż uzyskana dokładność na poziomie 0.2-0.3hPa była dla mnie wystarczająca.

    farrix napisał:
    Czemu nie dałeś bateri cr2032 albo jakiegoś akumulatorka AAA zamiast tego kondensatora, długo on wogóle trzyma, coś m się wydaje że nie za długo


    Co masz na myśli kolego mówiąc długo? 1h, 2h, 5h, 1dzień, 1 tydzień, 1 miesiąc? Powiem tak. Użyłem go gdyż zajmuje znacznie mniej miejsca niż typowa bateria CR2032, wraz z koszyczkiem.
    Na razie testowałem układ przez 5h i trzymał elegancko.

    pillot napisał:
    Czy dobrze widzę, że płytka pokryta jest czymś od strony druku? Nitro bądź spirytus + kalafonia czy jakiś lakier?


    Płytkę zabezpieczyłem przed utlenianiem preparatem PLASTIC 70.

    biglolo94 napisał:
    Interesuje mnie zapis wartosci z czujnikow na karte pamieci (data godzina temperatura itp.).
    Czy moglbym prosic o kod?


    Proszę o to fragment kodu dot. zapisu na SD:

    Code:
    Sub Write_to_sd                                          
    
       Local Errorcode As Byte
         Gbdriveerror = Driveinit()
        If Gbdriveerror = 0 Then
          Errorcode = Initfilesystem(1)
          If Errorcode <> 0 Then
             Blad_sd = 1
          Else
             Reset Sd_dioda
             Open "pomiar.txt" For Append As #2
             Write #2 , Data_pcf , Czas_pcf , T1 , Sht10_temp , Wart_p , Sht10_hum
             Flush #2
             Close #2
             Blad_sd = 0
             Set Sd_dioda
          End If
        Else
          Reset Sd_dioda
          Blad_sd = 1
       End If

    End Sub


    Villen napisał:
    Mogę spytać przy jakiej temperaturze giąłeś plexi?


    Posiadam stację HOT AIR PT 803. Nie mam na niej wyświetlacza od temperatury, ale ustawiłem ją mniej więcej na 2 w 8 stopniowej skali i w odległości około 5cm przesuwałem kolbę tam i spowrotem. Proces ten wykonywałem bardzo powoli żeby nie przegrzać pleksi.

  • #12 02 Maj 2010 11:41
    JaroFon
    Poziom 23  

    Kolego @Duch pliki do Eagle które udostępniłeś niestety nie są kompletne, tz. nie do końca są zaprojektowane. Na PCB nie zostało wszystko zaprojektowane, wydaje mi się że całe GND. Czy można prosić o pliki takie jak Ty wykonałeś PCB do projektu?

  • #13 02 Maj 2010 12:00
    Renegat_pol
    Poziom 20  

    JaroFon napisał:
    Kolego @Duch pliki do Eagle które udostępniłeś niestety nie są kompletne, tz. nie do końca są zaprojektowane. Na PCB nie zostało wszystko zaprojektowane, wydaje mi się że całe GND. Czy można prosić o pliki takie jak Ty wykonałeś PCB do projektu?


    Kłania się znajomość pakietu EAGLE. Naciśnij retsnest ( trzeci z lewej od dołu) i będziesz miał GND.

  • #14 02 Maj 2010 12:08
    Duch__
    Poziom 31  

    Renegat_pol napisał:
    JaroFon napisał:
    Kolego @Duch pliki do Eagle które udostępniłeś niestety nie są kompletne, tz. nie do końca są zaprojektowane. Na PCB nie zostało wszystko zaprojektowane, wydaje mi się że całe GND. Czy można prosić o pliki takie jak Ty wykonałeś PCB do projektu?


    Kłania się znajomość pakietu EAGLE. Naciśnij retsnest ( trzeci z lewej od dołu) i będziesz miał GND.


    Dokładnie tak jak napisał Renegat_pol. Szukaj tego przycisku:

    Rejestrator pogodowy

  • #15 02 Maj 2010 12:40
    jaroslawk
    Poziom 21  

    Witam,
    Czy mógłbyś zamieścić procedury do obsługi (odczytu) pomiaru ciśnienia oraz wilgotności.

  • #16 02 Maj 2010 13:36
    rav1989
    Poziom 11  

    Witam

    Świetny projekt :) sam mam ochotę zrobić coś takiego.

    Zastanawiam się czy znalazłoby się jeszcze miejsce na obsługę rs232 tak żeby wyświetlać dane w programie ew. na stronie (można by użyć do tego celu jakiś router z openWRT)?

    Oraz proszę o fragmenty kodu odpowiedzialne za:
    Odczyt temperatury i wilgotności z SHT10

    Pozdrawiam

  • #17 02 Maj 2010 13:54
    Duch__
    Poziom 31  

    jaroslawk napisał:
    Witam,
    Czy mógłbyś zamieścić procedury do obsługi (odczytu) pomiaru ciśnienia oraz wilgotności.


    Odczyt SHT10:

    Code:

    Sub Sht10
       Command = &B00000011
       Call Getit                                               'Get the temperature, puts result in "dataword" for us
       Tempc = 0.01 * Dataword                                  'get celcius for later calculations and for "the rest of the world"
       Tempc = Tempc - 41
       Sht10_temp = Fusing(tempc , "###.#")
       Command = &B00000101
       Call Getit                                               'get the humidity
       Calc = 0.0405 * Dataword
       Calc2 = Dataword * Dataword                              'that "2" in the datasheet sure looked like a footnote for a couple days, nope it means "squared"!
       Calc2 = -0.0000028 * Calc2
       Calc = Calc - 4
       Rhlinear = Calc + Calc2
       Calc = 0.00008 * Dataword
       Calc = Calc + 0.01
       Calc2 = Tempc - 25
       Calc = Calc2 * Calc
       Rhlintemp = Calc + Rhlinear
       Sht10_hum = Fusing(rhlintemp , "##.#")
    End Sub

    '****************************Obsługa GETIT od SHT10*****************************

    Sub Getit()
       Local Datavalue As Word
       Local Databyte As Byte
       'start with "transmission start"
       Set Sck
       Reset Dataout
       Reset Sck
       Set Sck
       Set Dataout
       Reset Sck
       Shiftout Dataout , Sck , Command , 1
       Config Pina.6 = Input                                    'datain
       Set Sck                                                  'click one more off
       Reset Sck
       Waitus 50                                                'no idea why, but it doesn't work without it!
       Bitwait Pina.6 , Reset                                   'wait for the chip to have data ready
       Shiftin Datain , Sck , Databyte , 1                      'get the MSB
       Datavalue = Databyte
       Config Pina.6 = Output
       Reset Dataout                                            'this is the tricky part- Lot's of hair pulling- have to tick the ack!
       Set Sck
       Reset Sck
       Config Pina.6 = Input
       Shiftin Datain , Sck , Databyte , 1                      'get the LSB
       Shift Datavalue , Left , 8
       Datavalue = Datavalue Or Databyte
       Dataword = Datavalue
       Config Pina.6 = Output
       Reset Dataout
       Set Sck
       Reset Sck
       Config Pina.6 = Input
       Shiftin Datain , Sck , Databyte , 1                      'not using the CRC value for now- can't figure it out! Anybody know how to impliment?
       Config Pina.6 = Output
       Set Dataout
       Set Sck
       Reset Sck
    End Sub


    Odczyt MPX4115:
    Code:

    Sub Mpx4115
    Local Wart_ac As Word
    'Local Pomiar As Byte
    Wart_ac = 0
    For Powtorz = 1 To 4
    Start Adc
    Waitus 50
    Wart_ac = Wart_ac + Getadc(0)
    Waitus 50
    Stop Adc
    Waitms 1
    Next Powtorz
    Cisnienie_wynik = Wart_ac * 0.00024463
    Cisnienie_wynik = Cisnienie_wynik + 0.095
    Cisnienie_wynik = Cisnienie_wynik * 1107.9651
    Wart_p = Fusing(cisnienie_wynik , "#.#")
    End Sub



    rav1989 napisał:
    Witam
    Zastanawiam się czy znalazłoby się jeszcze miejsce na obsługę rs232


    Na płytce znajdują się wyprowadzenia do UARTu (oznaczone jako RS), w standardzie TTL wraz z wyprowadzonym VCC i GND.

  • #18 02 Maj 2010 15:04
    slawek55
    Poziom 23  

    Mógłby mi ktoś powiedzieć jak uruchomi zapis na karcie SD?
    Jak do tego skonfigurować Bascoma i do jakiej max pojemności karty są obsługiwane?

  • #19 02 Maj 2010 16:23
    Duch__
    Poziom 31  

    slawek55 napisał:
    Mógłby mi ktoś powiedzieć jak uruchomi zapis na karcie SD?
    Jak do tego skonfigurować Bascoma i do jakiej max pojemności karty są obsługiwane?


    Nic nie trzeba konfigurować w kompilatorze. Potrzebujesz za to biblioteki zadeklarowane na początku programu:
    Code:

    $include "Config_MMC.bas"                                   'Konfiguracja pinów karty SD
    $include "Config_AVR-DOS.BAS"                               'Biblioteka AVR-DOS


    W załączniku niezbędne pliki do odpalenia AVR-DOS.

  • #20 02 Maj 2010 16:50
    slawek55
    Poziom 23  

    I wystarczy potem wywałać funkcję Write_to_sd
    Nie trzeba na początku dać jakiejś inicjacji?? Dość fajnie się zapowiada.
    A możesz powiedzieć skąd to pobrałeś, może jest jakiś opis lub przykłady?
    A udostępnisz cały kod kiedyś?

  • #21 02 Maj 2010 17:21
    Duch__
    Poziom 31  

    Proponuje zapoznać się z HELP-em do BASCOM-a, tam jest cała biblioteka AVR-DOS ładnie opisana no i TUTAJ

  • #22 03 Maj 2010 18:53
    ~~~pio~~~
    Poziom 15  

    Bardzo fajny projekt, ja osobiście bym to zrobił na wyświetlaczu graficznym i wyświetlił dodatkowo wykres.

  • #23 03 Maj 2010 19:41
    leon1313
    Poziom 14  

    Az się prosi o jakieś złącze USB do upload'u danych na kompa...

  • #24 03 Maj 2010 19:55
    Duch__
    Poziom 31  

    ~~~pio~~~ napisał:
    ja osobiście bym to zrobił na wyświetlaczu graficznym i wyświetlił dodatkowo wykres.
    Chciałem to zrobić na LCD graficznym LS0XX z s65, ale ostatecznie wykorzystam go w innym projekcie.
    leon1313 napisał:
    Az się prosi o jakieś złącze USB do upload'u danych na kompa...
    Według uznania, mi nie potrzebne, no chyba że wysyłałoby po podłączeniu do kompa całą zawartość SD, to wtedy przydatne bo nie trzeba by wyciągać karty.

  • #25 06 Maj 2010 11:42
    Duch__
    Poziom 31  

    W związku z wieloma prośbami zamieszam kod źródłowy do mojego układu.
    Proszę przy wykonaniu układu wyraźnie zaznaczyć że program jest mój!

  • #26 11 Maj 2010 11:21
    dellos
    Poziom 9  

    Projekt rewelacyjny a Pan Duch tym bardziej pomocny we wsparciu projektów :) Z ciekawości, jakie można do tego układu zastosować termometry ??

  • #27 11 Maj 2010 11:53
    utak3r
    Poziom 25  

    PWM sterujący podświetleniem idzie na tranzystor, czy może bezpośrednio? Jeśli przez tranzystor, to czy są jakieś wymagania co do niego? (typu prędkość przełączania na przykład. Prąd to wiadomo, musi znieść pobór podświetlenia).

    Ogółem bardzo przemyślana konstrukcja - pełna. W zasadzie niczego nie brakuje, a to, czego brakuje, łatwo dodać, gdyż wyprowadziłeś połączenia UARTa pod ew. przyszłe użycie.

  • #28 11 Maj 2010 12:19
    Duch__
    Poziom 31  

    dellos napisał:
    ...jakie można do tego układu zastosować termometry ??
    Jako czujniki możesz zastosować np. LM35 ale wymagany jest port z ADC na każdy czujnik, lub użyty w projekcie DS18b20 który wymaga tylko jednej linii danych niezależnie od ilości użytych czujników.
    utak3r napisał:
    PWM sterujący podświetleniem idzie na tranzystor, czy może bezpośrednio? Jeśli przez tranzystor, to czy są jakieś wymagania co do niego? (typu prędkość przełączania na przykład. Prąd to wiadomo, musi znieść pobór podświetlenia).
    Tranzystor to zwykły PNP. Ja użyłem BC327 bo taki akurat miałem pod ręką. Prąd też nie idzie zbyt duży gdyż nie wykorzystuje w pełni PWM-a. W zakresie od 0-255 ustawiłem PWM max na 250 - ot takie niewielkie zabezpieczenie przed "dużym prądem".
    utak3r napisał:
    Ogółem bardzo przemyślana konstrukcja - pełna. W zasadzie niczego nie brakuje, a to, czego brakuje, łatwo dodać, gdyż wyprowadziłeś połączenia UARTa pod ew. przyszłe użycie.
    Zgadza się. Można te wyjścia wykorzystać jako linie I/O bądź zastosować transmisję po UART do komunikacji z np. innym prockiem. Po odpowiedniej modyfikacji płytkie można wyprowadzić jeszcze parę niewykorzystanych pinów procesora w dogodne miejsce na płytce w celu ich późniejszego użycia.

  • #29 11 Maj 2010 13:00
    utak3r
    Poziom 25  

    Duch__ napisał:
    Tranzystor to zwykły PNP. Ja użyłem BC327 bo taki akurat miałem pod ręką. Prąd też nie idzie zbyt duży gdyż nie wykorzystuje w pełni PWM-a. W zakresie od 0-255 ustawiłem PWM max na 250 - ot takie niewielkie zabezpieczenie przed "dużym prądem".
    Tak się zastanawiam (bo akurat też myślę nad sterowaniem podświetleniem, tyle, że na razie mam tylko on/off) - a gdyby zamiast PWMa dać po prostu na wejście tranzystora napięcie z podzielnika z fotorezystorowego? Do tego drugi ew. tranzystor, kluczujący on/off z pinu cyfrowego... Problem jednak tutaj by wynikał zapewne z dopasowania charakterystyk, no, chyba że by pasowało takie bezpośrednie przełożenie. Prowadziłeś może takie testy? Zwykłym LEDem już tak sterowałem i faktycznie dobrze to działało - jednak nie wiem, czy osiągnięty efekt byłby zadowalający - w ujęciu poziom jasności otoczenia / poziom podświetlenia.

  • #30 11 Maj 2010 20:22
    dellos
    Poziom 9  

    Z ciekawości czy jest gdzieś wypisany spis elementów potrzebnych do wykonania płytki ?? Bo generalnie bym już chciał to wszystko kompletować po mału. A kolejne to czy można zrobić wyświetlacz na jakiejś taśmie ?? Bo musiał bym mieć inne ułożenie komponentów (troszkę inną płytkę, dłuższą ale węższą) i osobno wyświetlacz oraz jeśli są jakieś przyciski sterujące również osobno lub przy wyświetlaczu.

    Moja płytka musi być w pionie nie w poziomie...