niedziela, 13 kwietnia 2014

wyświetlacz LCD z arduino & wyświetlacz LCD z Raspberry Pi

W tym poście przedstawię wam jak podłączyć wyświetlacz LCD w arduino oraz w Raspberry Pi żebyście mogli zobaczyć podstawowe różnice obu płytek.

Zacznijmy więc od arduino.

Na początek standardowo piszemy krótki program:



Nie będę wyjaśniał co oznaczają poszczególne ponieważ standardowo są to polecenia void setup oraz void loop. Jedyne co doszło to na samym początku biblioteka do naszego wyświetlacza oraz zdefiniowanie pinów na naszej płytce pod które będą podpięte piny wyświetlacza.
Jak zapewne zauważyliście w programie znajdują się 2 polecenia lcd.print i w nawiasach wpisujemy to co chcemy wyświetlić. Jedyne ograniczenie to 2x po 16 znaków.

Jak już wspomniałem we wcześniejszym poście http://mikrokomputer-raspberry-pi.blogspot.nl/2014/04/podnoszace-poziom-szczescia-zakupy.html
warto mieć wyświetlacz np taki:

Jak można zauważyć mój nie posiada podpisanych pinów ale w każdym wyświetlaczu znajdują się w tej samej kolejności.
Zaczynając od prawej strony (bliżej brzegu wyświetlacza):
1: VSS czyli masa
2: VDD czyli zasilanie 5V
3: VO czyli kontrast
4: RS czyli Rejestr
5: RW czyli odczyt/zapis z ang. Read/Write
6: E
7: D0
8: D1
9: D2
10: D3
11: D4
12: D5
13: D6
14: D7
15: A czyli anoda(+),podświetlenie wyświetlacza  tutaj podłączamy 5v
16: K czyli katoda(-), tutaj podłączamy masę tj: GND na naszej płytce.

Do sterowania kontrastem użyjemy potencjometru 10k:

Wgrywamy nasz program do arduino i odłączamy od zasilania/portu usb.

Teraz bierzemy się za płytkę.
Na początek wpinamy nasz wyświetlacz tak aby piny znajdowały się tuż za środkową linią na płytce czyli po tej samej stronie co przewody. Obok wpinamy potencjometr. wygląda to tak:
Zacznijmy od tego że na płytce podpinamy do czerwonej linii zasilanie 5 V (czerwony przewód), a do niebieskiej linii masę (czarny przewód) czyli GND na arduino.
Potencjometr będzie sterować kontrastem. Lewa nóżka do zasilania 5 V prawa do uziemienie (niebieska linia) środkowa do pinu 3 w wyświetlaczu (VO).
Wyświetlacz:
1 pin VSS do niebieskiej linii,
2 pin VDD do czerwonej linii,
3 pin VO już podłączyliśmy do potencjometru.
4 pin RS podłączamy do pinu 12 w arduino.
5 pin RW  podłączamy do masy (niebieska linia) czyli zapis.
6 pin E podłączamy do pinu 11 w arduino.
7 pin pusty
8 pin pusty
9 pin pusty
10 pin pusty
11 pin podłączamy do pinu 5 w arduino
12 pin podłączamy do pinu 4 w arduino
13 pin podłączamy do pinu 3 w arduino
14 pin podłączamy do pinu 2 w arduino
15 pin Anoda(+) podłączamy do linii czerwonej (5v)
16 pin Katoda (-) podłączamy do linii niebieskiej masa (GND)

Całość wygląda tak:

Teraz podłączamy nasze arduino do zasilania i sprawdzamy jak działa. Jeżeli wszytko zostało podłączone prawidłowo powinie pokazać się napis który wpisaliśmy w nawiasach. Jeżeli nic nie widać albo są same białe kwadraciki to trzeba wyregulować kontrast potencjometrem.

 A teraz czas na raspberry Pi :)
Opis dotyczy modelu B ponieważ oba modele mają różną kolejność pinów!!!
ale bez obaw można zrobić ten projekt na raspberry Pi typu  A ponieważ piny użyte w tym przykładzie są te same.

Na początek w terminalu wpisujemy komendę:
        sudo apt-get install python3-rpi.gpio


Jak widać mam już zainstalowaną najnowszą wersję programu.

Do projektu wykorzystam poprzednią płytkę którą używałem do arduino ponieważ będzie podłączona w ten sam sposób.

Dla ochrony niezabezpieczonych niczym pinów RPI używam płytki protoPi

która to ponadto ma opisane piny.

Naszą taśmę podłączamy w następujący sposób aby kolejność pinów na protoPi się zgadzała:
drugi koniec taśmy można podłączyć tylko w jeden sposób do płytki protoPi ze względu na kształt gniazda.
(uwaga!!! najlepiej sprawdzić multimetrem napięcie z pinu 5V ponieważ okazuje się że posiadam taśmy które podłącza się odwrotnie) 

