Skocz do zawartości
woytas

Budowa czujnika zasilanego z baterii, który komunikuje się z PC

Pomocna odpowiedź

Witam,

Chciałbym zbudować układ Arduino z czujnikiem ciśnienia zasilany z baterii. Program będzie odczytywał pomiary z czujnika i zapisywał np. w tablicy. Chciałbym się dowiedzieć czy jest jakiś sposób odczytania/ściągnięcia tych danych na komputer. Co się stanie jeżeli podczas działania programu podłączę Arduino do komputera przez USB? Uda się wtedy wyświetlić te dane przez UART?

Udostępnij ten post


Link to post
Share on other sites

Najprawdopodobniej Arduino zrobi reset i dane z tablicy pójdą na drzewo. Zresztą sprawdź, bo nie jestem pewien. 

Udostępnij ten post


Link to post
Share on other sites

Witam.

Standardowo Arduino resetuje się przy uruchamianiu połączenia przez USB (COMx). Nawet restart monitora portu szeregowego wywołuje ten efekt. Wynika to z potrzeby resetu przy programowaniu. Ale można to zablokować, wystarczy do tego rezystor i kondensator. Sam tak zrobiłem w moim Eggbocie i działa niezawodnie. Tylko przy programowaniu trzeba kondensator odłączyć.

Pozdrawiam.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Ewentualnie problem ten da się chyba obejść też programowo (SoftwareSerial)? Ale w tym wypadku ingerencja w płytkę będzie na pewno wygodniejsza 🙂

Udostępnij ten post


Link to post
Share on other sites

Samo podłączenie kabla USB i enumeracja Arduino (a raczej jego części odpowiedzialnej za interfejs USB) jeszcze niczego nie psuje. Dopiero próba nawiązania połączenia z wirtualnym portem COM - czyli właśnie odpalenie monitora portu szeregowego lub innego programu terminalowego robią RESET. Takataka operacja uaktywnia linię DTR wirtualnego portu, a ta jest połączona przez kondensator z wejściem RESET procesorka M328. Dzieki temu przed programowaniem nie trzeba naciskać guzika RESET na płytce bo program avrdude wysyłający kod do Arduino robi to samodzielnie, no ale z drugoiej strony mamy to nieszczęsne zerowanie nawet gdy tego nie chcemy.

Jeśli nie chcemy dłubać w płytce, to ja rozwiązania widzę takie:

  1. Użyć najtańszego Arduino w wersji NANO PRO - tam nie ma USB a interfejs do programowania to zwykłe, żywcem wyciągnięte linie UARTa. Można to podłączać do PC przez małą płyteczkę konwertera UART/USB albo mając prawdziwy port COM w kompie - przez konwerter RS232/TTL. Zwykle dla wygody używamy "pełnej" obsady czyli TXD, RXD i właśnie DTR do automatycznego RESETu, ale jeśli tego kabelka nie pociągniemy to mamy zwyczajną transmisję danych po TXD/RXD bez żadnego przerywania pracy procesora.
  2. Przechowywać dane w EEPROMie. Jeśli wyniki pomiarów gromadzone są powoli, to milion zapisów do komórek tej pamięci wystarczy na baaardzo długo. A ponieważ EEPROm przeżywa wyłączenia zasilania i RESETy procesora, po restarcie trzeba sprawdzić gdzie jest początek i koniec zapisu i przesłać wszystko do PC. Pamięć jest wtedy buforem kołowym a najnowsze rekordy nadpisują te najstarsze. Wystarczy tylko jakiś sprytny spsób oznaczania np. czasu lub numeru rekordu by zawsze jednoznacznie można było stwierdzić gdzie są dane.
  3. Przechowywać dane z pomiarów na stercie. Program w C, zanim dojdzie do arduinowego setup() nie zeruje/inicjalizuje przecież całego RAMu a jedynie obszar zadeklarowanych zmiennych statycznych. Cały pozostały RAM (sterta i stos) zawierają to co poprzednio. Po włączeniu zasilania to są śmiecie, ale RESET procesora bez zaniku zasilania przecież tej zawartości nie zmienia. Przy odrobinie wysiłku i zastosowaniu podobnych mechanizmów co powyżej można zbudować algorytm sprawdzania i weryfikacji zawartości sterty a odzyskane z niej dane wysłać do PC.
  4. Do jakiegokolwiek Arduino dospawać tani moduł zewnętrznej, szeregowej pamięci EEPROM, FLASH albo RAM i tam trzymać dane. To może być także trochę droższy moduł zegarka z własną baterią - zwykle takie scalaki mają trochę RAMu na pokładzie, gdzie wyniki pomiarów byłyby bezpieczne a dodatkowo mamy jeszcze prawdziwy czas. Po restarcie procesora wystarczy odpalić procedurę przeszukania takiej pamięci i znalezienia początku i końca danych.

https://botland.com.pl/pl/moduly-rtc/12507-rtc-ds1307-32kb-eeprom-24c32-i2c-zegar-czasu-rzeczywistego-z-pamiecia.html

https://abc-rc.pl/product-pol-9564-Interfejs-pamieci-AT24C256-24C256-EEPROM-na-I2C-Arduino.html

https://abc-rc.pl/product-pol-9792-Modul-pamieci-W25Q64-FLASH-na-SPI-64Mbit.html

 

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
Dnia 20.12.2019 o 10:48, marek1707 napisał:

Użyć najtańszego Arduino w wersji NANO PRO

W kwestii formalnej: Pro Mini (takie coś jak NANO PRO) nie istnieje. Tylko uwaga - niektóre konwertery mają wyprowadzoną linię DTR, trzeba go łączyć czterema pinami a nie pięcioma!

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Jasne, nie wiem skąd to NANO PRO wytrzasnąłem. Oczywiście chodziło mi o MINI PRO, do kupienia za kilkanaście zł na aukcji.

Do transmisji zaproponowałem tylko parę TXD/RXD plus GND i to chyba wystarczy. Konwerter jest zasilany z USB a czujnik ma własne zasilanie, więc do czego ta czwarta linia? Acha, chyba że musimy z Arduino zasilić konwerter RS232/TTL (czy ktoś tego jeszcze używa?), bo te faktycznie nie mają skąd brać mocy i potrzebują naszego Vcc.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
24 minuty temu, marek1707 napisał:

do czego ta czwarta linia?

Do niczego - po prostu przyzwyczaiłem się do podpinania Vcc (albo Arduino zasilane z programatora, albo mój Smardz zasilany z Arduino). Oczywiście wystarczą trzy.

W sumie chodziło mi o to, aby nie podpinać linii DTR.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Dzięki za wszystkie odpowiedzi, chyba skorzystam z pamięci zewnętrznej

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...