Jak nainstalovat integraci Drátek eInk do Home Assistantu
Průvodce instalací integrace Drátek eInk do Home Assistantu pomocí obchodu HACS.
Analogový multiplexer CD74HC4067 je velice šikovný integrovaný obvod, který umožňuje najednou připojit 16 vstupů, přepínat mezi nimi pomocí čtyř ovládacích pinů a vybraný vstup převést na jeden výstup. Tento analogový výstup pak můžeme načíst pomocí Arduina a ušetřit přitom 11 propojovacích vodičů. Neztrácíme přitom nijak na přesnosti a ani nejsme omezeni rychlostí čtení.
Pro propojení multiplexeru 4067 a Arduino desky je třeba propojit celkem 8 vodičů. Propojíme GND společně s EN a zemí, VCC s pinem +5V, S0 s pinem D4, S1 s pinem D5, S2 s pinem D6, S3 s pinem D7 a SIG s pinem A0. Na všechny datové piny a také analogový pin můžeme využít jiné volné, jen je zapotřebí tuto změnu provést také v programu. A co se týká pinu VCC, můžeme použít i +3V3, jen pak budeme muset při přepočtu na milivolty změnit konstantu z 5000 na 3300. A zároveň napětí připojené na pin VCC stanovuje horní hranici měřeného napětí, tedy analogovou hodnotu 1023.
Ukázkový kód obsahuje na svém začátku nastavení ovládacích pinů S0 až S3 a poté nastavení výstupního pinu SIG. V podprogramu setup provedeme nastavení ovládacích pinů na výstupní a poté ještě nastavíme komunikaci po sériové lince. V nekonečné smyčce loop vytvoříme pomocnou proměnnou pro načítání výsledků a poté vždy ve smyčce for načteme všech 16 hodnot pomocí podprogramu nactiKanal, které zároveň vytiskneme jako analogovou hodnotu a po přepočtu také jako napětí v milivoltech. Po vytištění hodnot ze všech měřících kanálů už následuje pouze pauza pro přehlednější výpis. Zmíněný podprogram nactiKanal obsahuje pomocné pole s ovládacími piny a také tabulku s kombinacemi pro všechny nastavitelné kanály. Pod těmito proměnnými se nachází opět for smyčka pro nastavení hodnot pro aktuální kanál a následné naměření analogové hodnoty z pinu SIG pro aktuálně měřený kanál. Tato naměřená hodnota je poté funkcí vrácena.
// Multiplexer 16 kanálů CD74HC4067
// nastavení ovládacích pinů S0-S3
int pinS0 = 4;
int pinS1 = 5;
int pinS2 = 6;
int pinS3 = 7;
// nastavení výstupního pinu SIG
int pinSIG = A0;
void setup(){
// nastavení ovládacích pinů jako výstupních
pinMode(pinS0, OUTPUT);
pinMode(pinS1, OUTPUT);
pinMode(pinS2, OUTPUT);
pinMode(pinS3, OUTPUT);
// komunikace po sériové lince rychlostí 9600 baud
Serial.begin(9600);
}
void loop(){
// pomocná proměnná pro načtení analogové hodnoty
int analogSIG;
// postupné načtení a vytištění informací ze všech 16
// kanálů, pro načtení je použita funkce nactiKanal
for(int i = 0; i < 16; i ++){
analogSIG = nactiKanal(i);
Serial.print("Analogova hodnota kanalu ");
Serial.print(i);
Serial.print(" je : ");
Serial.print(analogSIG);
Serial.print(", tj. ");
Serial.print(analogSIG*5000.0/1023.0);
Serial.println(" milivoltu.");
delay(50);
}
Serial.println();
// pauza pro přehlednější výpis
delay(2000);
}
int nactiKanal(int kanal){
// pomocné pole s ovládacími piny pro jejich nastavení
int ovladaciPiny[] = {pinS0, pinS1, pinS2, pinS3};
// tabulka všech možných kombinací ovládacích pinů
int kanaly[16][4]={
{0,0,0,0}, // kanál 0
{1,0,0,0}, // kanál 1
{0,1,0,0}, // kanál 2
{1,1,0,0}, // kanál 3
{0,0,1,0}, // kanál 4
{1,0,1,0}, // kanál 5
{0,1,1,0}, // kanál 6
{1,1,1,0}, // kanál 7
{0,0,0,1}, // kanál 8
{1,0,0,1}, // kanál 9
{0,1,0,1}, // kanál 10
{1,1,0,1}, // kanál 11
{0,0,1,1}, // kanál 12
{1,0,1,1}, // kanál 13
{0,1,1,1}, // kanál 14
{1,1,1,1} // kanál 15
};
// nastavení kombinace ovládacích pinů
// pomocí smyčky for
for(int i = 0; i < 4; i ++){
digitalWrite(ovladaciPiny[i], kanaly[kanal][i]);
}
// načtení analogové hodnoty z pinu SIG
int napetiSIG = analogRead(pinSIG);
// vrácení načtené hodnoty
return napetiSIG;
}
Po nahrání programu do Arduino desky s připojeným multiplexerem CD74HC4067 uvidíme například tento výpis, kde na pin C14 je připojeno napětí +5V a C15 připojena zem:
Analogova hodnota kanalu 0 je : 772, tj. 3773.22 milivoltu. Analogova hodnota kanalu 1 je : 740, tj. 3616.81 milivoltu. Analogova hodnota kanalu 2 je : 648, tj. 3167.16 milivoltu. Analogova hodnota kanalu 3 je : 618, tj. 3020.53 milivoltu. Analogova hodnota kanalu 4 je : 513, tj. 2507.33 milivoltu. Analogova hodnota kanalu 5 je : 458, tj. 2238.51 milivoltu. Analogova hodnota kanalu 6 je : 381, tj. 1862.17 milivoltu. Analogova hodnota kanalu 7 je : 371, tj. 1813.29 milivoltu. Analogova hodnota kanalu 8 je : 325, tj. 1588.47 milivoltu. Analogova hodnota kanalu 9 je : 314, tj. 1534.70 milivoltu. Analogova hodnota kanalu 10 je : 259, tj. 1265.88 milivoltu. Analogova hodnota kanalu 11 je : 214, tj. 1045.94 milivoltu. Analogova hodnota kanalu 12 je : 191, tj. 933.53 milivoltu. Analogova hodnota kanalu 13 je : 210, tj. 1026.39 milivoltu. Analogova hodnota kanalu 14 je : 1023, tj. 5000.00 milivoltu. Analogova hodnota kanalu 15 je : 0, tj. 0.00 milivoltu.
Analogový multiplexer CD74HC4067 je jednoduchý obvod, který může velmi dobře posloužit v zapojeních, kde potřebujeme načítat analogové či digitální hodnoty až z 16 zdrojů, ale nemáme k dispozici tolik vstupních pinů. Může se jednat například o větší množství připojených termočlánků, fotoodporů či třeba tlačítek na ovládací klávesnici.
Seznam použitých komponent:
http://dratek.cz/arduino/1223-arduino-analogovy-multiplexer-16-kanalu-cd74hc4067-1458246649.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
http://dratek.cz/arduino/1227-7-ks-mini-nepajive-pole-25-kontaktu-1458405292.html
http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1063-arduino-vodice-samec-samec-40-kusu.html
Průvodce instalací integrace Drátek eInk do Home Assistantu pomocí obchodu HACS.
Návod, jak jednoduše přidat a nastavit Drátek e-ink displej do Home Assistant