Arduino relay shield – jak zmontować
Arduino relay shield jest w ofercie Nettigo już od pewnego czasu, jednak dotąd nie pojawił się na naszym blogu opis jak go wykorzystywać. Czas to zmienić :)
Zanim się go wykorzysta, najpierw trzeba go zmontować, gdyż sprzedawany jest jako zestaw do montażu. Oprócz płytki drukowanej (PCB) w opakowaniu znajduje się trochę różnych elementów:
I tak od góry, od lewej mamy 4 przekaźniki, komplet złączek przelotowych jakie zwykle w shieldach są używane (stacking headers), złącza do podłączania kabli (te niebieskie), 4 rezystory w wspólnej obudowie (tzw drabinka), dwa układy scalone w obudowach DIP 16 – PCF 8574 (8-mio portowe rozszerzenie wejść/wyjść cyfrowych dostępne przez I2C) oraz ULN2003 (zestaw 7 par tranzystorów w układzie Darlingtona), drabinka goldpinów, zworki oraz mikroprzełącznik.
Rozpoczynamy montaż od drobnych elementów. Mikroprzełącznik trudno wsadzić w złym kierunku ale trzeba uważać :) bo dla chcącego nic trudnego (jak to mówią – nic na siłę, weź większy młotek). Na następnym zdjęciu widać orientację przycisku na płytce:
Kolejnym elementem jest drabinka rezystorów. Ma ona zaznaczony jeden koniec rombem, który powinien znajdować się nad otworem oznaczonym krzyżykiem. Czas zacząć lutować. Przycisk po wciśnięciu będzie się trzymał sam, ale drabinka po odwróceniu płytki do lutowania będzie wypadać. Dlatego trzeba lekko zagiąć pierwszą i ostatnią nóżkę:
Po przylutowaniu czas na pierwszy układ scalony – PCF8574:
Ważna jest orientacja – nadruk kształtu układu PCF8574 na płytce (silkscreen) ma na jednym końcu półokrągłe wgłębienie. Na obudowie układu jest podobne wgłębienie – muszą być z tej samej strony. Próba wsadzenia układu może być najpierw lekko denerwująca – nóżki układów scalonych po wyjściu z fabryki są lekko rozchylone, przez co nie pasują do otworów. Rada jest dość prosta – lekko docisnąć jedną stroną o płaskie i twarde podłoże (np. blat biurka) i powtórzyć z drugiej strony:
Lutując następny układ scalony (ULN2003) powtarzamy całość pamiętając o właściwej orientacji układu na płytce (trzeba pamiętać, że wycięcie na obudowie powinno być z drugiej strony w porównaniu z PCF8574) . Następnie możemy zainstalować piny dla zworek ustawiających adres na magistrali I2C. Najpierw trzeba podzielić goldpin na dwa 3 pinowe. Najlepiej nadają się do tego szczypce boczne. Goldpin ciężko się rozcina na całej długości plastiku między pinami – zwykle powoduje to częściowe zmiażdżenie plastiku. Cięcie samym czubkiem, na długości do połowy daje najlepsze rezultaty:
Mając podzielonego goldpina należy go wlutować, najlepiej prosto :) Aby sobie to ułatwić ja użyłem złącza 6-cio pinowego, w które wsadziłem pociętego goldpina i tak przyłożyłem do płytki aby przylutować. Dzięki temu goldpiny zostały przylutowane równolegle. W tym wypadku nie ma to specjalnego znaczenia (zworki są zakładane na goldpiny w jednym kawałku) ale warto pamiętać o takiej metodzie jeżeli trzeba równo je wlutować. Oczywiście tzw. trzecia ręka jest nieodzowna do przytrzymania całości podczas lutowania.
Następnym elementem lutowanym są złącza do podłączania kabli doprowadzonych do przekaźników. Można użyć trzeciej ręki do przytrzymania podczas lutowania, albo powinno pomóc położenie na płaskiej powierzchni złączy, nałożenie płytki PCB dociśnięcie całości i można lutować.
Następnym elementem który zamocowałem były przekaźniki, ale wygodniejsze byłoby zostawić je na koniec, a najpierw przylutować złącza przelotowe do podłączenia do Arduino. Dlaczego? Bo przekaźniki są najwyższymi elementami i jeżeli dla uproszczenia całości chcemy lutować złącza na odwróconym shieldzie będą one opadać o 1-2 mm. Jako rezultat złącza (czarna część plastikowa) będzie unosić się te 1-2 mm nad powierzchnią shileda. Funkcjonalnie nie powinno to mieć wpływy (piny w przelotkach są długie), jednak nie wygląda to zbyt elegancko.
Lutowanie przekaźników jest względnie proste. Nie da się ich wsadzić z niewłaściwą orientacją, jedynie podczas zaginania ich nóżek (jeżeli korzystamy z trzeciej ręki) trzeba pamiętać, że te grubsze trudno zagiąć i jeżeli używamy czegoś ostrego (śrubokręt), to w razie ześlizgnięcia się, zarysować możemy płytkę. W większości przypadków pozostanie niegroźna rysa, ale w najgorszym razie możemy przerwać którąś z cieńszych ścieżek.
Lutując złącza/przelotki najlepiej zrobić to obracając shielda i skorzystać z Arduino aby zapewnić sobie równe i równoległe wlutowanie złącz:
Ponieważ w tym egzemplarzu najpierw przylutowałem przekaźniki, musiałem użyć kartonu aby podeprzeć same złącza. Dzięki temu przylutowane zostały równo tuż przy powierzchni płytki PCB. Pomarańczowe nóżki na Arduino to nic innego jak Sugru – przydatna rzecz :)
Uwaga błąd na płytce PCB!
Teraz ważna informacja, która wyszła na jaw podczas testów tego egzemplarza. Płytki PCB w obecnie sprzedawanej wersji zawierają błąd. Jedna z trzech nóżek adresowych układu PCF8574 (A2) pozostaje niepodłączona. Oznacza to, że w może losowo przyjmować wartość 0 lub 1 zmieniając w trakcie pracy adres urządzenia. Uniemożliwia to prawidłowe korzystanie z shielda, lub jest to utrudnione, bo przez dłuższy czas może on działać, by nagle przestać. Zmiany te są zupełnie losowe.
Na szczęście można to łatwo naprawić. Pierwszą metodą jest zmostkować za pomocą kabelka wiszącą nóżkę do masy lub +5V (ustawiając w ten sposób bit A2 odpowiednio na 0 lub 1):
Drugą metodą naprawy jest użycie cyny do połączenia A2 z A1. Dzięki temu prostemu zabiegowi A2 zawsze będzie miało wartość taką jaka zostanie ustawiona za pomocą zworki na A1.
Test płytki:
Pozostaje przetestować całość. Przekaźniki wg dokumentacji znalezionej w sieci mogą pracować od 9.5V, zalecane napięcie to 12V. Zasilanie jest do nich doprowadzone z pinu Vin – czyli po prostu są zasilane tym napięciem, które jest doprowadzone do gniazda zasilania Arduino. Zasilając Arduino 12V będziemy mieli przekaźniki zasilone jak należy.
Adres układu PCF8524 zależy od ustawienia zworek A0, A1 i A2:
//znaczenie bitow xxxx210 - 2 A2, 1 A1, 0 A0 #define expander B0100000
Po pierwsze zwrócić uwagę należy, że adres jest 7-mio bitowy. 8 bit adresu jest ustawiany przez bibliotekę Wire
automatyczne w zależności czy chcemy odczytać czy zapisać dane z/do układu.
Drugi bit adresu jest ustawiony na 1 a bity 5, 6 i 7 są odpowiednio równe wejściom A2, A1 i A0. Wejście A0 ustalamy albo na 0 lub 1 jeżeli korzystamy z kabelka mostkującego do masy lub +5V, lub kopiuje wartość A1 jeżeli wybierzmy naprawę błędu na płytce PCB poprzez połączenie cyną z sąsiednim pinem. Czyli jeżeli ustawimy A0 na 1 resztę na 0 to mamy adres B0100001
.
Następnie prosty program testowy, który będzie przełączał wszystkie wyjścia PCF z 0 na 1 i odwrotnie:
/* Test program for PCF8574 I2C I/O expander - Blinks all ports low then high. by Ford */ #include <Wire.h> //znaczenie bitow xxxx210 - 2 A2, 1 A1, 0 A0 #define expander B0100000 // Address with three address pins grounded. // Note that the R/W bit is not part of this address. void setup() { Wire.begin(); } void loop() { expanderWrite(B00000000); delay(5*1000); expanderWrite(B11111111); delay(5*1000); } void expanderWrite(byte _data ) { Wire.beginTransmission(expander); Wire.send(_data); Wire.endTransmission(); } byte expanderRead() { byte _data; Wire.requestFrom(expander, 1); if(Wire.available()) { _data = Wire.receive(); } return _data; }
Kod zaczerpnięty z przykładu na Arduino forum.
Po ustawieniu adresu expander
zgodnie z tym co na A2-A0, wgraniu szkicu i zasileniu całości 12V (może zadziałać na 9V, nie będzie działać na samym USB) powinniśmy słyszeć cykliczne przełączanie się cewek w przełącznikach. Po podpięciu multimetru do wejść powinny raz przewodzić a raz nie.
Tyle wstępu, wkrótce o trochę bardziej praktycznym zastosowaniu shieldu (przypominam – jeżeli próbujesz podłączyć do przekaźników urządzenia pracujace na 230V – uważaj).
pomylka: drabinka kondensatorow -> drabinka rezystorow
Faktycznie. Dzięki za zwrócenie uwagi – poprawione.
Ja mam jeszcze jedną małą uwagę – nie wiem czy chcieliście zareklamować szczypce z waszego sklepu, czy o co chodzi, ale ja tam zawsze goldpiny łamię w rękach – nic się nie miażdży jak szczypcami – nie trzeba kombinować – chwytam z obu stron i łamię na pół bez żadnego problemu;) No chyba ze Wy macie jakieś super mocne te goldpiny, ale zawsze myślałem, że wszystkie są identyczne;) Mówimy oczywiście o pojedynczych (jedno-rzędowych).
Czekam na kolejne wpisy! Pozdrawiam:)
Co do szczypcy – zwłaszcza te boczne mogę polecać :)
A łamanie goldpinów ręcznie – czasem zdarzało mi się złamać o jeden za dużo/za mało mimo, że o kant biurka czy czegoś opierałem. Jakoś łatwiej mi szczypcami.
a ten condensator 100nF zaznaczony na PCB a nie istniejący w zestawie?
Nie jestem autorem shielda, więc nie wiem jaka była intencja umieszczenia go na PCB – jest między 5V a masą. W sumie przy najbliższej okazji dopytam się…
Po co jest przycisk na płytce?
RESET Arduino – jak założysz shielda to ciężko nacisnąć przycisk pod spodem…
Z tego co wiem równolegle do cewki przekaźnika powinna być włączona dioda zabezpieczająca, aby zapobiec „odwrotnemu” napięciu przy zaniku prądu na cewce. Czy coś pełni rolę tej diody w tym układzie?
Dioda taka jest na wyjściu każdej pary tranzystorów w ULN2003A – datasheet w zakładce pliki i tam jest rozrysowany schemat http://nettigo.pl/product/ULN2003—7-par-tranzystorow-darlingtona-DIP16,uln2003a
Dzięki, teraz już wszystko gra. Świetne rozwiązanie, 1 pin obsłużył wszystkie przekaźniki.
Witam, mhh, ja potrzebuję połączyć 3 takie relayie bo potrzebuję 12 włączników, jak wtedy kod wie który jest który?
Nie mam teraz pod ręką żeby sprawdzić jak wygląda wersja v1.1, ale w wersji 1.0 z układu PCF8574 dwa wejścia adresowe były wyprowadzone na zworko A0 i A1, wyjście trzecie A2 to było to które trzeba było podłączyć do masy. Ustawiając zworki A0 i A1 można uzyskać kilka różnych kombinacji adresów, i tak w zależności od ustawień zworki kolejne płytki z przełącznikami będą adresowane przez:
A słyszałem że jest już wersja płytki bez błędu. (mam ver 1.1).
Sprawdzę, bo ostatnia dostawa została wymieszana ze starszymi egzemplarzami.
Pod koniec opisu jest blad bo nie a0 tylko a2 jest tym „zapomnianym” pinem.
@pooh
Nie bardzo widzę w którym miejscu. W opisie błędu na płytce PCB jest napisane że A2?
BTW – obecnie sprzedawane przez nas płytki mają już ten błąd poprawiony.
W tym fragmencie:
Drugi bit adresu jest ustawiony na 1 a bity 5, 6 i 7 są odpowiednio równe wejściom A2, A1 i A0. Wejście A0 ustalamy albo na 0 lub 1 jeżeli korzystamy z kabelka mostkującego do masy lub +5V, lub kopiuje wartość A1 jeżeli wybierzmy naprawę błędu na płytce PCB poprzez połączenie cyną z sąsiednim pinem. Czyli jeżeli ustawimy A0 na 1 resztę na 0 to mamy adres B0100001.