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

Rejestrator temperatury z obsług± kart SD

Sh44dow 01 Lut 2010 18:47 28652 40
  • Rejestrator temperatury z obsług± kart SD
    Witam.
    Chciałbym przedstawić moj± now± konstrukcję - rejestrator temperatury z obsług± kart Secure Digital (SD).
    Projekt powstał oczywi¶cie w celach naukowych. Podstaw± układu jest moja płytka testowa z mikrokontrolerem ATMega32. Doł±czyłem do niej termometr cyfrowy DS18B20, zegar RTC DS1307 oraz adapter wpinany w gniazdo ISP (Kanda; zamiast LED jest podł±czony PB4 - slave select), który wykonałem metod± termotransferu. Przystawka posiada stabilizator napięcia 3,3V (LF33CV), dzielniki napięcia z rezystorów oraz oczywi¶cie gniazdo SD/MMC. Schemat wzi±łem [st±d] , a projekt w eagle jest dostępny w paczce z programem.

    Rejestrator temperatury z obsług± kart SD

    Program napisałem w C (¶rodowisko AVR Studio 4) z wykorzystaniem biblioteki FAT32 z bloga CC Dharmani, dzięki czemu mogę w prosty sposób kopiować dane z rejestratora na PC. Do przegl±dania logów napisałem w Delphi (7) prost± aplikację generuj±c± wykresy z plików tekstowych. Zarówno program dla mikrokontrolera jak i przegl±darka logów s± napisane na szybko (tak, wiem, że mogłoby być bardziej optymalnie :) ), ale poprawkami zajmę się po sesji. Mikrokontroler komunikuje się z komputerem poprzez interfejs szeregowy RS232. Aby ustawić datę\godzinę lub przetestować termometr\kartę pamięci trzeba wej¶ć w tryb ustawień zakładaj±c zworkę, czego aktualnie brakuje w kodzie - jak dot±d wchodziłem w tryb ustawień wgrywaj±c program skompilowany z linijk± "ust=1;" w odpowiednim miejscu :). W normalnym trybie pracy układ zapisuje temperaturę co 5 minut oraz dodatkowo wysyła wynik po RS232. Układ pracuje już drug± dobę bez zarzutów.

    Skompilowane programy oraz Ľródła dostępne poniżej.
    Domy¶lne ustawienia to UART na 19200 bodów (8;1;N) i 1Wire na PD6.

    A o to wynik - log z dnia wczorajszego:
    Rejestrator temperatury z obsług± kart SD

    Wszelkie komentarze (zarówno pozytywne jak i negatywne) mile widziane!

    EDIT: 2010-02-01 22:23

    Koszta:

    Dużo z tych elementów już miałem, tak jak większo¶ć majsterkowiczów :).
    - ATMega32 - 12zł
    - DS1307, DS18B20 - (4+4)zł
    - Płytka uniwersalna - 7zł
    - LF33CV - 2,5zł
    - Gniazdo SD/MMC - 5zł (drogie, prawda?)
    Razem około 35zł + drobne elementy, jak kwarc 8MHz \ 32KHz, oporniki, kondensatory, kawałek laminatu.

    Zdjęcia
    Rejestrator temperatury z obsług± kart SD Rejestrator temperatury z obsług± kart SD Rejestrator temperatury z obsług± kart SD
    Płytka z ATMeg± z\bez przystawki z kart± (nie wkładałem MAX232, ponieważ używam przej¶ciówki USB <-> RS232 TTL na PL2303); na 3cim zdjęciu po lewej wyprowadzenie 1Wire i I2C, DS1307 z kwarcem oraz EEPROM 24C64, którego nie używam w tym projekcie.

    Rejestrator temperatury z obsług± kart SD Rejestrator temperatury z obsług± kart SD
    Przystawka SD - ISP kanda ze stabilizatorem 3,3V
    Tak, to prawda - nie umiem zbyt dobrze lutować :).

    EDIT: 2010-02-15 00:29
    Aktualne pomiary dostępne tutaj (na dole strony):
    http://silent.it.cx/home/2010/02/14/rejestrator-temperatury-z-obsluga-kart-sd/

    EDIT: 2010-03-06 00:54
    Wyniki online:
    http://silent.it.cx/home/2010/03/06/wyniki-pomiarow-online/
    ( http://silent.it.cx/templogger/ )

    Fajne! Ranking DIY
    Darmowe szkolenie: Ethernet w przemy¶le dzi¶ i jutro. Zarejestruj się za darmo.
    O autorze
    Sh44dow
    Poziom 16  
    Offline 
    Sh44dow napisał 235 postów o ocenie 957, pomógł 3 razy. Mieszka w mie¶cie Wieliczka. Jest z nami od 2007 roku.
  • SterControlSterControl
  • #2
    Tasioror
    Poziom 11  
    Według mnie nie chodzi o zdjęcia a o pomysł który zreszt± bardzo mi się podoba zdecydowany plus ocen± szczegółow± zajmę się po dodaniu więcej zdjęć z projektu jak na razie odbieram pozytywnie. Czekam na

    - zdjęcia:)
    - jakie koszty

    Pozdrawiam
  • #3
    MADevil
    Poziom 18  
    Modyfikowałe¶ jako¶ bibliotekę czy tylko wstawiłe¶ odczyt temperatury zamiast nasłuchiwania z UARTu?
  • SterControlSterControl
  • #4
    jaculas
    Poziom 14  
    Napisz jeszcze jak wygl±da rejestrowanie temperatury czy odbywa się co jaki¶ ustalony czas czy w momencie zmiany temperatury?
    Co do wypowiedzi Gibola to nie każdy ma aparat, którym wychodz± dobre zdjęcia, ważna jest konstrukcja, wiec nie czepiaj się szczegółów .

    Pozdrawiam
  • #5
    Urgon
    Poziom 36  
    Co do konstrukcji, to mam takie pytanie: ile miejsca zajmuje skompilowany program w mikrokontrolerze?

    Sama konstrukcja mi się podoba. Użycie karty SD pozwoli na zrobienie setek milionów pomiarów. Może spróbuj ustawić pomiar co sekundę? Ciekawe, jak wtedy będzie wygl±dał wykres...
  • #6
    Szucio
    Poziom 14  
    Pewnie nie będzie wygl±dał nic lepiej.

    IHMO za duża dokładno¶ć jest ustawiona.

    Nie wgłębiałem się w Ľródła, ale skoro 2,5*C zajmuj± 50px, to 1px-0,05*C. Termometr DS18B20 nie jest chyba aż taki dokładny i często wskazania wahaj± się pomiędzy jedn±, a drug± warto¶ci±.

    Zapis co 5 minut to chyba optymalne rozwi±zanie.

    A projekt bardzo ciekawy.
  • #7
    Sh44dow
    Poziom 16  
    Dodałem zdjęcia i kosztorys.

    MADevil napisał:
    Modyfikowałe¶ jako¶ bibliotekę czy tylko wstawiłe¶ odczyt temperatury zamiast nasłuchiwania z UARTu?

    Chodzi Ci o FAT32.c?
    Zmodyfikowałem trochę funkcję zapisuj±c± plik (WriteFile2()) tak by nie pobierała danych z UARTu tylko ze stringa z aktualnym odczytem. FAT32.c korzysta często z funkcji w uart_routines.c - nie chciało mi sie tego zmieniać i zostawiłem to tak, jak napisał autor tej biblioteki. W zasadzie można wywalić większo¶ć funkcji, które nie sa używane, co zmniejszy rozmiar programu.

    jaculas napisał:
    Napisz jeszcze jak wygl±da rejestrowanie temperatury czy odbywa się co jaki¶ ustalony czas czy w momencie zmiany temperatury?

    Zapis co 5 minut bez względu na stan poprzedniego odczytu.
    Częstszy zapis mógłby się przydać np. do monitorowania temperatury jakiego¶ innego urzadzenia (urz±dzeń). Ja wystawiłem termometr za okno, gdzie temperatura nie zmienia się tak szybko, więc odstęp 5-minutowy jest w sam raz.


    Urgon napisał:
    Sama konstrukcja mi się podoba. Użycie karty SD pozwoli na zrobienie setek milionów pomiarów.

    A do tego program można łatwo zmodyfikować i wykorzystać do zapisu pomiarów z innych urz±dzeń - być moze komu¶ się kiedy¶ przyda.


    Urgon napisał:
    ile miejsca zajmuje skompilowany program w mikrokontrolerze?

    z cał± bibliotek± FAT32 około 20kB
  • #8
    MADevil
    Poziom 18  
    Sh44dow napisał:

    Urgon napisał:
    ile miejsca zajmuje skompilowany program w mikrokontrolerze?

    z cał± bibliotek± FAT32 około 20kB


    Co¶ tłustawy. Mi ta biblioteka + kolorowy lcd + tablice znaków + napisy + kilkupoziomowe menu + ADC i parę innych zajmowało nieco ponad 20kB
  • #9
    pabllosee
    Poziom 15  
    Jeżeli konstrukcja jest wył±cznie do celów własnej edukacji to wszystko OK. Jeżeli miałoby to ewaluować do zastosowań przemysłowych, to kierunek zupełnie zły. Rejestrator powinien mieć szczeln± obudowę, a co za tym idzie stosowanie karty SD jest złym pomysłem. Przy szczytywaniu danych rozkręcać obudowę i wyjmować kartę?
  • #10
    Urgon
    Poziom 36  
    AVE...

    Mogłe¶ poszukać mniejszej biblioteki FAT16.
    Inn± metod± byłoby zapisywanie danych z pomoc± SPI do kolejnych komórek pamięci karty bez używania FAT16/32. Wad± tego rozwi±zania byłaby potrzeba używania programu lub/i interfejsu do zrzucania danych z karty. Za to oszczędziłby¶ bardzo dużo miejsca...

    Gdyby nie ograniczony zakres pomiaru temperatury DS18B20, to układ ten doskonale by się nadawał do monitorowania jakich¶ procesów chemicznych, np. destylacji. Na szczę¶cie istnieje firma Maxim, która produkuje układy do współpracy z termoparami, które pozwalaj± na pomiar temperatury w zakresie 0-1000 stopni. Używaj± one jednak SPI.
  • #11
    Duch__
    Poziom 31  
    Urgon napisał:
    Może spróbuj ustawić pomiar co sekundę? Ciekawe, jak wtedy będzie wygl±dał wykres...


    Nie polecam robienia zapisów na kartę tak często!
    Bierzcie pod uwagę cykle zapisu! Każdy no¶nik ma ograniczon± ilo¶ć zapisów. Raz kiedy¶ zrobiłem test na starej karcie SD 128MB i napisałem programik żeby dana liczbowa (dowolna) była zapisywana co 10ms na karcie czyli 100 razy w ci±gu sekundy. Efekt był taki że po 15 min zabawy karta odmówiła posłuszeństwa. Tak więc lepiej zapisywać paczki z danymi raz na np, 30min niż "duperele" co chwile.
  • #13
    Szymon Tarnowski
    Poziom 27  
    pabllosee napisał:
    Jeżeli miałoby to ewaluować do zastosowań przemysłowych, to kierunek zupełnie zły. Rejestrator powinien mieć szczeln± obudowę, a co za tym idzie stosowanie karty SD jest złym pomysłem.
    To nie jest wielki problem, karta może być zamknięta w obudowie, wystarczy dorobić jaki¶ interfejs, np IRDA albo jeszcze lepiej co¶ podobnego do Bluetooth. W ostateczno¶ci można dodać jaki¶ interfejs "stykowy" w postaci gniazdka hermetycznego.
  • #14
    cranky
    Poziom 26  
    Pabllosee
    Z t± uwag± proponuję zwrócić sie do SIEMENSA - w swoich sterownikach przemysłowych korzystaj± z kart SD. Ale co twórca Simatic'a wie o elektronice w przemy¶le? :)))
  • #15
    sambo123
    Poziom 13  
    cranky
    Program ładuje się z karty SD a dane s± przechowywane już na innych pamięciach ;)
  • #16
    MADevil
    Poziom 18  
    Na kartę SD nie zapiszecie bajt po bajcie. Najmniejszy obszar do zapisu - to blok (512B). Chyba, że kto¶ jest strasznym osiołkiem i będzie zapisywał 512 razy ten blok, za każdym razem dodajac jeden bajt. Ale to nawet napisać jest trudniej ;)

    Algorytm w zastosowanej przez kolegę Sh44dow "bibliotece" polega na gromadzeniu danych w buforze i zapisywaniu go dopiero jak będzie miał wielko¶ć pełnego bloku.

    Teraz pozostaj± do wykonania proste obliczenia, żeby uzyskać rzeczywist± częstotliwo¶ć zapisu na SD.
  • #17
    Urgon
    Poziom 36  
    AVE...

    Masz rację co do zapisu blokami. Ale zapis ten da się przeprowadzić bez konieczno¶ci implementacji obsługi systemu FAT13/FAT32. Z biblioteki można wyci±gn±ć sam mechanizm buforowania i zapisu/odczytu. Dzięki temu dałoby się kilkakrotnie zmniejszyć sam± bibliotekę... Można też wywalić wszystko poza dopisywaniem do jednego pliku o z góry narzuconej nazwie blokami...

    Tak czy siak ten układ aż się prosi o więcej czujników...
  • #18
    MADevil
    Poziom 18  
    Można pisać na karcie nie korzystaj±c z FATa, ale wtedy wg. mnie eliminuje się jej największ± zaletę - łatwo¶ć wymiany danych z PC.

    Co do samej biblioteki. powtarzam, nie zajmuje ona tak dużo. Skompilowana standardowo zajmuje nicałe 10k, przy czym nie jest to biblioteka goła, a cały program. Realizuje on zapis, odczyt, kaswoanie, sprawdzanie pojemnosci itp, obsługa przez terminal RS232. Kodu jest wiec więcej.

    Dlatego też dziwię sie, że cało¶ć tego projektu zajmuje ok. 20k, bo kiedy pisałem 1-wire (4 czujniki + dużo tekstu na UART, żeby było edukacyjnie + inne badziewia do obsługi) na 8051 w C, to zajmowało to nie więcej niż 8k.
  • #19
    SQ2HCE
    Poziom 12  
    Pozdrawiam.

    Ładny i ciekawy projekt. Tylko te zdjęcia ... (ale to nie jest najważniejsze). Wydaje mi się że koledzy trochę odbiegacie od tematu. Mianowicie, program ma co zadany czas dokonać pomiaru i zapisać to na karcie SD, a po jakim¶ czasie przelać to do PC-ta. Robi to ? Robi, jak wynika z opisu. Czyli że spełnia swoje zadanie. A czy zajmuje 20 kB czy 10 kB to jest to zupełnie inna sprawa. Jeżeli to będzie profesjonalny produkt to co innego procesor Atmega 32 kosztuje ok 12 zł , a Atmega 16 ok. 10 zł to przy masowej produkcji s± wymierne koszty. Program ma za to potencjalne możliwo¶ci rozbudowy. Już od jakiego¶ czasu my¶lałem o podobnej konstrukcji do pomiaru temperatury i rejestracji pozycji z GPS z zapisem na karcie SD, wydaje mi się że projekt ten jest jak najbardziej obiecuj±cy.
    Projekt jest jak najbardziej ciekawy i nadaj±cy się do własnej rozbudowy i modyfikacji.
    Powodzenia !
  • #20
    MADevil
    Poziom 18  
    SQ2HCE napisał:
    Pozdrawiam.

    Ładny i ciekawy projekt. Tylko te zdjęcia ... (ale to nie jest najważniejsze). Wydaje mi się że koledzy trochę odbiegacie od tematu. Mianowicie, program ma co zadany czas dokonać pomiaru i zapisać to na karcie SD, a po jakim¶ czasie przelać to do PC-ta. Robi to ? Robi, jak wynika z opisu. Czyli że spełnia swoje zadanie. A czy zajmuje 20 kB czy 10 kB to jest to zupełnie inna sprawa. Jeżeli to będzie profesjonalny produkt to co innego procesor Atmega 32 kosztuje ok 12 zł , a Atmega 16 ok. 10 zł to przy masowej produkcji s± wymierne koszty. Program ma za to potencjalne możliwo¶ci rozbudowy. Już od jakiego¶ czasu my¶lałem o podobnej konstrukcji do pomiaru temperatury i rejestracji pozycji z GPS z zapisem na karcie SD, wydaje mi się że projekt ten jest jak najbardziej obiecuj±cy.
    Projekt jest jak najbardziej ciekawy i nadaj±cy się do własnej rozbudowy i modyfikacji.
    Powodzenia !



    Po mojemu 100% złego rozumowania.
    Je¶li kod jest duży, to z reguły nie znaczy, że jest go dużo i tyle. Znaczy to ,ze co¶ się tam dzieje, co¶ się robi niepotrzebnie, co¶ marnuje czas. Oznacza to brak wydatno¶ci, do gruby kod = wolny kod.
    Zupełnie jakby¶ napisał: "To co, że w tym projekcie migajacej diody dałe¶ TRAFO 2kVA, działa"
    Tu się nie dyskutuje o tym, że robić jest dobrze, tylko o tym, że można robić lepiej i po to s± te pytania, żeby póĽniej były rady i nauka.
  • #21
    coyot
    Poziom 17  
    Ja pokusiłbym się o możliwo¶ć generowania gotowych plików bmp czy pcx struktura takiego pliku w wersji 256 kolorów jest niemal trywialna, przynajmniej tak mi się wydaje, dawno to robiłem.
    Nie wiem jak z zastosowaniem praktycznym mojej sugestii, ale zabawa przednia.
    Id±c o krok dalej można by drukować wyniki na drukarce, mam tu na my¶li jakiego¶ igłowego epsona czy oki (też ma emulację epsona) igłowego bo prosty do implementacji (chodzi o sam język opisu strony) gdzie¶ widziałem manuala od tego, niektóre póĽniejsze atramentówki i lasery miały emulację takich języków. Nie pamiętam jak jest z postscriptem, to byłaby już bajka :D.
    Można by mieć kartę SD jako magazyn danych z którego "maszyna" potrafi wydrukować dowoln± paczkę informacji, ale z drugiej strony np. dane z karty można zaimportować do excela i wszystko gotowe. Ufff rozpisałem się....

    Pozdrawiam
  • #22
    Przemek Elektro
    Poziom 16  
    MADevil napisał:
    Można pisać na karcie nie korzystaj±c z FATa, ale wtedy wg. mnie eliminuje się jej największ± zaletę - łatwo¶ć wymiany danych z PC.


    Jest taki program DD Link
    Jest wersja na Windowsa i na Linuxa.
    Umożliwia on sczytanie danych z karty nie posiadaj±cej żadnego systemu plików. W programie podaje się liczbę sektorów do sczytania, dane można wy¶wietlić na ekranie, lub automatycznie zapisać do pliku. Tworz±c plik wsadowy *.bat uzyskujemy bardzo wygodny sposób na sczytywanie danych z karty SD. W tym rozwi±zaniu sprawa ma się trochę gorzej, jeżeli by¶my chcieli utworzyć na karcie kilka plików podczas zapisu (np oddzielny plik na każdy dzień), ale to też da się rozwi±zać (np 1 dzień = 10 sektorów).
    Oczywi¶cie wykorzystanie zależy od danego urz±dzenia i od tego, czy najbardziej zależy nam na oszczędzeniu mocy obliczeniowej procesora (i pamięci RAM) czy priorytetem jest łatwo¶ć odczytu plików.
    Przynajmniej warto wiedzieć, że takie rozwi±zanie też istnieje.
  • #24
    MADevil
    Poziom 18  
    :arrow: Przemek Elektro

    W sumie nie pomy¶lałem, że może co¶ takiego być, albo można to napisać. W pewnych projektach do rozważenia użycie takiego rozwi±zania. Dzięki za link, zapisałem ;)
  • #25
    Maticool
    Poziom 20  
    Witam. Zauważyłem, że bardzo "poszarpane" s± te wykresy - czy użyłe¶ jakie¶ procedury u¶redniaj±cej kilka pomiarów czy po prostu zapisujesz jeden pomiar co 5 min?
  • #27
    dexter1
    Poziom 14  
    Ładny projekcik, uniwersalki u mnie również często s± w obrocie :) I faktycznie zmień częstotliwo¶ci pomiarów i my¶lę że możesz zapisywać 2 scieżki. U¶redniona warto¶ć i po prostu taka jaka jest.
  • #28
    marek62
    Poziom 2  
    Czy dobrze poł±czyłem porty bo nic mi nie zapisuje na karcie SD?
    1. Z czytnika kart wg oznaczeń zł±cza Kanda:
    SCK na PB7, MISO na PB6, MOSI na PB5, LED(SS) na PB4, GND na GND, VCC na +5V
    2. Zegar SD1307
    SDA na PC1, SCL na PC0 ?
    3. Czujnik temperatury DS18B20 (¶rodkowa nózka) na PD6,
    4. Klawiatura - brak
    5. Wy¶wietlacz LCD - brak
    6. Dioda przez opornik 1k na PD5 ? Do czego ona służy?
    No i nie wiem tez jak ustawić aktualn± datę i godzinę?
    A tak ogólnie ¶wietny projekt 5/5, no może przydałby się schemat całego urz±dzenia.
  • #29
    Sh44dow
    Poziom 16  
    Nie zapisuje prawdopodobnie dlatego, że wła¶nie zegar nie jest ustawiony.
    Je¶li nie używasz baterii podtrzymuj±cej, to poł±cz VBat DS1307 z mas±. Dioda może być użyta do sygnalizacji zapisu na kartę, tylko trzeba dopisać kilka linijek w programie. Można j± też pomin±ć.

    DAtę\godinę ustawia się przez rs232. Podł±czałe¶ ukł±d do PC?
    Najpro¶ciej jest zmienić w kodzie fragment:
    Code:
    /*
    
              je¶li zworka konfiguracji jest założona,
               to:
                 ust=1;
             */

    na:
    Code:
    ust=1;

    Wtedy można ustawiac godzinę z terminala (oraz przeprowadzić test termometru\zegara\karty), a póĽniej wgrać program bez tej linijki.


    Układ działa już 2 tygodnie bez problemów. Aktualne pomiary zamieszczam na mojej nowej stronie:
    http://silent.it.cx/home/2010/02/14/rejestrator-temperatury-z-obsluga-kart-sd/
    Na dole jest odno¶nik do najnowszych danych.
  • #30
    marek62
    Poziom 2  
    Z PC-tem układu nie ł±czyłem. Podtrzymanie bateryjne posiadam na płycie testowej.
    Wieczorem spróbuje zmienić kod, skompilować program i podł±czyć do PC. Nie wiem tylko czy nie potrzeba jakiego¶ programu do ustawienia tej daty i godziny? Co będę widział na epranie PC po podł±czeniu układu? Póżniej po ustawieniu trzeba wgrać ponownie program przed zmianami kodu i powinno być dobrze?

    Szukaj±c po necie znalazłem podobny program (Ľródło + hex) na forum strony and-tech.pl temat płytki startowej EvB4.x czyli http://www.and-tech.pl/forum/viewtopic.php?t=90 Program ma zapisywać temperaturę co 15min na kartę SD. Układ posiada wy¶wietlacz i klawiaturę ma też 3 przyciskach. Chodzi co prawda na innym układzie zegara, ale można z klawiatury ustawiać godziny, minuty, dzień, miesi±c i to wszystko wy¶wietla na LCD 2x16 plus dwie temperatury T1 i T2. Program wgrałem uruchomiłem - chodzi ładnie ale na karcie mam cały czas pusty zbiór z danymi temper.txt. Próbowałem już na kilku różnych kartach SD. Zbiór układ tworzy nawet sam na karcie po wci¶nięciu jednego przycisku ale zawarto¶ci brak.

    Może na podstawie tego programu można dorobić LCD i klawiaurkę do ustawień?
    Jeszcze pytanie do autora układu SD: czy opornik 600R na PB6 jest w działaj±cym układzie bo na schemacie ogólnym go nie widzę a na wzorze płytki jest?
    Może poszukam karty MMC i wtedy może będzie chodziło?