blog.ijacek007.cz

Blog o všem trochu jinak.

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.


obrázek zapojení desky ESP32 s oled displejem

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.


obrázek nastavení desky v arduino

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í.


obrázek test zobrazení

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ů.


obrázek testtovací zapojení

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.


obrázek finální instalace

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++;
}


obrázek schéma zapojení

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

Jak pomocí arduina přeprogramovat Wi-Fi relátko

Arduino jako digitální záznamník teploty


Štítky článku elektronika | skutecnost | zajimavosti |
Autor Ijacek.007 16.06.2018 Opravil(a) Iwíček zobrazeno 378x
Předchozí článek Jak pomocí Arduina přeprogramovat Wi-Fi relátko Sonoff basic
Měření teploty a vlhkosti ve fóliovníku pomocí desky NODEMCU s čipem ESP8266 Další článek


gravatar

Vložit komentář

Nick *:
WWW:
Email * (nezobrazuje se ):
Gravatar:
Pamatuj si mě:
Komentář článku *:
Opiš následující text: *

* - vyžadované údaje. RSS kanál s komentáři

Přihlášení



Audioknihy

Jsme milovníci audio knížek, kterých aktuálně máme zakoupených 118. Poslech všech dohromady zabral přes 1747 hodin.

Z tohoto množství jsme si již stihli poslechnout téměř 37% tedy 44 audioknih.

Aktuálně poslouchaná audioknihakniha je Letopisy Narnie 1-7 - komplet

Poslední hodnocenou audioknihou je Grey .

Nejlépe hodnocenou audioknihou je Zaklínač I. Poslední přání - komplet .

Reklama