Arduino Nano test board

Jeśli jesteś rozczarowany płytkami stykowymi do prototypowania, plątaniną kabelków i trudnością w lokalizowaniu problemów podczas testowania i uruchamiania nowych projektów, to jest to płytka właśnie dla Ciebie. Integruje ona kontroler Arduino Nano z układem zasilającym i często używanymi peryferiami, co znakomicie ułatwia pracę, a zaoszczędzony czas możesz poświęcić wyłącznie na programowanie.

Płytka jest prosta w montażu choć należy poświęcić na niego nieco czasu. Wszystkie elementy są łatwo dostępne, tanie i bez większego trudu można ją zmontować/przygotować do pracy w dwie, trzy godzinki.

PCB umożliwia testowanie następujących modułów i układów :

1. Moduł pomiaru prądu i napięcia – INA219 (po I2C)
2. Zegar RTC – moduł na DS3231 (po I2C) wraz ze zintegrowaną pamięcią EEPROM 24C32
3. Wyświetlacz OLED – I2C na SSD1306 (0.96 cala)
4. Wyświetlacz alfanumeryczny LCD 2×16 znaków (COG) I2C na ST7032
5. Wyświetlacz alfanumeryczny LCD z interface`em równoległym (4-bit) – HD44780 
6. Wyświetlacz TFT po SPI – w zasadzie dowolny, ale przetestowane z 1,44„ 128×128 driver ST7735, oraz Waveshare 1,8„ 128×160 (ST7735) – i pod takie dwa, PCB została przystosowana (rozkład wyprowadzeń)
7. Moduł czujnika wilgotności i temperatury – DHT-11 – serial Data
8. Moduł czujnika ciśnienia i temp. na BMP180 – I2C (uwaga – tylko 5V)
9. Moduł przetwornika cyfrowo-analogowego I2C – MCP4725.
10. Wyświetlacz LED, matrycowy lub 7-seg – na MAX7219 sterowany szeregowo (SPI)
11. Moduł czujnika światła na BH1750 (I2C)
12. PCB ma miejsce pod wlutowanie PCF8574 (SMD) który jest 8 bitowym, dwukierunkowym portem  I2C + 8 LED z rezystorami (0805). Możliwość zmiany/wyboru adresu I2C portu poprzez dostępne na płytce rezystory podciągające.
13. Moduł GPS – tani popularny odpowiednik U-blox (5/6/7/8) z wyprowadzonym PPS. Moduł powinien mieć 5 PIN (z wyprowadzonym sygnałem PPS) – najczęściej czerwone lub czarne PCB modułu.
14. Moduł generatora na Si5351A 0.1 160 MHz – I2C
15. Encoder obrotowy do montażu przewlekanego (THT)  lub powierzchniowego (SMD)
16. 4 przyciski / mini Switch – do dowolnego wykorzystania. Konfigurowane zworką do GND lub VCC.
17. 9xLED (adresowalne RGB) WS2832B + możliwość podłączenia kolejnych na wyprowadzonym złączu goldpin. Tu limitem z pewnością będzie wydajność prądowa stabilizatora – lepiej nie przesadzać z ilością diod w łańcuchu.
18. Miejsce do podłączenia serwomechanizmów (4 szt.) na portach PWM

Zasilanie całości (9-12V) – poprzez diodę zabezpieczającą (przed podaniem odwrotnej polaryzacji) i bezpiecznik polimerowy trafia na stabilizator 7805, którego można zamontować (w razie takiej potrzeby) na małym radiatorze.

Wszystkie piny sterownika Arduino Nano są opisane i wyprowadzone na szpilkach – dlatego można bez problemu podłączać i testować również inne moduły/urządzenia.

Z uwagi na wykorzystywanie – niektórych – wspólnych pinów/portów – nie ma możliwości aby wszystkie urządzenia działały jednocześnie (szczególnie gdy wykorzystują SPI, lub te same adresy na magistrali I2C).

Wyprowadzone są również na goldpin wszystkie istotne porty komunikacyjne (UART Arduino, UART GPS, I2C).

Wygląd zmontowanej i przygotowanej do pracy płytki:


Poniżej opis przetestowanych i uruchomionych modułów/elementów wraz z istotnymi informacjami: adresy, wykorzystane porty, użyte biblioteki (w większości przypadków podaję wersję mojej biblioteki – jak wiadomo ich funkcjonalność, w zależności od niej, może być różna). Przykłady te nie należą do wyrafinowanych – są to wyłącznie proste szkice obrazujące sposób użycia i funkcjonowanie zintegrowanych modułów. Mogą być nawet z pewnymi błędami, a już na pewno nie były przeze mnie optymalizowane. Większość z nich nie jest mojego autorstwa, często modyfikowałem tylko przypisanie portów dostosowując je do potrzeb opisywanej tutaj płyty PCB.


  1. Wyświetlacz LCD 2×16 znaków, sterownik ST7032.

Wyświetlacz ten, wbrew pozorom, nie jest urządzeniem drogim i trudno dostępnym – bez problemu można go kupić na allegro.pl za kilkanaście PLN.

Prosty przykład wyświetlający „Hello World” w pierwszej linii i odliczanie – zwiększanie wartości zmiennej w pętli – w drugiej linii.

Użyta biblioteka – sterownika LCD – https://github.com/olkal/LCD_ST7032

Adres LCD (domyślny) – 0x3E

Sketch z użytym przykładem (plik rar) – pobierz


2. Port ośmiobitowy PC8574

Przykład który sekwencyjnie gasi jedną z diod LED podpiętych do wyjść portów – od P0-P7 (układu PCF8574).

Użyta biblioteka : https://github.com/adafruit/Adafruit_PCF8574

Adres  z trzema rezystorami 10K – podciągającymi wszystkie wyprowadzenia adresowe do VCC to – 0x27  (wyprowadzenia te nie powinny wisieć w powietrzu, bo wprowadza to zamieszanie i adres może mieć charakter losowy)

Sketch z użytym przykładem (plik rar) – pobierz

 


3. Zegar RTC Dallas DS3231 – moduł ze zintegrowaną pamięcią EEPROM

Przykład nie jest idealny (jak kilka kolejnych – opisywanych) ale nie chodzi mi tu o wypasioną wersję zegara, tylko przykład działania i sposób użycia na mojej płycie PCB.

Godzina (bez specjalnego formatowania, bez daty itp.) wyświetlana jest na wcześniej opisywanym wyświetlaczu LCD oraz wystawiana jest na UART (czego nie sprawdzałem – programuję po ISP i nie używam portu szeregowego). Przykład nie demonstruje wykorzystania pamięci EEPROM

Użyta biblioteka : https://github.com/adafruit/RTClib

Adres domyślny RTC – 0x57

Adres domyślny EEPROM – 0x68

Sketch z użytym przykładem (plik rar) – pobierz


4. Moduł pomiaru prądu i napięcia – INA219 + wyświetlacz OLED SSD1306 (128×64) + diody adresowalne RGB  WS2832B

 

 

Użyte biblioteki : 

WS2832B – https://github.com/adafruit/Adafruit_NeoPixel – wersja 1.7.0

INA219 – https://github.com/adafruit/Adafruit_INA219 – wersja 1.2.0

OLED – https://github.com/adafruit/Adafruit_SSD1306 – wersja 2.5.7

Adresy :

Dane wysyłane do WS2832B – poprzez port (Arduino) D9

INA219 – 0x40 (jeśli na PCB będą użyte 2 moduły INA – a jest taka możliwość – należy w jednym zmienić adres – rezystorami, na module – i odpowiednio dostosować kod)

OLED – 0x3C

Sketch z użytym przykładem (plik rar) – pobierz


5. Wyświetlacz LCD z interface`m równoległym (4-bit) na kontrolerze HD44780 (lub odpowiednik)

