Czip FTDI USB + łańcuch przesuwny 595. Umieść osobny tranzystor na każdym przekaźniku.
Więcej szczegółów:
Łańcuch 74hc595 jest opisany tutaj: http: //www.arduino .cc / pl / Tutorial / ShiftOut (Pokazane są tylko dwa, ale pojęcie można rozszerzyć do dowolnej liczby '595s.)
Aby napędzać łańcuch, potrzebne są trzy sygnały, dane, zatrzask i zegar.
Możesz użyć części FTDI w trybie „bitbang” do wygenerowania trzech sygnałów ze sterowania komputerem. Aby korzystać z FTDI w trybie bitbang, użyj libftdi (możesz również użyć oficjalnych sterowników FTDI, ale libftdi jest mniej kłopotliwe z mojego doświadczenia). FT232R ma wystarczającą liczbę pinów, aby to zrobić. FTDI sprzedaje przełamanie DIP, a Sparkfun sprzedaje też kilka wybić.
Zauważ, że będziesz potrzebować 128 2N2222 i 128 330 omów rezystorów. (możesz dostać tablice rezystorów, które mogą być łatwiejsze w zarządzaniu).
Narysowałem obwód zakładając zasilanie 12 V dla twoich przekaźników i nie mniej niż 24 omy cewek. Jeśli tak nie jest, możesz potrzebować mocniejszego tranzystora lub tranzystorów MOSFET na poziomie logicznym. 2222 jest mniej więcej tak tanim tranzystorem, jaki znajdziesz, a kiedy kupujesz 128 sztuk, to robi różnicę.
Nie pokazałem zaślepek obejścia ani dokładnego podłączenia 232R. Przeczytaj arkusz danych.
OK, właśnie zobaczyłem elektrozawór, którym próbujesz sterować. 2N2222 nie będzie działać. Musisz przełączyć 120VAC na cewkę. Możesz więc albo mieć mały przekaźnik (z 2N2222) do przełączania 120 V, albo użyć przekaźnika półprzewodnikowego, który może przyjmować wejścia logiczne i podłączyć go bezpośrednio do wyjścia '595.
OK, oto kod do sterowania tym za pomocą libftdi. Przypisania pinów w kodzie źródłowym. apt-get install libftdi-dev, a następnie skompiluj w ten sposób: "gcc test_595.c -lftdi"
/ * Ten program jest rozpowszechniany na licencji GPL, wersja 2 * / # include <stdio.h> #include <ftdi.h> # define HC595_CT (1) // liczba '595 chipsint main (int argc, char ** argv) {struct ftdi_context ftdic; int f, i;
unsigned char buf [2 * 8 * HC595_CT + 1]; // impuls zatrzaskowy, 8 * impulsów zegara HC595_CT if ((f = ftdi_init (&ftdic)) < 0) {fprintf (stderr, "ftdi_init failed \ n"); return f; } f = ftdi_usb_open (&ftdic, 0x0403, 0x6001); if (f < 0 && f! = -5) {fprintf (stderr, "nie można otworzyć urządzenia ftdi:% d (% s) \ n", f, ftdi_get_error_string (&ftdic)); wyjście (-1); } printf ("otwarcie ftdi powiodło się:% d \ n", f); // Przypisania kabli FTDI: #define BIT_DATA (1<<0) // 1: pomarańczowy. TXD, „dane” // 2: żółty. RXD, nieużywany # define BIT_CLOCK (1<<2) // 4: zielony. RTS, „zegar” #define BIT_LATCH (1<<3) // 8: brązowy. CTS, "latch" ftdi_enable_bitbang (&ftdic, BIT_DATA | BIT_CLOCK | BIT_LATCH); // ustaw zero * buf = 0; f = ftdi_write_data (&ftdic, buf, 1); bez znaku char * b = buf; dane bez znaku; stan bez znaku; if (argc == 2) {data = atof (argv [1]); } else {dane = 0x5a; } printf ("wysyłanie danych% d \ n", dane); for (i = 0; i<8; i ++) {state = (dane & (128L>>i))? BIT_DATA: 0; * b ++ = stan; stan | = BIT_CLOCK; * b ++ = stan; } * b ++ = BIT_LATCH; f = ftdi_write_data (&ftdic, buf, (b-buf)); ftdi_disable_bitbang (&ftdic); ftdi_usb_close (&ftdic); ftdi_deinit (&ftdic);}
A oto zdjęcie mojej konfiguracji testowej:
(użyłem Kabel TTL-232R-3V3.)