Dnes by som rád predstavil projekt, ktorý som realizoval v dvoch prevedeniach. Projekt využíva 12 posuvných registrov 74HC595 a 96 LED diód, dosku Arduino Uno s Ethernet shieldom Wiznet W5100. Ku každému posuvnému registru je pripojených 8 LED diód. Prestredníctvom LED diód sú reprezentované čísla 0-9. Každý posuvný register je vybavený 8 výstupnými vývodmi.
Každé 4 posuvné registre 74HC595 tvoria logický celok - displej pre výpis 4-ciferného čísla. Celkovo sú teda v projekte 3 logické displeje tvorené 12-timi posuvnými registrami. Implementácie sú kompatibilné pre Arduino dosky Nano, Mega, Uno a pre Ethernet shieldy a moduly z rodiny Wiznet, konkrétne modely W5100 a W5500 (s využitím Ethernet2 knižnice).
Realizované implementácie v projekte s Arduinom:
- Webserver - HTTP server bežiaci priamo na Arduine, umožňuje interpretovať HTML kód
- WebClient - Klient schopný vykonať HTTP požiadavku na vzdialený server, odoslať / prevziať dáta
Webserver:
- Poskytuje HTML webovú stránku s formulárom, prostredníctvom ktorého je možné zadať 3 štvormiestne čísla.
- Dáta sa po odoslaní formulára spracujú a uložia sa do EEPROM pamäte, používateľ je informovaný o spracovaní dát samostatnou podstránkou.
- Po uložení dát je používateľ presmerovaný späť na formulár. EEPROM pamäť je energeticky nezávislá, dáta sú prístupné aj po obnovení napájania, ale aj reštarte dosky.
- Všetky čísla sú následne reprezentované na troch displejoch tvorených 12-timi posuvnými registrami 74HC595.
WebClient:
- Komunikácia s webserverom prebieha každých 5 sekúnd po HTTP protokole.
- Na webserveri beží PHP webaplikácia, ktorá umožňuje prostredníctvom formulára zadať 3 štvormiestne čísla.
- Dáta z formulára sú uložené v MySQL databáze.
- Arduino požiadavkou načítava dáta z tejto databázy prostredníctvom dopytu na server.
- Spracované dáta Arduino rozparsuje, následne vykreslí prostredníctvom posuvných registrov 74HC595.
- Dáta sú uložené aj do EEPROM pamäte Arduina, využívajú sa v prípade, že vypadne spojenie s webserverom / pri reštarte Arduino dosky sú použité pre prvotné vykreslenie dát na posuvné registre.
- Dáta sa v EEPROM prepisujú až pri zmene dát, šetria sa EEPROM bunky pred zbytočnými prepismi.
Kaskádové zapojenie pre posuvné registre 74HC595 (možno rozšíriť o x ďalších) - Export z TinkerCAD-u:
Screenshot z prevedenia Arduina ako Webservera - odoslanie dát, spracovanie, presmerovanie:
Zo schémy je zrejmé, že na ovládanie posuvný registrov sa využívajú iba 3 dátové vodiče:
- Dátový vývod - (SER na 74HC595)
- Hodinový vývod - (SRCLK na 74HC595)
- Latch (klopný) vývod - (RCLK na 74HC595)
Posuvné registre je možné kombinovať do kaskády, pričom je možné ovládať posuvnými registrami aj iné periférie - napríklad relé pre spínanie výkonových prvkov. Jedným dátovým vývodom je možné ovládať aj 500 samostatných relé (s dostatočným počtom shift registrov a napájaním).
Pri ovládaní výstupov registrov je možné modifikovať aj byte order na najvýznamenší bit - MSB FIRST, alebo na LSB - najmenej významený bit. Vo výsledku to invertuje výstupy. V jednom prípade je rozsvietených napríklad 7 diód, v druhom prípade 1 dióda v závisloti od vstupu a byte order.
Obe implementácie využívajú EEPROM pamäť, ktorá dokáže uchovať dáta aj po výpadku napájania, alebo po reštarte dosky. Druhým využitím tejto pamäte je aj možnosť reprezentovať posledné známe dáta v prípade, že nie je možná komunikácia s webserverom (chyba konektivity, servera).
Pamäť je limitovaná na 10-tisíc až 100-tisíc prepisov. Implementácie sú navrhnuté pre čo najmenšiu záťaž pre pamät. Dáta sa prepíšu až pri ich zmene. V prípade načítania rovnakých dát z webservera / klienta sa neprepisujú v EEPROM pamäti.
Programovú implementáciu pre WebClient-a je možné vyskúšať zdarma na adrese:
http://arduino.clanweb.eu/register-74hc595.php
Arduino komunikuje s webovým rozhraním v ktorom je možné modifikovať 3 štvorciferné čísla: http://arduino.clanweb.eu/led/