Należy pamiętać aby po podłączeniu, w pierwszej kolejności ustawić kontrast, rezystorem regulowanym na PCB – 5K

Przykład pochodzi z biblioteki przykładów w środowisku Arduino IDE, bez żadnych modyfikacji.

MENU : Plik -> Przykłady -> LiquidCrystal -> HelloWorld

Sprzętowe połączenia (wykorzystane porty) na PCB są kompatybilne z definicjami z tego przykładu. Nie będę go szerzej opisywał i załączał kodu.


6. Wyświetlacz LCD po I2C – lub inne układy peryferyjne podpięte do złącza „EXT. I2C” na PCB

W tym przykładzie użycia zewnętrznego portu I2C zastosowałem wyświetlacz LCD 4×20 znaków, z wbudowanym konwerterem transmisji szeregowej I2C na równoległą

Użyta biblioteka : https://github.com/gavinlyonsrepo/HD44780_LCD_PCF8574

Adres wyświetlacza : 0x27 ( UWAGA! – ten sam adres, który wykorzystuje opisany wyżej port PCF8574 – albo nie korzystamy jednocześnie, albo zmieniamy adres jednego z tych urządzeń)

Sketch z użytym przykładem (plik rar) – pobierz


7. Czujnik temperatury i wilgotności – DHT11

