cze 5, 2013 - Shield    Komentowanie nie jest możliwe

Realy shield – 4 przekaźniki sterowane przez I2C

Relay Shield to zestaw do samodzielnego montażu (zlutowania).

Są to 4 przekaźniki sterowane przez magistralę I2C. Przekaźniki mogą sterować prądem do 10A przy 230V – nadają się do włączania i wyłączania urządzeń elektrycznych.

original[1]

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:

original-1[1]

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:

relay-switch[1]

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ę:

relay-zagiecie[1]

Po przylutowaniu czas na pierwszy układ scalony – PCF8574:

relay-pcf[1]

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. Lutując następny układ scalony (ULN2003 – Układ zawierający 7 par tranzystorów w układzie darlingtona, wspólny emiter. Nadaje się do sterowania silnikami lub przekaźnikami.) 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.

goldpin-ciecie[1]

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.

RELAY SHIELD – 4 PRZEKAŹNIKI STEROWANE PRZEZ I2C

Sercem modułu jest PCF8574 – układ scalony będący rozszerzeniem cyfrowych wejść I/O przez magistralę I2C. Dodatkowe wyjścia oferowane przez PCF8574 sterują przekaźnikami. Na shieldzie znajdują się dwie zworki, dzięki którym możemy ustawić adres układu PCF na magistrali I2C. Dzięki temu do Arduino bez problemu można podłączyć nawet takie 4 shieldy dające w sumie 16 sterowanych urządzeń.

Shield do poprawnej pracy wykorzystuje z Arduino tylko masę, zasilanie 12V, 5V oraz piny A4 i A5, także można zrezygnować z wlutowania przelotek i podłączyć w odpowiednie miejsce kable. Dzięki temu możliwe jest wykorzystanie tego shielda z dowolnym mikrokontrolerem wspierającym I2C.

UWAGA! Zastosowane przekaźniki pracują na 12V, czyli do pracy potrzebne jest napięcie 12V. Napięcie to jest brane z pinu Vin na Arduino – jeżeli zasilimy Arduino 12V wówczas będzie działać. W zależności od zasilacza może działać również na 9V ale jest to trochę za niskie napięcie (wg karty katologowej ten model przekaźnika załącza się od 9.6V).

Arduino Mega i Leonardo

Arduino Mega i Leonardo ma I2C w innym miejscu niż UNO, a shield nie jest w wersji R3, więc nie korzysta z wyprowadzania I2C wspólnego dla obu modeli.

Na szczęście jest w miarę łatwy sposób na obejście tego problemu. Nóżki shielda odpowiadające za I2C (A4 i A5) należy lekko odgiąć do wewnątrz, tak aby nie trafiły do właściwych gniazd. Potem podłączyć wyprowadzenie I2C z Mega D20 (SDA) i D21 (SCL) (Leonardo – SDA D2, SCL D3) do odpowiednich gniazd w shieldzie za pomocą przewodów.

ALTERNATYWA:
Alternatywą może być zastosowanie modułu przekaźnika, który do zasilania potrzebuje tylko 5V, nie trzeba kombinować z zasilaniem 12V, co ułatwia użycie, zwłaszcza gdy chcesz też podłączyć Ethernet Shield, który powinien być zasilany napięciem 9V.

Przykładowy program wykorzystujący shielda jest w zakładce Pliki. Poprawny adres dla shieldów wyposażonych w układ PCF8524P to B0100000 (przy zworkach A0 i A1 ustawionych na 0).

UWAGA:
Gdy sterujesz prądem o napięciu 230V zachowaj szczególną ostrożność – niewłaściwe obchodzenie się z nim może zagrażać życiu i zdrowiu oraz skutkować zniszczeniem przyłączanych urządzeń.

Biblioteka do obsługi shielda
W sekcji pliki jest biblioteka przeznaczona do Arduino IDE 1.0 (arduino-relay-1.rar)

Przykłady zastosowań


Zobacz na blogu Starter Kity przykłady wykorzystania tego shielda.

BŁĄD W PŁYTCE DRUKOWANEJ

Shield w wersji 1.0 ma błąd w schemacie, ( obecnie sprzedajemy shield w wersji 1.1 który ma ten błąd poprawiony!) który może być trudny do zlokalizowania. Otóż nóżka A2 układu scalonego PCF8574 nie jest podłączona ani do masy ani do +5V. Przez to może w losowych momentach zmieniać swój stan. Zmienia się wówczas adres układu na magistrali I2C, przez co całość przestaje działać. Problem jest losowy i może powodować spore problemy. Jako rozwiązanie wystarczy albo zewrzeć kabelkiem pin do masy lub +5V i wówczas adres urządzenia zostanie ustalony.

Przykład można zobaczyć na zdjęciu podlinkowanym tutaj:

ard-relay-fix[1]

Drugą opcją jest zewrzeć większą ilością cyny A2 z A1. Wówczas wybierając zworką wartość dla A1 zostanie on też wpisana w A2.

Pozostaje przetestować całość:

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 A2 na 1 resztę na 0 to mamy adres B0100001.

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:

//znaczenie bitow xxxx210 - 2 A2, 1 A1, 0 A0
#define expander1 B0100000 //A1 = 0, A0 =0
#define expander2 B0100001 //A1 = 0, A0 =1
#define expander3 B0100010 //A1 = 1 A0 =0

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.

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).

LINKI:    01   02

Comments are closed.