Zasada podłączania płytki stykowej z wyświetlaczem do raspberry Pi jest podobna jak w arduino tylko numeracja jest inna.


przewody podłączamy w następujący sposób:

czyli:
główną szynę zasilającą (czerwona linia) podączamy do pinu 1 (5V).
niebieską linię (masa) podłączamy do  pinu 3 GND.
pin 14 (D7) naszego wyświetlacza podłączamy do pinu GPIO18
pin 13 (D6) naszego wyświetlacza podłączamy do pinu GPIO23
pin 12 (D5) naszego wyświetlacza podłączamy do pinu GPIO24
pin 11 (D4) naszego wyświetlacza podłączamy do pinu GPIO25
pin 6 (RW) naszego wyświetlacza podłączamy do pinu 12 oznaczonego CEo
pin 5 (RS) naszego wyświetlacza podłączamy do pinu 13 oznaczonego CE1
reszta pinów jest podłączona w identyczny sposób jak z arduino.
Zwróćcie uwagę aby nie podłączać nic pod piny oznaczone NC ponieważ można spalić RPI!!!

Teraz czas zacząć pisać nasz program.
Potrzebny do tego będzie nam program obsługujący języka python.
Ja korzystam z programu Python shell (IDLE).

Po uruchomieniu programu ukaże na m się okno programu


następnie w  menu File wybieramy New Window (można też skrótem klawiszowym ctrl+N)


program potrzebny do wyświetlania informacji na naszym wyświetlaczu wygląda tak:

#!/usr/bin/python

import RPi.GPIO as GPIO
from time import sleep

class HD44780:

    def __init__(self, pin_rs=7, pin_e=8, pins_db=[25, 24, 23, 18]):
        
        self.pin_rs = pin_rs
        self.pin_e = pin_e
        self.pins_db = pins_db

        GPIO.setmode(GPIO.BCM)
        GPIO.setup(self.pin_e, GPIO.OUT)
        GPIO.setup(self.pin_rs, GPIO.OUT)
        for pin in self.pins_db:
            GPIO.setup(pin, GPIO.OUT)

        self.clear()

    def clear(self):
        """ Reset LCD """
        self.cmd(0x33) 
        self.cmd(0x32) 
        self.cmd(0x28) 
        self.cmd(0x0C) 
        self.cmd(0x06) 
        self.cmd(0x01) 
        
    def cmd(self, bits, char_mode=False):
        """ Command to LCD """

        sleep(0.001)
        bits=bin(bits)[2:].zfill(8)
        
        GPIO.output(self.pin_rs, char_mode)

        for pin in self.pins_db:
            GPIO.output(pin, False)

        for i in range(4):
            if bits[i] == "1":
                GPIO.output(self.pins_db[::-1][i], True)

        GPIO.output(self.pin_e, True)
        GPIO.output(self.pin_e, False)

        for pin in self.pins_db:
            GPIO.output(pin, False)

        for i in range(4,8):
            if bits[i] == "1":
                GPIO.output(self.pins_db[::-1][i-4], True)

        GPIO.output(self.pin_e, True)
        GPIO.output(self.pin_e, False)
        
    def message(self, text):
        """ Send string to LCD """

        for char in text:
            if char == '\n':
                self.cmd(0xC0) # next line
            else:
                self.cmd(ord(char),True)

if __name__ == '__main__':

    lcd = HD44780()

    lcd.message("  ARDUINO & \n raspberry Pi")

następnie zapisujemy program w menu File wybieramy save as podajemy swoją nazwę najlepiej jednowyrazową. W moim przypadku jest to wyswietlacz.py
Jeżeli chodzi o samą zawartość kodu nie będę wyjaśniał ponieważ sam dopiero zaczynam przygodę z RPI.

Po podłączeniu całego układu do naszego klikamy w menu run a następnie run module lub wciskamy F5.

W moim przypadku nie obyło się bez problemów zresztą jak zawsze:


tak jak widać na zdjęciu wyżej odpaliłem program w trybie root i zadziałał.
Jak to zrobić? nic trudnego.
Najpierw otwieramy terminal użytkownika root taka sam ikonka jak od terminala tylko czerwona z symbolem #_.


jak widać użytkownik zmienił się na root@

następnie uruchamiamy nasz program i zadziałał :)

W przypadku gdyby widoczne były same kwadraciki lub nic nie było trzeba wyregulować kontrast potencjometrem.

Na sam koniec chciałbym powiedzieć że od samego początku RPI sprawia mi problemy :) a arduino śmiga tak jak chcę:)

sobota, 12 kwietnia 2014

arduino, fotorezystor i diody LED...