Szeregowa transmisja odbywa się po D17 (A3). Wynik pomiaru prezentowany na wyświetlaczu OLED.

Adres OLED – 0x3C

Użyte biblioteki :

DHT11 – https://github.com/adafruit/DHT-sensor-library  – wersja  V1.4.4

OLED – https://github.com/olikraus/u8glib   – wersja V1.19.1

Sketch z użytym przykładem (plik rar) – pobierz


8. Czujnik światła – moduł na BH1750

Ten przykład wykorzystuje moduł czujnika światła z BH1750. Wartość wyświetlana na wbudowanym LCD ST7032.

Adres modułu z BH1750 – 0x23

Użyta biblioteka : https://github.com/PeterEmbedded/BH1750FVI – wersja 1.1.1

Sketch z użytym przykładem (plik rar) – pobierz


9.  Wyświetlacze TFT z kontrolerem ST7735 – 1,8` (128×160 px) oraz mniejszy 1,44` (128×128 px).

Oba wyświetlacze w tym przykładzie wykorzystują ten sam kod i te same biblioteki – na testowej płycie PCB mają tylko inne gniazda z innym rozkładem wyprowadzeń.

Wyświetlacze tego typu wykorzystują SPI i prawdopodobnie z łatwością można zaadoptować układ do obsługi innych/dowolnych wyświetlaczy tego typu.

Wykorzystane porty :

CS – D10

CLK/SCK – D13

DIN/MOSI – D11

RST/RESET – D15 (A1)

DC – D14 (A0)

Większy wyświetlacz – wpinamy w dolne gniazdo, mniejszy górne, niemniej z uwagi na dużą różnorodność wyświetlaczy tego typu lepiej sprawdzić zgodność wyprowadzeń z opisami na PCB.

Użyte biblioteki :

https://github.com/adafruit/Adafruit-GFX-Library – wersja 1.10.7

https://github.com/adafruit/Adafruit-ST7735-Library – wersja 1.9.3

Sketch z użytym przykładem (plik rar) – pobierz

 

 

10. Moduł odbiornika GPS

Przykład to fajny szkic zaczerpnięty ze strony krótkofalowca PA0RWE – przerobiony w minimalnym zakresie – wykorzystuje w nim wyłącznie harware`owy UART, dlatego do poprawnego działania należy połączyć TXG (na złączu GPS) z RXD (na złączu UART TTL NANO). Daje to sprzętowe sprzężenie wyjścia UART TX na module GPS z wejściem UART w Arduino Nano RxD.

Oczywiście istnieje możliwość wykorzystania w projektach Softwareserial, tyle że należy skrosować odpowiedni port Nano z wyjściem modułu GPS – a jest taka możliwość.

Z kilkoma kontrolerami Arduino Nano (chińskie tanie podróbki) miałem problem jeśli chodzi o należytą obsługę zewnętrznych portów UART – dlatego wskazane jest używać w tych przypadkach oryginałów, lub przynajmniej klonów dobrego producenta. Możliwe, że winny jest interface TTL/RS232 montowany na tanich podróbkach, a spięty na sztywno na samej płytce Nano.

Gniazdo do montażu modułu GPS na mojej PCB ma 5 pinów. W zasadzie do takich modułów płyta jest przystosowana, bez przeróbek, a należy zwrócić uwagę że na rynku jest bardzo dużo modułów z 4-ma wyjściami (bez PPS) i te mają inny rozkład wyprowadzeń. Moduły z pięcioma wyjściami zazwyczaj mają czerwoną lub czarną maskę lutowniczą.

Wspomniany wyżej przykład to zegar, który jednocześnie wylicza z uzyskanej pozycji QTH Locator, wyświetla też datę, współrzędne geograficzne i ilość odbieranych (w danym momencie) satelitów.

Wykorzystywane biblioteki (nowe, nie używane we wcześniejszych przykładach) :

https://github.com/adafruit/Adafruit_GPS – wersja 1.5.4

Sketch z tym przykładem (plik rar) – pobierz


CDN…