Čas a teplota na oled displeji
Tento projekt slouží k měření teploty, tlaku a času a k jejich zobrazení na OLED displeji. Současně data vypisuje na sériovou linku.
Projekt od našeho čtenáře Jakuba J. - Arduino ako I2C A/D prevodník:
Samotné Arduino obsahuje 8 kanálový 10 bitový (0-1023) A/D prevodník. Problém nastáva, keď potrebujeme merať viac analógových veličín. Môžeme použiť 16 kanálový analógový multiplexer CD74HC4067, ale tento potrebuje celkom 1 analógový a 4 digitálne piny na Arduine, čo môže byť problém.
K Arduinu tiež môžeme pripojiť neobmedzené množstvo zariadení cez zbernicu I2C. Ako prevodníky môžeme použiť aj 4 kanálový A/D prevodník pre I2C PCF8591, ktorý má ale relatívne nízke rozlíšenie – 8 bitov (0-255), čo môže byť v niektorých prípadoch nepoužiteľné.
Preto sa naskytá toto zaujímavé úsporné riešenie: Ako A/D prevodník použijeme ďalšie Arduino (napríklad malé Nano), komunikujúce s hlavným cez I2C. Po prepojení cez I2C nám zostane ešte 6 voľných analógových pinov, a všetky digitálne. V prípade takéhoto zapojenia môžeme používať až 3 multiplexery CD74HC4067 na každom ďalšom Arduine, čo rozširuje počet analógových pinov až na 48 pre každé ďalšie Arduino.
Zapojenie je jednoduché, obe Arduiná pripojíme k napájaniu, a navzájom prepojíme piny GND, A4 a A5 (pre I2C komunikáciu).
V programoch nie je použitý multiplexer, iba fotorezistor na pine A0.
V programe pre hlavné Arduino – master budeme posielať Arduinu Nano čísla vstupov, z ktorých nám má poslať hodnotu.
//master #include <Wire.h> const int pin = A0; void setup() { Wire.begin(); //spustenie komunikacie I2C Serial.begin(9600); } void loop() { Wire.beginTransmission(4); //spustenie prenosu so zariadenim 4 Wire.write(pin); //odoslanie cisla pinu, z ktoreho chceme citat delay(10); int x = Wire.read(); Serial.print("Namerana analogova hodnota: "); Serial.println(x); Wire.endTransmission(); //ukoncenie prenosu delay(5000); }
V programe pre Arduio slave najprv určíme adresu, pod ktorou bude komunikovať a potom už len čaká na číslo pinu, z ktorého hodnotu má poslať späť.
//prevodnik - slave #include <Wire.h> void setup() { Wire.begin(4); //spustenie I2C komunikacie ako zariadenie 4 } void loop() { Wire.onReceive(prijate); //pri prijate } void prijate(int howMany) { while (1 < Wire.available()) { //citanie dat int pin = Wire.read(); //prijatie cisla analogoveho pinu int x = analogRead(pin); //precitanie hodnoty Wire.write(x); //poslanie analogovej hodnoty } }
Knižnica Wire.h je obsiahnutá v Arduino IDE.
Tento projekt slouží k měření teploty, tlaku a času a k jejich zobrazení na OLED displeji. Současně data vypisuje na sériovou linku.
Kamarád mi poprosil o pomoc s tím že v současnosti potřebuje v jednom projektu ovládat čtyři reléové moduly, kdy jeden obsahuje šestnáct relátek které zakoupil v [1] a již má hotovou část zapojení přípravku, s tím že časem by chtěl ovládání z PC „po otestování“, ovládat diody pomocí tabletu nebo chytrého telefonu. Na tento počet ovládání relé je potřeba 64 ovládacích pinů, což ani ARDUINO MEGA 2560 s potřebou dalších vstupů které budou potřeba není možné použít. Po návrzích s posuvnými registry kterých by bylo potřeba osm kusů a složitosti zapojení mi napadlo použít pásek NEOPIXEL s RGB led diodami kdy na ovládání stačí jeden výstup z ARDUINA. Tak že pro pokusy co a jak půjde použít, jsem použil modul relátek osazený dvěma relátky, modul s MOSFET tranzistorem, Neopixel pásek s osmi RGB led diodami WS2812B, fototranzistor GL5528 a bluetooth JDY-33 pro komunikaci s tabletem chytrým telefonem vše zakoupené v [1]. Napsané programy jsou celkem dva jeden pouze pro ovládání Neopixel s osmi RGB led diodami, druhý pak umožňuje ovládat maximálně 255 RGB led použitých v Neopixel pásku. Oba programy umožňují ovládat libovolnou RGB diodu nebo více RGB led diod na Neopixel pásku včetně barev a dají se upravit dle potřeby. Přípravek může posloužit při vlastních pokusech s RGB LED Neopixel pásky a zároveň doplňuje články v [2]. Ovládání RGB diod je zde řešeno s ARDUINO NANO je možné použít i ARDUINO UNO. Programové ovládání RGB led diod na Neopixel pásku je dle požadavků kamaráda.