Kurs Arduino – Arduino Pro Mini
W poprzednim odcinku (UR013) poznaliśmy interesujący moduł rejestratora OpenLog, mający postać maleńkiej płytki o wymiarach niecałe 2cm na 1,5cm. Tymczasem nasza „edukacyjna” płytka Arduino Uno jest wielokrotnie większa. Aż prosi się, żeby zastąpić ją czymś mniejszym…
W rodzinie Arduino znajdziemy szereg mniejszych płytek. Wersją bardzo podobną do UNO, i co ważne – bardzo tanią jest Arduino Nano – fotografia 1.
Też zawiera procesor ATmega328P, a zamiast drugiego procesora (ATmega16U2) pośredniczącego w komunikacji z linią USB, ma zamontowany układ FTDI albo tańszy CH340. Równie małą, ale droższą wersją z nowocześniejszym procesorem ATmega32U4, który ma wbudowany sprzętowy port USB, jest płytka Arduino Micro (fotografia 2) – jest to miniaturowa wersja Arduino Leonardo.
Dostępne są też nieco mniejsze płytki z tym procesorem ATmega32U4: Arduino Pro Micro – fotografia 3.
Wszystkie mają gniazdo USB, albo USB mini, albo USB micro i ich wykorzystanie jest w sumie takie, jak płytki Arduino Uno, trzeba tylko w programie ArduinoIDE (Narzędzia/Płytka) dokonać stosownego wyboru.
My przygodę z mniejszymi płytkami rodziny Arduino zaczniemy od płytki Arduino Pro Mini (fotografia 4).
Nie jest to najnowsze rozwiązanie, ale do naszych celów niemal idealne. Płytka zawiera procesor ATmega328P, podobnie jak Arduino Nano. Jednak w przeciwieństwie do wcześniej omawianych Arduino Pro Mini nie ma złącza USB i należy ją programować za pomocą jakiegoś zewnętrznego programatora. Z jednej strony jest to wadą, ale jednocześnie istotną zaletą, bo cena jest niższa i mniejszy jest pobór prądu, bo nie ma układów pośredniczących z USB.
Warto wiedzieć, że w roli potrzebnego zewnętrznego programatora może wystąpić… płytka Arduino UNO. Jeśli chcesz wykorzystać taką metodę – znajdziesz szczegóły w Internecie. Znacznie wygodniejszym sposobem jest wykorzystanie nie tyle programatora, co mostka, konwertera USB – RS232 TTL. Takich konwerterów na rynku jest mnóstwo. W internecie najwięcej dostępnych jest opisów konwerterów z układami scalonymi znanej firmy FTDI. Aktualnie bardzo tanie i popularne są też konwertery z układem scalonym SiLabs CP2102. Dwa przykłady masz na fotografii 5.
Komputer PC wykrywa dołączony konwerter USB/TTL, ale trzeba też jednorazowo zainstalować sterownik, pobrany ze strony producenta kostki (rysunek 6):
www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
w skrócie: https://bit.ly/2v0gwnS.
Należy również wiedzieć, że z tymi płytkami Arduino i konwerterami USB – TTL jest pewien kłopot. Wynika on z faktu, że na rynku dostępne są różne wersje Arduino Mini Pro: ze znanym nam procesorem ATmega328P oraz z procesorem ATmega168 z o połowę mniejszą pamięcią programu (16kB zamiast 32kB). Po drugie istnieją wersje Arduino Mini Pro ze stabilizatorem 5V z taktowaniem 16MHz oraz wersje ze stabilizatorem 3,3V, które z uwagi na niższe napięcie zasilania nie są tak szybkie i są taktowane zegarem 8MHz. Mamy więc cztery podstawowe odmiany płytki Mini Pro, co trzeba uwzględnić przy programowaniu. Na pewno trzeba w ArduinoIDE wybrać płytkę Arduino Pro or Pro Mini i do tego jedną z czterech wersji. Trzeba też wybrać port – rysunek 7.
Płytkę trzeba zasilić odpowiednim napięciem: 3,3V albo 5V. W różnych konwerterach może to być różnie realizowane (zworka lub dwa piny).
Rysunek 8 pokazuje schemat „oficjalnej”, aktualnie najnowszej wersji Arduino Pro Mini (Rev. 14).
Oprócz procesora (U1 – ATmega328P) mamy jeszcze tylko stabilizator LDO (U2 – MIC5205 lub podobny). Zasadniczo płytka ma być zasilana napięciem podawanym na pin RAW (które teoretycznie może wynosić nawet kilkanaście woltów). Natomiast punkty oznaczone VCC to „napięcie za stabilizatorem”: albo 3,3V, albo 5V. Oprócz kontrolki zasilania LED1 mamy drugą diodę LED, dołączoną do nóżki 17 procesora (PB5 = SCK), czyli pinu 13 Arduino, podobnie jak w Arduino Uno. Piny oznaczone na schemacie MOSI, MISO, SCK (łącze SPI) to cyfrowe piny 11, 12, 13 Arduino i tak właśnie oznaczone są na płytce. Mamy tu nie sześć, tylko aż osiem wejść analogowych (także wejścia A6, A7, których nie ma w Arduino Uno. Nie ma tu złącza USB, ale nie jest to „goły” procesor (który wymagałby programatora, np. USBasp). W procesorze wgrany jest bootloader i programowanie Arduino Pro Mini odbywa się przez łącze szeregowe, czyli piny RXI, TXO. Do programowania służy grupa pinów, które na rysunku 8 są oznaczone JP1 FTDI Basic i wyróżnione żółtą podkładką, a na fotografii 4 wskazane czerwoną strzałką. Oprócz kluczowych RXI, TXO, mamy tu też masę (GND – dwa piny) i zasilanie (VCC). Podczas programowania wykorzystywane jest też wejście resetujące oznaczone DTR, które reaguje na zbocze impulsu dzięki obecności kondensatora C2 (ale oprócz tego mamy „zwykłe, stałoprądowe” wejście resetujące RESET i przycisk S1).
Rysunek 8 pokazuje oficjalną, „kanoniczną” wersję schematu Arduino Pro Mini. Jednak na rynku jest mnóstwo klonów o nieco innym schemacie i wyglądzie, co w sumie wcale nie jest wadą, tylko zaletą (fotografia 4 też przedstawia klon). W wielu płytkach rozkład pinów i funkcje są takie same, a drobne różnice dotyczą schematu.
Fotografia 9 pokazuje różne wykonania płytek Arduino Pro Mini. Oprócz płytek o „kanonicznych” rozmiarach 18 x 33mm dostępne są też płytki kwadratowe 40 x 40mm, które do testów mogą się okazać bardzo atrakcyjne właśnie z uwagi na większą liczbą otworów masy i zasilania (do wlutowania dołączonych goldpinów).
I tak zwykle na płytce nie ma rezystorów R1, R3, podciągających linie łącza I2, czyli nóżki 27, 28 procesora, wyprowadzone na (niezaznaczone na rysunku 8, ale obecne na płytce) piny analogowe A4, A5. Na większości płytek niestety nie ma też bardzo pożytecznego jumpera-złączki SJ1, który pozwala odłączyć stabilizator i kontrolkę zasilania, a przez to zredukować pobór prądu, co jest istotne np. przy zasilaniu z akumulatorka Li-Ion 3,7V. Dlatego aby zmniejszyć pobór prądu, zwykle trzeba raczej wylutować elementy, bo przecięcie ścieżki (ścieżek) okazuje się trudniejsze. Większość współczesnych płytek ma natomiast włączony szeregowo na wejściu zasilania RAW bezpiecznik polimerowy i diodę Schottky’ego, co znacznie zmniejsza ryzyko uszkodzenia w wypadku błędu.
Proces tworzenia szkicu i programowania jest bardzo podobny, jak w przypadku Arduino Uno: moduł Arduino Mini Pro dołączony jest wtedy do komputera PC za pośrednictwem konwertera USB/TTL i jest zasilany z komputera przez ten konwerter.
Podczas programowania konwerter powinien być podłączony do Arduino Pro Mini za pomocą pięciu linii według rysunku 10.
Dwie to masa i zasilanie (3,3V, albo 5V). Transmisja danych realizowana jest przez łącze szeregowe. W konwerterze (fotografia 5) mamy wyjście danych TXD oraz wejście RXD. Natomiast w płytce Arduino mamy wyjście TXO oraz wejście RXI. Zgodnie z zasadą pracy łącza szeregowego musimy wyjścia połączyć w wejściami, czyli zrealizować połączenia TXD–RXI oraz TXO– RXD. Pin oznaczony na płytce Arduino skrótami DTR (i często też GRN – od green) automatyzuje proces programowania. Na płytce Arduino Pro Mini mamy dwa sąsiednie piny „złącza programującego” dołączone do masy. Jeden z nich na pewno oznaczony jest GND, ale drugi może być oznaczony inaczej (BLK, CTS), ale to nie jest dla nas istotne.
Możliwe jest też programowanie za pomocą czterech linii, bez DTR, ale wtedy tuż przed wysłaniem danych z komputera do Arduino trzeba na płytce nacisnąć przycisk RESET. Informacja ta jest o tyle istotna, że niektóre konwertery USB-TTL nie mają wyprowadzonej linii DTR – na fotografii 5 jest to pięciopinowy model na czerwonej płytce. Przy użyciu takiego pięciopinowego konwertera pod koniec kompilacji, tuż przed przesyłaniem danych, konieczne jest ręczne zresetowanie Arduino (zaraz po resecie bootloader Arduino traktuje dane przychodzące łączem szeregowym jako program do zapisania w pamięci nieulotnej procesora). W konwerterach sześciopinowych linia DTR realizuje reset automatycznie.
W Internecie można znaleźć liczne informacje o programowaniu i wykorzystaniu Arduino Pro Mini. Zwykle proponuje się tam wlutowanie w płytkę Arduino gniazda lub goldpinów, co ułatwi dołączenie do konwertera. Generalnie konwertery USB/TTL mają podobny rozstaw pinów, jak płytka Arduino Mini Pro, ale w niektórych przypadkach trzeba krzyżować przewody, wiec bezpośrednie wetknięcie konwerter-Arduino może nie być możliwe. Poza tym gniazdo zwiększa rozmiary płytki.
Aby nie zawężać możliwości, możemy dołączać Arduino do konwertera za pomocą miniaturowych chwytaków. Fotografia 11 pokazuje sześciopinowy konwerter dołączony do Arduino w ten właśnie sposób (przydatny będzie też kabel przedłużający USB-USB).
Jeżeli mamy wszystko przygotowane do wykorzystania modułu Arduino Pro Mini, możemy podłączyć programator do komputera, przez co zasilimy płytkę. Zaświecą się kontrolki zasilania i… najprawdopodobniej na płytce Arduino zacznie też migać druga dioda LED, dołączona do pinu 13, ponieważ w pamięci procesora zazwyczaj wgrany jest nie tylko bootloader, ale też znany nam już prościutki program Blink.ino. Aby upewnić się, że wszystko działa, w ArduinoIDE otwórz ten prosty szkic (Plik – Przykłady – 01.Basics – Blink) i znacząco zmień czasy opóźnienia – delay (rysunek 12). Skompiluj i wgraj program Blink.ino!
Jeżeli wcześniej zainstalowałeś odpowiednie sterowniki dla konwertera USB-TTL (rysunek 6) i jeżeli w ArduinoIDE prawidłowo wybrałeś płytki i port USB (rysunek 7), po kilku sekundach dioda powinna zacząć migać w innym, „Twoim” rytmie.
KOLEJNY SUKCES!
Niewątpliwie tak! Znów mamy się z czego cieszyć!
Oczywiście płytki Arduino Pro Mini mają zalety i wady. Zaletą jest cena, bo układ jest prostszy i nie zawiera konwertera USB. Zaletą okazuje się też skromny schemat i brak licznych dodatkowych elementów/obwodów, ponieważ otwiera to drogę do realizacji układów o małym i bardzo małym poborze prądu. Wprawdzie płytki Arduino nie są optymalizowane do takiej pracy i na przykład na płytce Pro Mini nadal jest stabilizator i stale świecąca kontrolka LED, jednak w niektórych wykonaniach można je łatwo odłączyć, rozlutowując jumper (pola stykowe SJ1 na rysunku 8), a w innych wylutowując te niepotrzebne elementy z płytki. Taką odchudzoną wersję Arduino można zasilać z jednego akumulatorka Li-Ion, ale wtedy trzeba raczej wykorzystać wersje 8-megahercową, bo przy obniżonym zasilaniu procesor może być zbyt powolny dla zegara 16MHz. Obniżanie poboru prądu Arduino to zadanie dla nieco bardziej zaawansowanych, a my na razie zostaniemy przy podstawach.
Ja przed dalszymi ćwiczeniami wlutowałem goldpiny w płytki Arduino. A stąd już tylko krok, żeby układ rejestratora z poprzednich ćwiczeń zrealizować w innej, bardziej praktycznej wersji. Do takiej pierwszej próby wykorzystałem tani chiński klon klasycznej wersji Arduino Pro Mini. W otwory w płytce można wlutować albo goldpiny, albo listwy z gniazdami, jak w Arduino Uno. Można je wstawić albo „od góry”, albo „od dołu” (można też w otwory wlutować przewody). Nie wszystkie otwory na płytce są umieszczone w rastrze 0,1 cala (100 milsów), dlatego proponuję, żebyś się nie spieszył z lutowaniem listew stykowych i dobrze przemyślał ich rozmieszczenie. Ja wlutowałem goldpiny, by w razie potrzeby można było wlutować moduł w płytkę albo wsunąć w płytkę stykową (BTW: lutowanie goldpinów najlepiej przeprowadzić właśnie po wetknięciu ich w płytkę stykową – wszystko będzie równe).
Do modułu OpenLog przylutowałem pięciostykową nasadkę – gniazdo, co ułatwi dołączanie także do niej konwertera USB/TTL.
A teraz jeszcze o module OpenLog. Może on obsługiwać karty o pojemności 64MB do 32GB, a nawet „większe”. Karta powinna być sformatowana w systemie Windows (DOS: FAT16 – zalecane, albo FAT32).
Według „firmowego” opisu pobór prądu w spoczynku wynosi poniżej 2mA, podczas krótkich chwil zapisu znacznie więcej, ale średni pobór prądu nie powinien przekroczyć 5mA.
OpenLog automatycznie tworzy i zapisuje dane w plikach o kolejnych numerach (LOGxxxxx.TXT) i takich plików mogą być tysiące, ale lepiej zapisywać dane na czystej, sformatowanej (DOS, FAT16) karcie i ograniczać liczbę plików do 100…200.
Gdy dane dla OpenLog nadchodzą bez dłuższych przerw, wtedy zapis następuje wtedy, gdy zapełni się 512-bajtowy bufor odbiorczy (w niektórych sytuacjach grozi to utratą danych przy wyłączeniu zasilania). Gdy jednak po nadejściu małej porcji danych następuje przerwa transmisji dłuższa niż 1…2 sekundy, wtedy nawet maleńka porcja zostanie zapisana na karcie (patrz wpis Autora na https://github.com/sparkfun/OpenLog/issues/126).
Przy dużej prędkości transmisji i dużej ilości danych może nastąpić ich utrata, z uwagi na ograniczenie prędkości zapisu na karcie (do 250ms wg podstawowej specyfikacji, dużo mniej przy szybszych kartach). Ryzyka takiego nie ma przy domyślnej prędkości transmisji 9600bps.
W poprzednim odcinku mówiliśmy, że można przestawić OpenLog w tryb rozkazowy (command mode). Nie jest to obszar zainteresowań początkujących, ale w telegraficznym skrócie chodzi o to, że w trybie „rozkazowym” można do modułu OpenLog wysyłać przez łącze szeregowe rozmaite rozkazy, a moduł je zrealizuje i ewentualnie odeśle odpowiedź. W tym trybie niezbędne jest więc też linia „zwrotna”, łącząca TXO OpenLog z RXI Arduino, która nie jest niezbędna w trybie zwykłej rejestracji.
Tryb „rozkazowy” można wykorzystać też przy bezpośrednim podłączeniu OpenLog do komputera PC (za pośrednictwem konwertera USB/TTL przy wykorzystaniu dowolnej konsoli monitora). Przykładowo po wysłaniu z konsoli komputera znaku zapytania ?, OpenLog odpowie, podając numer wersji oprogramowania i listę dostępnych rozkazów. Wysłanie rozkazu disk spowoduje odesłanie informacji o włożonej do modułu karcie microSD.
Polecenia z menu set pozwalają zmienić zachowanie modułu po podaniu zasilania. Standardowo każde wyłączenie i włączenie zasilania (reset) powoduje stworzenie i zapis do pliku LOGxxxxx.TXT o kolejnym numerze (zapamiętywanym w pamięci EEPROM OpenLog). W menu set można m.in. ustawić tryb Append File Logging, gdy po resecie kolejne dane będą dopisywane do jednego pliku (SEQLOG.txt), co może być przydatne w systemach z minimalizacją zużycia energii.
Przy odpowiednim napisaniu programu Arduino to właśnie Arduino, bez połączenia z komputerem i bez ingerencji użytkownika, może wykorzystywać tryb „rozkazowy” na przykład do zakładania katalogów i plików, do sprawdzania rozmiarów i odczytywania zawartości istniejących plików czy do zmiany ustawień, zapisywanych w pliku config.txt.
Oprócz trybu „rozkazowego” można też zmieniać wewnętrzne oprogramowanie modułu OpenLog (firmware z GitHub). I tak można uaktualnić program, jeśli jest to starsza wersja, ale można też wgrać mniejsze i szybsze wersje: OpenLog_Light i OpenLog_Minimal, gdzie większy jest bufor wejściowy.
Co ciekawe, OpenLog z punktu widzenia zmiany oprogramowania firmware zachowuje się jak płytka… Arduino Uno, tylko do programowania wymaga konwertera USB/TTL, podobnie jak Arduino Pro Mini (bootloader można wgrać za pomocą dodatkowych wyprowadzeń łącza SPI w „górnej” części płytki). Szczegóły na stronie:
https://learn.sparkfun.com/tutorials/openlog-hookup-guide.
Są to zagadnienia dla zaawansowanych, ale już teraz je sygnalizuję, bowiem OpenLog w wielu zastosowaniach może okazać się dużo lepszy niż prosty moduł czytnika kart (micro)SD. A w większości zastosowań wystarczą ustawienia fabryczne i dołączenie za pomocą tylko trzech przewodów.
W tym odcinku kursu wykorzystaliśmy Arduino Pro Mini. Chyba nie muszę Cię przekonywać, że właśnie otworzyłeś przed sobą nowe, niezmierzone możliwości działań praktycznych! Do tej pory „bawiliśmy się” płytką Arduino Uno, skądinąd znakomitą, ale nie bardzo nadającą się do praktycznych zastosowań. Teraz możesz wykorzystać zdecydowanie poręczniejsze, małe płytki, nie tylko opisywaną Pro Mini, ale też inne, choćby Arduino Nano czy Arduino Pro Micro!
Jeśli chcesz, możesz samodzielnie przerobić układ i program rejestratora do współpracy z Arduino Pro Mini. Prawdopodobnie napotkasz problemy. W następnym odcinku (UR015) opisuję, jakie problemy ja napotkałem i jak je rozwiązałem.
Piotr Górecki