W tym poście pokaże wam jak w łatwy sposób można sterować 3 diodami LED przy pomocy arduino i foto-rezystora (czujnika natężenia światła).

Na początek otwieramy program do pisania programów na arduino i w pierwszej kolejności (zaznaczony fragment kodu) jak zawsze zaczynamy od wpisania funkcji inicjalizującej void setup()
następnie wpisujemy polecenie Serial.begin(9600); które rozpoczyna komunikację z portem szeregowym i w nawiasie podajemy prędkość tej komunikacji w b/s.
while(!Serial); (przy arduino leonardo ponieważ się restartuje).

Kolejną czynnością jest zdefiniowanie portów które będziemy używać:
 pinMode(A0,INPUT);
 pinMode(13, OUTPUT);
 pinMode(12, OUTPUT);
 pinMode(11, OUTPUT);
jak widać port analogowy A0 jest portem wejściowym czyli odbiera informacje i na ich podstawie arduino będzie wysyłać polecenia na porty cyfrowe 13,12,11.

Następnie tworzymy główną pętlę programu czyli void loop()
na początek wpisujemy polecenie: int odczyt = analogRead(A0);
za pomocą którego odczytamy wartości z naszego foto-rezystora.
Następnie wypisujemy warunki dla jakich mają być wykonywane/podejmowane kolejne czynności.
if(odczyt < 499)
digitalWrite(13, HIGH);
else digitalWrite(13, LOW);
inaczej mówiąc jeżeli odczyt z foto-rezystora będzie w zakresie poniżej 499 to na pin 13 zostanie podane napięcie, jeżeli napięcie będzie w zakresie powyżej 499 to na pinie 13 nie będzie napięcia.

Tak samo jest przy pozostałych pinach, a ponieważ chciałem aby w danej chwili świeciła tylko jedna dioda LED to dodałem warunek:
if(odczyt <500)
digitalWrite(12, LOW)

Ponieważ chciałem zobaczyć jak wygląda odczyt danych z portu szeregowego wpisałem polecenie:
Serial.println(odczyt);

jest to nic innego jak  wyświetlanie jakiejś informacji zawartej w nawiasie w moim przypadku danych z odczytu z foto-rezystora. Samo słowo Serial odpowiedzialne jest za komunikację z naszym portem szeregowym, a słowo print znaczy drukuj razem z końcówką ln która nakazuje zrobić enter.
Na samym końcu umieszczamy opóźnienie aby informacje z portu szeregowego pokazywały się co jakiś czas: delay(500); w moim przypadku ustawiłem sobie 0,5 sekundy ale to zależy od was jaki czas wybierzecie.

Kolejnym etapem będzie zmontowanie naszego układu na płytce stykowej.
Trochę wygląda to jak sygnalizacja świetlna :)
Pomyślałem że na 3 różnych kolorach będzie to lepiej widoczne.
Najpierw montujemy diody LED na naszej płytce
 (najlepiej dłuższymi nóżkami w tą samą stronę czyli anodą+),
dokładamy po 1 rezystorze na każdą diodę LED (krótka nóżka katoda-)
(ja używam rezystorów o rezystancji 220 om)
Jak widać na załączonym wyżej zdjęciu wszystkie nie podłączone do niczego nóżki rezystorów podłączyłem za pomocą krótkich przewodów do niebieskiej linii którą zaś podłączyłem do pinu GND w arduino czyli masy.
Pozostałe wolne nóżki od diod LED podłączyłem kolejno do portów cyfrowych 13,12,11.

