Podstawy elektroniki i arduino Kurs praktyczny #7

26 marca 2019
  • LCD
  • keyboard („klawiaturka”)
  • projekt „Master of algebra” na arduino

Prezentowana gra, czy raczej test umiejętności szybkiego liczenia, może się przydać nie tylko do zabawy. Może na przykład pomagać dzieciakom w nauce tabliczki mnożenia. Lub sprzedawcom, jako trening szybkości liczenia, co w tym zawodzie jest bardzo ważne.

Projekt jest bardzo prosty, opisany z największą możliwą dokładnością i jest przeznaczony głównie dla początkujących w tematyce arduino, a nawet dla zupełnych elektronicznych laików.

Oto podzespoły, których użyjemy:

  1. Płytka arduino UNO, lub NANO (która jest tańsza), lub inna płytka arduino, która ma co najmniej 8 pinów cyfrowych i łącza SDA i SCL (do podłączenia wyświetlacza LCD przez konwerter I2C); Dostępne tutaj.
  2. Wyświetlacz LCD  2 na 16, tutaj też jest swoboda wyboru, można użyć innych wyświetlaczy, ja użyłem 2(wiersze) * 16(komórek poziomo), zakup wyświetlacza z przylutowanym przez producenta konwerterem I2C oszczędzi pracy przy lutowaniu;
  3. Klawiaturka membranowa (keypad), najpopularniejsze i najtańsze to klawiaturki 4 na 4 (razem 16 klawiszy), lub 4 na 3 (razem 12 klawiszy), ja użyłem 4 na 4, można też użyć 4 na 3, ale wtedy nie wszystkie funkcje programu będą dostępne, chyba że po modyfikacji kodu programu (wyłączanie i włączanie gry jednym „wolnym” przyciskiem * );
  4. Buzzer, tak zwany „brzęczyk”, najlepiej z generatorem (czyli taki który po podaniu napięcia wysyła ciągły sygnał dźwiękowy, sygnał ustaje po odcięciu prądu), buzzer nie jest konieczny, można go pominąć;
  5. 2* diody LED, zielona i czerwona, niekoniecznie takie, i w ogóle bez diod też można się obejść;
  6. Płytka stykowa, służy wyłącznie do podłączenia diod LED;
  7. Rezystory 500Ω dla ochrony diod LED
  8. Kabelki, można się obejść bez lutowania, używając gotowych kabelków dla arduino, do podłączenia klawiaturki potrzeba 8 kabelków o stykach męski-męski, do podłączenia wyświetlacza LCD – 4 kabelki (męski-żeński), do podłączenia buzzera 2 kabelki męski-żeński; do diod LED 2 kabelki męski-męski (gdy używamy uniwersalnej płytki stykowej), trochę inaczej wygląda sprawa z płytką NANO, gdzie są konieczne kabelki ze wtykiem żeńskim.

Jeśli chodzi o używane w kodzie programu biblioteki, to będą konieczne:

  1. Liquid Crystal_I2C – jest wiele różnych bibliotek do sterowania wyświetlaczami LCD poprzez konwerter I2C. Ta, której użyłem w projekcie, jest do ściągnięcia w dołączonej paczce;
  2. Keypad – ta biblioteka obsługuje klawiaturkę.  Strona biblioteki tutaj.    Jest też w paczce dołączonej do projektu;
  3. Timers – użycie wątków, biblioteka jest dostępna w pliku dołączonym do projektu lub tutaj (gdzie jest też opis biblioteki po polsku).

I oczywiście konieczna jest instalacja na komputerze samego języka arduino IDE, najnowsza wersja, jak i wiele różności o arduino (po angielsku) dostępna jest tutaj.

Zaczynamy od podpięcia keypadu do arduino UNO. Ja użyłem 8 pinów cyfrowych, o numeracji od D2 do D9. Pisałem, że zamiast arduino UNO może mieć zastosowanie np. taniutkie NANO, w tym przypadku trzeba zarezerwować, 2 piny dla łącz SDA i SCL wyświetlacza LCD, w płytce NANO są to piny analogowe A4(SDA) i A5(SCL), jeśli chodzi o łącza, klawiaturki to też można użyć pinów cyfrowych od D2 do D9). Sposób połączenia klawiatury do pinów arduino pokazano na rysunku:

1. Keypad

Dlaczego klawiatura, która ma 16 klawiszy, wymaga tylko 8 ścieżek danych? Mogłoby się wydawać, że dla określenia wciśnięcia każdego klawisza jest konieczne jedno połączenie. Otóż klawisze w bibliotece keypad.h są zdefiniowane nie jednostkowo, odrębnie, ale przy pomocy tablicy dwuwymiarowej, czyli 2 powiązanych zmiennych.

Każda zmienna może przyjmować 4 wartości, a kombinacje pomiędzy obydwoma zmiennymi 4-stanowymi daje 16 możliwych różnych stanów. Graficznie wygląda to jak siatka z 4 wierszami i z 4 kolumnami. Nie musimy się kłopotać o oprogramowanie całego tego systemu, robi to za nas gotowa biblioteka keypad.h. Dołączamy ją do kodu instrukcją:


#include <Keypad.h>

To co musimy zaprogramować, to przyporządkowanie odpowiednich pinów arduino do obsługi wierszy i kolumn klawiaturki. Robimy to w ten sposób:


const byte ROWS = 4; //cztery wiersze
const byte COLS = 4; //cztery kolumny
 
