V dnešním článku vám představím destičku ESP32 osazenou malým oled displejem, kterou jsem použil na stavbu počítadla metrů odvinutého materiálu.
Původně jsem desku ESP32 s displejem objednal z eBaye kvůli jinému projektu, k tomu se vrátím, jakmile dorazí další kousek. U této desky mě oslovila nenáročnost na zprovoznění a v základu již připojený displej, který stačí ošetřit programem a můžete jej využívat. Díky tomu, že je displej k desce přilepen, odpadá drátování a fixace u jednoduchých projektů.
Jak jsem psal o nenáročném zprovoznění desky, se kterým jsem počítal, tak ono to až tak nenáročné není, což jsem zjistil, jakmile mi deska dorazila domů. Prostředí Arduina tuto desku totiž nepodporuje a je nutné pro ni stáhnout speciální repositář, pomocí kterého lze nahrát vlastní program. Vzhledem k tomu, že jsem s tím trochu bojoval a nejde o jednoduchý import několika knihoven, odkáži Vás přímo na návod krok za krokem na webu github.com.
Jakmile nahrajete ty správné soubory, můžete již desku jednoduše používat. Díky micro USB konektoru se deska dá jednoduše napájet i programovat. Dost ale teorie a pojďme se podívat na jednoduchý příklad využití.
Dostal jsem dotaz, zda bych uměl sestrojit „přístroj“ na měření odvinutého materiálu ze stroje. Princip fungování je naprosto jednoduchý. Program počítá pulzy otočení válce, přes který se materiál odvíjí. Co pulz, to jedna otáčka, která se rovná počtu cm válce. V praxi je tedy počet otočení * délka = celkový počet metrů.
Aby nedocházelo k mechanickému poškození, rozhodl jsem se, že pro pulzy využiji infračervený modul sledování bílé čáry TCRT5000. Tento modul dokáže reagovat na změnu podkladu a tím sepnout nebo vypnout výstupní pin. Také obsahuje trimer, pomocí kterého lze dle dokumentace seštelovat vzdálenost. Výhodou je také napájení 3,3V nebo 5V. Navíc je na destičce led dioda, která hned prozradí, zda je modul sepnutý nebo ne. Jako malý bonus už je příprava na šroubky, která usnadní jednoduché připevnění modulu na místo.
Dále jsem obvod doplnil o jedno tlačítko, pomocí kterého lze počítadlo jednoduše vynulovat. Abych ošetřil náhodné vynulování obsluhou stroje, je nutné tlačítko namačkat 5×, kdy se na spodní části displeje pohybuje kurzor, jakmile dorazí úplně vpravo, počítadlo se vynuluje. Pro ověření, zda celé počítadlo funguje tak, jak má, jsem vše připravil na testování na stroji. Ukázalo se, že ultrazvukový modul funguje skvěle a signál je přesný. Celý systém tedy zbývalo nainstalovat do průhledné plastové krabičky a nainstalovat na své místo. Testovací tlačítko vystřídalo tlačítko s krásným modrým podsvícením, aby bylo z dálky vidět, že je přístroj zapojen. Pro fixaci destičky v instalační krabičce jsem použil oboustrannou lepicí pásku.
Zdrojový kód počítadla
#include <WiFi.h>
#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
const char* ssid = "";
const char* password = "";
// Initialize the OLED display using Wire library
SSD1306 display(0x3c, 5,4);
// SH1106 display(0x3c, 5,4);
WiFiServer server(80);
#define SIGNAL 2
#define BUTTON 0
int jas = 255 ;
int start = 1;
int pocitadlo = 0;
int delka = 785 ; // mm
float vysledek = 0 ; // velké číslo
int signalstate = 1;
int lastsignalstate = 1;
int buttonState = 0; // aktuální stav tlačítka
int lastButtonState = 0; // předchozí stav tlačítka
int buttontouch = 0;
void setup()
{
WiFi.softAPdisconnect(true); // vypnutí wifi AP modu !
Serial.begin(115200);
pinMode(SIGNAL, INPUT); // nastavení na příjem signálu
pinMode(BUTTON, INPUT); // nastavení na příjem resetu počítadla
delay(10);
// We start by connecting to a WiFi network
Serial.println();
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_16);
}
void datazobraz(int a, float b) {
display.setFont(ArialMT_Plain_24);
display.setTextAlignment(TEXT_ALIGN_CENTER); // The coordinates define the center of the screen!
display.drawString(64,0,String(a)+"x");
display.drawString(64,30,String(b)+ "m");
}
void intro( ) {
display.setFont(ArialMT_Plain_24);
display.setTextAlignment(TEXT_ALIGN_CENTER); // The coordinates define the center of the screen!
display.drawString(64,0,"ijacek.007");
display.drawString(64,30,"© 2018");
}
int value = 0;
void loop(){
if (start == 1) {
// modul nastartoval zobraz intro
display.clear(); // clear the display
display.setTextAlignment(TEXT_ALIGN_RIGHT);
intro();
display.display();
delay(10000);
start = 0;
}
// přečteme signál ze snímače
signalstate = digitalRead(SIGNAL);
// porovnáme z předchozím stavem
if (signalstate != lastsignalstate) {
// if the state has changed, increment the counter
if (signalstate == HIGH) {
// spínano nulou pokud je na portu low
pocitadlo++;
Serial.println("on");
Serial.print("number of button pushes: ");
Serial.println(pocitadlo);
} else {
// if the current state is LOW then the button went from on to off:
Serial.println("off");
}
// Delay a little bit to avoid bouncing
delay(50);
}
// save the current state as the last state, for next time through the loop
lastsignalstate = signalstate;
// přečteme signál ze snímače
buttonState = digitalRead(BUTTON);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
// if the current state is HIGH then the button went from off to on:
Serial.println("off");
} else {
// if the current state is LOW then the button went from on to off:
buttontouch = buttontouch + 25;
Serial.println("tlačítko restart ");
}
// Delay a little bit to avoid bouncing
delay(50);
}
lastButtonState = buttonState;
vysledek = pocitadlo * delka;
Serial.println("vysledek v m");
Serial.println(vysledek/1000);
Serial.println("RESTART");
Serial.println(buttontouch);
Serial.println("STAV SIGNAL");
Serial.println(buttonState);
display.clear(); // clear the display
display.setTextAlignment(TEXT_ALIGN_RIGHT);
datazobraz(pocitadlo, (vysledek/1000));
display.drawString(buttontouch,40,"-");
display.display();
if (buttontouch > 124){
// pokud namačkáme více jak 4x tl restatt
pocitadlo = 0;
buttontouch = 0;
Serial.println("Restartuji počítadlo ");
}
// pro testovani automaticke pocitadlo
delay(50);
// pocitadlo++;
}
Na schématu zapojení je vidět jiná deska bohužel jsem knihovnu s displejem nenašel nicméně je jednoduše vidět jak jednoduchý celý obvod vlastně je. Vývojová deska s Wi-Fi čipem a Bluetooth modulem je také trochu plýtvání zdroji když zapojení nic s toho nevyužívá nicméně je to deska kterou jsem měl doma a tak jsem ji na obvod využil.
Mohlo by Vás zajímat
Postup jak zprovoznit knihovny pro ESP32 s OLED displejem
Vložit komentář
* - vyžadované údaje. RSS kanál s komentáři