Przenosimy się teraz na drugi koniec naszej płytki gdzie zamontujemy nasz foto-rezystor wraz z rezystorem.
 Jak sama nazwa wskazuje foto-rezystor to nic innego jak rezystor tylko że jego rezystancja zależna jest od czynnika (w tym przypadku światła). W przypadku braku światła nie przepuszcza prądu a im więcej światła tym więcej prądu przepuszcza. Ponieważ arduino odbiera informacje na pinie analogowym A0 w postaci  prądu od 0V do 5V (wartości te są przedstawione w zakresie od 0 do 1023) dlatego znajduje się na płytce rezystor który na dzieli prąd (2 rezystory połączone szeregowo    -[]--[]-     dzielą nam napięcie na pół (pod warunkiem że są takiej samej wartości.
W moim przypadku użyłem rezystora 4,7 k om ponieważ po podłączeniu foto-rezystora do miernika wskazał wartość 5 k om. Prąd na wyjściu rezystora wyniósł około 2,7 V (w miejscu łączenia się rezystora i foto-rezystora). Drugą wolną nóżkę rezystora podpinam do pinu 5 V, a wolną nóżkę od foto-rezystora do masy czyli naszej niebieskiej linii. Miejsce łączenia się foto-rezystora z rezystorem podpinam do pinu A0 który będzie odbierał informacje o prądzie.

Wgrywamy nasz program do arduino i oto efekt:


Na sam koniec mogę dodać że w ten sam sposób za pomocą specjalnych przekaźników można sterować np: oświetleniem, bramą garażową.

czwartek, 10 kwietnia 2014

Podnoszące poziom szczęścia zakupy:)

W  tym poście przedstawię wam parę przydatnych elementów z dziedziny elektroniki które przydadzą się wam w dalszej pracy z RPI lub arduino.

1. przewód IDC 26-pin


 2. moduł protoPi do płytki stykowej. (jak wiadomo piny w RPI nie mają ochrony, (no chyba że jest założona obudowa) i podczas podłączania przewodów można niechcący zrobić zwarcie i usmażyć malinkę).



3. płytka stykowa (jak widać na zdjęciu posiada paski czerwony i niebieski oznaczające polaryzację zasilania)


4. Rezystory (opornik) jak sama nazwa wskazuje stawią opór i nadmiar energii zamienia w ciepło.(najlepiej o różnych parametrach)
Po więcej informacji odsyłam do: Opornik



 5. Cyfrowy termometr (czujnik cyfrowy) wyposażony w interfejs komunikacyjny 1-wire.


6. Dioda IR inaczej zwana nadajnik podczerwieni.


 7. Tranzystor NPN (bipolarny)


8. N-MOSFET (tranzystor polowy) MOSFET


9. Odbiornik IR (odbiornik podczerwieni)


10. Potencjometr obrotowy 10k


11. Buzzer z generatorem tonu ciągłego zasilany napięciem 5v.


12. Rejestr przesuwny Rejestr_przesuwny


13. Ekspander wyprowadzeń mikro kontrolera (pozwala zwiększyć ilość pinów cyfrowych (do 8))
 jak widać na obrazku poniżej (schemat podłączenia pod arduino) z jednego pinu cyfrowego robimy osiem kolejnych ( zielone wolne linie na płytce stykowej)
Przykładowy program (sprawdza czy został wciśnięty przycisk i jeżeli tak to zapala diodę LED)
#include <PCF8574.h>
#include <Wire.h>

// Definicje numerow pinow ukladu dla nazw
#define LED 4
#define BUTTON 3

// stworzenie obiektu ukladu
PCF8574 expander;

void setup()
{
  // ustalenie adresu ukladu
  expander.begin(0x20);
  // ustalenie pinu LED (4) jako wyjscia
  expander.pinMode(LED, OUTPUT);
  // ustalenie pinu BUTTON (3) jako wejscia
  expander.pinMode(BUTTON, INPUT);
  // ustawienie pinu BUTTON domyslnie w stanie wysokim
  expander.pullUp(BUTTON);
}

void loop()
{
  // sprawdzanie czy na pinie BUTTON jest stan niski
  if (expander.digitalRead(BUTTON) == LOW)
  {
    // jesli tak to zapala diode LED
    expander.digitalWrite(LED, LOW);
  }
  
  else
  {
    // jesli nie to wylacza
    expander.digitalWrite(LED, HIGH);
  }
}
(źródło: http://technovade.pl/produkty/pcf8574p-ekspander-wyprowadze%C5%84-mikrokontrolera )


14. Dioda RGB (dioda świecąca różnymi kolorami)


15. Foto rezystor (działa podobnie jak opornik z tym że rezystancja zależy od natężenia światła; gdy oświetlimy foto rezystor spada jego rezystancja a co za tym idzie zwiększa się przepływ prądu.)


16. Przycisk mono stabilny (switch)


17. Wyświetlacz 2x16 niebieski + goldpin ( wyświetlacz z dwoma liniami wyświetlania po 16 znaków)


18.  ATmega 328P-PU z bootloaderem Arduino (mikro kontroler AVR)


19. Mikro kontroler AVR ATmega88PA-PU


20. Złącze ARK4 to płytki stykowej (pozwala na podłączenie przewodów do płytki stykowej za pomocą złącz śrubowych.)


21. Wtyk IDC 26 pin (patrz punkt 1) pozwala podłączyć taśmę IDC bezpośrednio do płytki stykowej


22. Programator AVR USBasp pozwala programować mikro kontrolery AVR (patrz punkt 18) przez gniazdo USB komputera.


23. Miernik uniwersalny (na zdjęciu model UNI-T UT33B) inaczej zwany multimetrem pozwala na pomiar napięcia stałego, zmiennego, natężenia prądu stałego, rezystancji (oporności).

24. Różnego rodzaju zworki i przewody do płytek stykowych
 25. Diody LED

wszystkie wyżej wymienione elementy zakupiłem w sklepie internetowym http://botland.com.pl/