Caută cod

Tutorial ESP32 33/55 - Zar digital folosind kitul de învățare IoT SunFounder pentru ESP32

Tutorial ESP32 33/55 - Zar digital folosind kitul de învățare IoT SunFounder pentru ESP32

În acest tutorial, vom crea un zar digital folosind un afișaj cu șapte segmente și ESP32 din kitul de învățare IoT de la SunFounder. Proiectul vă va permite să aruncați un zar virtual, generând numere de la 1 la 6 la apăsarea unui buton. Aceasta este o modalitate excelentă de a explora capacitățile ESP32 în timp ce învățați despre interfațarea cu afișaje și butoane. Pentru claritate suplimentară, asigurați-vă că vizionați videoclipul (în videoclip la 0:00).

ESP32-33_digital-dice-main

Hardware Explicat

Componentele principale pentru acest proiect includ microcontrolerul ESP32, registrul de deplasare 74HC595, un afișaj cu șapte segmente și un buton. ESP32 este un microcontroler puternic care integrează Wi-Fi și Bluetooth, fiind potrivit pentru aplicații IoT. Registrul de deplasare 74HC595 ne permite să controlăm afișajul cu șapte segmente folosind mai puțini pini decât conectarea directă a fiecărui segment.

Afișajul cu șapte segmente afișează numere și este controlat prin trimiterea de date de la registrul de deplasare. Butonul este folosit pentru a declanșa aruncarea zarului, generând un număr aleatoriu care va fi afișat. Când este apăsat, butonul se conectează la pinul 13 al ESP32, care are un rezistor intern de pull-up pentru a-l menține într-o stare înaltă când nu este apăsat.

Detalii din Fișa Tehnică

Producător Texas Instruments
Număr de piesă 74HC595
Tensiune logică/IO 2 V până la 6 V
Tensiune de alimentare 4,5 V până la 5,5 V
Curent de ieșire (pe canal) 6 mA max
Curent de vârf (pe canal) 35 mA max
Ghid de frecvență PWM Nu se aplică
Praguri logice de intrare VIH ≥ 2 V, VIL ≤ 0,8 V
Cădere de tensiune / RDS(on) / saturație 0,5 V max
Limite termice 150 °C
Pachet DIP-16
Note / variante Folosit frecvent în afișaje digitale

 

  • Asigurați niveluri de tensiune adecvate (4,5 V până la 5,5 V) pentru o funcționare fiabilă.
  • Limitați curentul de ieșire pentru a evita deteriorarea registrului de deplasare.
  • Folosiți condensatoare de decuplare lângă pinii de alimentare pentru a stabiliza tensiunea.
  • Conectați corect afișajul cu șapte segmente pentru a evita reprezentarea greșită a numerelor.
  • Verificați cablurile pentru conexiuni slabe care pot duce la comportament neașteptat.

Instrucțiuni de Cablare

ESP32-33_digital-dice-wiring

Pentru a cabla zarul digital, începeți prin configurarea conexiunilor de alimentare. Conectați masa (linia albastră) de pe breadboard la pinul de masă al ESP32 și asigurați-vă că toate punctele de masă sunt interconectate. Apoi, conectați un pin de 3,3V de la ESP32 la linia de alimentare (linia roșie) de pe breadboard.

ESP32-33_digital-dice-schematic

Pentru registrul de deplasare 74HC595, asigurați-vă că pinul 1 este conectat la linia de 3,3V, iar pinul 8 la masă. Conectați pinul de ieșire a datelor (DS) la pinul 25 al ESP32, pinul de ceas de deplasare (SHCP) la pinul 26 și pinul de ceas de stocare (STCP) la pinul 27. Butonul trebuie conectat între pinul 13 al ESP32 și masă, permițându-i să tragă pinul la nivel jos când este apăsat.

Exemple de Cod & Explicații

În cod, definim mai întâi pinii folosiți pentru registrul de deplasare și buton. Pinul butonului este definit ca buttonPin și este setat la pinul 13 al ESP32. Matricea de date datArray conține reprezentările binare ale numerelor 0-9 pentru afișajul cu șapte segmente.


const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP 
const int DS = 25; //DS 
const int buttonPin = 13;
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

În funcția setup(), setăm pinul butonului în modul de intrare și pinii registrului de deplasare în modul de ieșire. Aceasta pregătește pinii pentru citirea intrării de la buton și pentru trimiterea datelor către afișaj.


void setup ()
{
  pinMode(buttonPin,INPUT); 
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}

Logica principală a programului se găsește în funcția loop(). Aceasta verifică dacă butonul este apăsat, generează un număr aleatoriu și apelează funcția show_number() pentru a afișa numărul pe afișajul cu șapte segmente.


void loop()
{
  if(digitalRead(buttonPin) == LOW)
  {
    int diceNumber = random(1, 7);
    show_number(diceNumber);
    delay(50);
  }
}

Funcția show_number() trimite valoarea corespunzătoare din matricea de date către registrul de deplasare, care controlează apoi segmentele afișajului pentru a arăta numărul generat. Această funcție este crucială pentru feedback-ul vizual când butonul este apăsat.

74HC595 LED Display: Seven-Segment Explained
74HC595 LED Display: Seven Segment explained

Demonstrație / Ce să Vă Așteptați

Când configurarea este finalizată și codul este încărcat, apăsarea butonului va genera un număr aleatoriu între 1 și 6, care va fi afișat pe afișajul cu șapte segmente. Dacă totul este conectat corect, afișajul ar trebui să arate un număr de fiecare dată când butonul este apăsat. Fiți atenți la intrările flotante; asigurați-vă că butonul este conectat corespunzător la masă pentru a evita comportamentul erratic (în video la 1:30).

Marcaje temporale video

  • 00:00 Start
  • 1:48 Introducerea proiectului
  • 3:40 Conexiunile pentru Zarul Digital explicate
  • 13:16 Codul Arduino pentru Zarul Digital explicat
  • 19:19 Selectarea plăcii ESP32 și a portului COM în Arduino IDE
  • 21:00 Demonstrația Zarului Digital
  • 22:15 Corectarea codului Arduino

Imagini

74HC595 LED Display: Seven-Segment Explained
74HC595 LED Display: Seven Segment explained
ESP32-33_digital-dice-wiring
ESP32-33_digital-dice-wiring
ESP32-33_digital-dice-main
ESP32-33_digital-dice-main
ESP32-33_digital-dice-schematic
ESP32-33_digital-dice-schematic
834-ESP32 Tutorial 33/55- Arduino code for digital dice
Limba: C++
// Define the pins used for the 74hc595 and button
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP 
const int DS = 25; //DS 
const int buttonPin = 13;

// Define an array of values to display numbers on a 7-segment display
int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int buttonState = false;

void setup ()
{
  // Set the button pin to input mode
  pinMode(buttonPin,INPUT); 

  //Set pins to 74hc595
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}

void loop()
{
  // Check if the button is pressed
  if(digitalRead(buttonPin) == LOW)
  {
    // Generate a random number between 1 and 6
    int diceNumber = random(1, 7);

     // Display the number on the 7-segment display
    show_number(diceNumber);

    // Delay for 50 milliseconds
    delay(50);
  }
}

// Function to display a number on a 7-segment display
void show_number(int num)
{
  // Ground ST_CP and hold low for as long as you are transmitting
  digitalWrite(STcp, LOW);

  // Send the data for the number to the shift register
  shiftOut(DS, SHcp, MSBFIRST, datArray[num]);

  // Pull the ST_CP to save the data
  digitalWrite(STcp, HIGH);
}

Resurse și referințe

Fișiere📁

Nu sunt disponibile fișiere.