// tablica znaków klawiszy, dla 4 * 4 , dla keypadu 4 * 3 bez A,B, C, D,
char keys[ROWS][COLS] = {
   {‚1′,’2′,’3′,’A’},
  {‚4′,’5′,’6′,’B’},
  {‚7′,’8′,’9′,’C’},
  {‚*’,’0′,’#’,’D’}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; //piny arduino wierszy klawiaturki,
// tutaj przyporządkujemy odpowiednie piny cyfrowe odpowiednim wierszom
 
byte colPins[COLS] = {6, 7, 8, 9}; //piny arduino kolumn klawiaturki
// tutaj przyporządkujemy odpowiednie piny cyfrowe odpowiednim kolumnom
 
//inicjalizacja klawiatury
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

Cały ten kod umieszczamy u samej góry programu, przed funkcją setup ().

W ten sposób zakończyliśmy wstępne programowanie klawiaturki. Teraz podłączamy wyświetlacz LCD. Ja użyłem wyświetlacza o 2 wierszach poziomych, po 16 znaków każdy, czyli tego najtańszego i najpopularniejszego. Kupujemy wyświetlacz, który ma już zamontowany konwerter I2C, lub dolutowujemy do niego konwerter.

I2C ma tylko 4 łącza: SDA, SCL, VCC i GND. Do komunikacji służą dwa pierwsze łącza, VCC i GND służą do zasilania – napięcie zasilania konwertera to 5v. Wyszukujemy więc na płytce arduino UNO piny komunikacyjne – są powyżej pinów D1-D13 i podłączamy wyświetlacz. Wyszukujemy piny 5V i GND (masa) i podłączamy tam wyświetlacz. Jako że łącza zarówno na UNO i jak na I2C są odpowiednio oznaczone, obejdzie się bez dodatkowego rysunku. Wystarczy połączyć SCL konwertera z SCL arduino UNO, SDA z SDA, VCC konwertera z 5V arduino, i GND z GND.

2. Wyświetlacz LCD 2 × 16

Po podłączeniu możemy sprawdzić, czy wyświetlacz działa. Dodajemy więc do naszego programu kod:


// dołączamy bibliotekę konwertera I2C
#include <LiquidCrystal_I2C.h>
 
// definiujemy wyświetlacz LCD jako 16 znaków x 2,
// adres heksadecymalny określa komórki pamięci
// poprzez które komunikujemy się z I2c, u mnie jest to 0x3F, może być 0x27 lub inna
// jak znaleźć ten adres opisałem w artykule
LiquidCrystal_I2C lcd(0x3F,16,2);
 
void setup(){
 
//inicjalizujemy wyświetlacz LCD
lcd.init();
 
  lcd.backlight();
 
  // wypisujemy na wyświetlaczu napis początkowy przez 2 sekundy
  lcd.print(„ALGEBRAIK v.1.0”);
  delay(2000);
 
  // czyścimy wyświetlacz
lcd.clear();
}

Kod ten powoduje wyświetlenie na rozjaśnionym wyświetlaczu LCD napisu „ALGEBRAIK v.1.0” przez 2 sekundy. Podłączamy więc arduino do portu USB komputera. Aby komunikować się z arduino, poprzez port USB musimy mieć zainstalowany odpowiedni sterownik USB w systemie, którego używamy. Sterownik (CH341SER) do zarówno UNO jak i NANO znajdziemy, choćby tutaj.  Sterownik ten działa pod systemami Win 98/ME/2000/XP/Vista/7/8/8.1/10/2003/2008/2012.  

Czy zainstalował się i działa poprawnie, można sprawdzić w menadżerze urządzeń systemu (Panel Sterowania-> System -> Menadżer Urządzeń), powinien być widoczny pod zakładką „Porty Com i LPT” jako CH340 UNO (COM?). Port jest widoczny tylko po podłączeniu płytki arduino pod port USB (technologia Plug&Play), gdy płytka jest nie podłączona, port CH340 UNO nie wyświetla się w menadżerze! Pytajnik określa numer łącza USB, który jest wykorzystywany. Podpięcie arduino pod inne złącze USB nie da żadnego efektu. Tak samo trzeba pamiętać, by w arduino IDE  skonfigurować odpowiednio port i rodzaj używanej płytki arduino.(Zakładka w menu Narzędzia -> płytka i Narzędzia -> Port) Port ten powinien być taki sam jak używany przez system port, pokazywany przez Menadżer Urządzeń. (np. Arduino/Genuino UNO na COM4 = CH340UNO (COM4)). Ładujemy kod do arduino (w IDE: Szkic -> Wgraj) i patrzymy na efekt.

Jeśli z wyświetlaczem jest wszystko w porządku, możemy przejść do kolejnych czynności.

A zatem podłączamy buzzer i diody LED.

3. Buzzer

4.Diody LED

Te elementy są dodatkowym urozmaiceniem urządzenia i mogą zostać pominięte. Buzzer, czyli inaczej głosniczek, który po podaniu napięcia wydaje stały dźwięk, różnej częstotliwosci zależnie od podanego prądu. Diody LED najlepiej podłączyć przy pomocy płytki stykowej. Jedna powinna mieć kolor zielony, druga czerwony. Zielona informuje gracza o jego prawidłowej odpowiedzi, druga – czerwona – o błędnej. Buzzer podłączamy do pinu D11, czerwoną LED do D13, zieloną do D12. Diody najlepiej podłączyć poprzez rezystory ok. 1kΩ, ale można też obyć się bez rezystorów. Można podłączyć potencjometr do buzzera, dzięki czemu będzie można regulować jego głosnosć.

5. Schemat poglądowy

To już chyba opisane wszystkie najważniejsze elementy konstrukcji.

Jeszcze raz podaję link do paczki z programem.

Pozostają jeszcze sprawy estetyczne, jak umieszczenie gry w odpowiedniej obudowie, ale ten etap pozostawiam pomysłowosci majsterkowiczów.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *