KAmduino UNO (lub Arduino) + LCD + HC-SR501
Jak zapewne wiecie od jakiegoś czasu, dzięki uprzejmości firmy Kamami w moim warsztacie gości KAmduino. Z tego też powodu postanowiłem dodać kilka artykułów dotyczących tej właśnie platformy. Omówimy dzisiaj po krótce wyświetlacz LCD z Noki 5110, czyli jeden z najpopularniejszych (i najtańszych) LCD, który na allegro możemy zakupić już za 10zł! Opowiem także o wykorzystaniu czujnika HC-SR501. Nie będę tu omawiał wszystkich aspektów związanych z tymi elementem, postaram się tylko przedstawić proste przykłady wykorzystania tych podzespołów.
[LCD] Podstawowe informacje i podłączenie
Zaczniemy od omówienia samego wyświetlacza. Na rynku możemy znaleźć wiele modułów z wbudowanym LCD 5110, ja zaopatrzyłem się w ten (chyba) najpopularniejszy, bez zbędnych dodatków, który zakupiłem za kilkanaście złotych (zdjęcie poniżej). Cechuje się on ośmioma wyprowadzeniami, które zresztą są podpisane: RST (reset); CE; DC; DIn; CLK; VCC (zasilanie); BL (Podświetlenie); GND (oczywiście masa).
? Sprawdź to:
KAmduino UNO – recenzja i najważniejsze parametry
Podstawowe parametry:
- Rozdzielczość 84 x 48 px
- Zgodny z PCD8544
- Podświetlenie niebieskie
- Interfejs SPI
- Wymiary 45mm x 45mm
Podłączenie: Z racji, iż we Fritzing’u nie znalazłem elementu, który mógłby obrazować LCD z Noki 5110 zmuszony jestem do “podyktowania” całego schematu:
RST –> Pin 11
CE –> Pin 12
DC –> Pin 10
Din –> Pin 9
CLK –> Pin 8
Vcc –> +5V (zasilanie wyświetlacza)
BL –> +3V (zasilanie dla diod podświetlających)
Gnd –> Gnd 😉
[LCD] Przykładowy program
Wiemy już, jakie są parametry wyświetlacza oraz jak go podłączyć. Zajmiemy się teraz oprogramowaniem. Z racji, że nie jest to żaden kurs, a sam artykuł miał być stosunkowo krótki, postanowiłem po prostu przedstawić kilka (2) przykładowych programów, wraz z krótkim wyjaśnieniem.
Aby było nam łatwiej skorzystamy z gotowej biblioteki przygotowanej dla LCD 5110. Można ją bez problemu znaleźć w internecie, ale na wszelki wypadek udostępniłem ją również na serwerze – można ją bezpiecznie pobrać: LCD5110_Graph. Wystarczy pobrać ją, a następnie (po włączeniu Arduino IDE) kliknąć: szkic –> importuj bibliotekę –> dodaj bibliotekę –> wybrać pobrany plik zip. –> kliknąć ok.
W dostępnych przykładowych programach znajdziemy kilka interesujących pozycji. Pierwszy przykład pozwoli nam wyświetlić dowolny tekst, który będzie przewijał się po ekranie.
#include <LCD5110_Graph.h> LCD5110 myGLCD(8,9,10,11,12); extern uint8_t SmallFont[]; int y; void setup() { myGLCD.InitLCD(); myGLCD.setFont(SmallFont); randomSeed(analogRead(0)); } void loop() { y = random(0, 40); for (int i=84; i>=-(34*6); i--) { myGLCD.print("Tutaj wpisz tekst, który ma się wyświetlać na LCD", i, y); myGLCD.update(); delay(50); } }
Drugą ciekawą pozycją jest Graph Demo, czyli po prostu testowa animacja, którą możemy wgrać do naszego KAmduino. Program prezentuje się w tak:
#include <LCD5110_Graph.h> LCD5110 myGLCD(8,9,10,11,12); extern unsigned char SmallFont[]; extern unsigned char TinyFont[]; extern uint8_t arduino_logo[]; extern uint8_t The_End[]; extern uint8_t pacman1[]; extern uint8_t pacman2[]; extern uint8_t pacman3[]; extern uint8_t pill[]; float y; uint8_t* bm; int pacy; void setup() { myGLCD.InitLCD(); myGLCD.setFont(SmallFont); randomSeed(analogRead(7)); } void loop() { myGLCD.clrScr(); myGLCD.drawBitmap(0, 0, arduino_logo, 84, 48); myGLCD.update(); delay(2000); myGLCD.clrScr(); myGLCD.print("LCD5110_Graph", CENTER, 0); myGLCD.print("DEMO", CENTER, 20); myGLCD.drawRect(28, 18, 56, 28); for (int i=0; i<6; i++) { myGLCD.drawLine(57, 18+(i*2), 83-(i*3), 18+(i*2)); myGLCD.drawLine((i*3), 28-(i*2), 28, 28-(i*2)); } myGLCD.setFont(TinyFont); myGLCD.print("(C)2015 by", CENTER, 36); myGLCD.print("Henning Karlsen", CENTER, 42); myGLCD.update(); delay(5000); myGLCD.clrScr(); for (int i=0; i<48; i+=2) { myGLCD.drawLine(0, i, 83, 47-i); myGLCD.update(); } for (int i=83; i>=0; i-=2) { myGLCD.drawLine(i, 0, 83-i, 47); myGLCD.update(); } delay(2000); myGLCD.clrScr(); myGLCD.drawRect(0, 0, 83, 47); for (int i=0; i<48; i+=4) { myGLCD.drawLine(0, i, i*1.75, 47); myGLCD.update(); } for (int i=0; i<48; i+=4) { myGLCD.drawLine(83, 47-i, 83-(i*1.75), 0); myGLCD.update(); } delay(2000); myGLCD.clrScr(); for (int i=0; i<8; i++) { myGLCD.drawRoundRect(i*3, i*3, 83-(i*3), 47-(i*3)); myGLCD.update(); } delay(2000); myGLCD.clrScr(); for (int i=0; i<17; i++) { myGLCD.drawCircle(41, 23, i*3); myGLCD.update(); } delay(2000); myGLCD.clrScr(); myGLCD.drawRect(0, 0, 83, 47); myGLCD.drawLine(0, 23, 84, 23); myGLCD.drawLine(41, 0, 41, 47); for (int c=0; c<4; c++) { for (int i=0; i<84; i++) { y=i*0.017453292519943295769236907684886; myGLCD.invPixel(i, (sin(y*6)*20)+23); myGLCD.update(); delay(20); } } delay(2000); for (int pc=0; pc<3; pc++) { pacy=random(0, 28); for (int i=-20; i<84; i++) { myGLCD.clrScr(); for (int p=4; p>((i+20)/20); p--) myGLCD.drawBitmap(p*20-8, pacy+7, pill, 5, 5); switch(((i+20)/3) % 4) { case 0: bm=pacman1; break; case 1: bm=pacman2; break; case 2: bm=pacman3; break; case 3: bm=pacman2; break; } myGLCD.drawBitmap(i, pacy, bm, 20, 20); myGLCD.update(); delay(25); } } for (int i=0; i<25; i++) { myGLCD.clrScr(); myGLCD.drawBitmap(0, i-24, The_End, 84, 24); myGLCD.update(); delay(100); } myGLCD.setFont(SmallFont); myGLCD.print("Runtime (ms):", CENTER, 32); myGLCD.printNumI(millis(), CENTER, 40); myGLCD.update(); for (int i=0; i<5; i++) { myGLCD.invert(true); delay(1000); myGLCD.invert(false); delay(1000); } }
[HC-SR501] Podłączenie
Teraz zajmiemy się czujnikiem ruchu HC-SR501. W tym wypadku nie będę już omawiał samego modułu, a przejdziemy od razu do podłączenia, a następnie do programowania. Zacznijmy od “schematu” – grafika poniżej.
Niestety z racji, iż nie znalazłem czujnika HC-SR501 w domyślnej bibliotece Fritzing, zmuszony byłem zastosować inny element o podobnym/takim samym pinoucie – w tym wypadku jest czujnik IR TSOP.

Osoby niezaznajomione z tematem mogą zapytać po co tu tranzystor? Gdyby go nie było prawdopodobnie zniszczylibyśmy naszą płytkę, ponieważ buzzer pobierało o wiele więcej niż dopuszczalne 40mA, tak więc bez tranzystora się nie obejdzie, no chyba że na przykład zastosujemy prostą diodę w formie alarmu.
[HC-SR501] Program
int pirPin = 8; int val; void setup() { Serial.begin(9600); } void loop() { val = digitalRead(pirPin); //odczytywanie wyniku pomiaru if (val == LOW) {digitalWrite(7, LOW);} //jeżeli wynik = LOW, to stan pinu 7 ustaw na LOW else { //w innym wypadku println("UWAGA! Wykryto ruch!"); digitalWrite(7, HIGH); delay(120); digitalWrite(7, LOW); delay(100); digitalWrite(7, HIGH); delay(120); digitalWrite(7, LOW); delay(100); digitalWrite(7, HIGH); delay(120); digitalWrite(7, LOW); delay(100); } delay(100); }
Jak możecie się domyślić program spowoduje, że po wykryciu ruchu na pinie 7 (gdzie przez tranzystor podłączony jest buzzer) ustawiony zostanie stan wysoki i niski na zmianę kilka razy.
Ten prosty układ daje już ciekawy efekt i możemy go użyć chociażby jako banalny alarm.
Właściwie to już koniec tego artykułu. Wiele osób może być zawiedziona i nieusatysfakcjonowana tym jak mało wytłumaczyłem i jak mało pokazałem, aczkolwiek uspokajam – to miał być tylko krótki wpis, dla tych którzy po zakupieniu Arduino/Kamduino chcieliby “na szybko” przygotować układ z wyświetlaczem, czy też czujnikiem ruchu. Prawdopodobnie za około 2 tygodnie na stronie pojawi się kolejna część kursu Arduino, w której tym razem opiszę właśnie jeden z tych elementów.
Na ten moment to koniec, chciałbym jeszcze zaprosić do komentowania, udostępniania, a także zaproponować Wam dołączanie do Mechatrobotowej grupy na facebooku – “Nastoletni elektronicy“.