Kod Ara

ESP32 Eğitimi 33/55 - SunFounder'ın ESP32 IoT Öğrenme kitini kullanarak Dijital Zar

ESP32 Eğitimi 33/55 - SunFounder'ın ESP32 IoT Öğrenme kitini kullanarak Dijital Zar

Bu eğitimde, SunFounder'ın IoT öğrenme kitinden yedi segmentli bir ekran ve ESP32 kullanarak dijital bir zar oluşturacağız. Proje, bir düğmeye basarak 1'den 6'ya kadar sayılar üreten sanal bir zar atmanıza olanak tanıyacak. Bu, ESP32'nin yeteneklerini keşfederken ekranlar ve düğmelerle arayüz oluşturmayı öğrenmenin harika bir yoludur. Daha fazla netlik için videoyu (videoda 0:00'da) kontrol ettiğinizden emin olun.

ESP32-33_digital-dice-main

Donanım Açıklaması

Bu projenin ana bileşenleri ESP32 mikrodenetleyicisi, bir 74HC595 kaydırma yazmacı, yedi segmentli bir ekran ve bir basma düğmesidir. ESP32, Wi-Fi ve Bluetooth'u entegre eden güçlü bir mikrodenetleyicidir ve IoT uygulamaları için uygundur. 74HC595 kaydırma yazmacı, yedi segmentli ekranı her segmenti doğrudan bağlamaktan daha az pin kullanarak kontrol etmemizi sağlar.

Yedi segmentli ekran sayıları gösterir ve kaydırma yazmacından veri gönderilerek kontrol edilir. Basma düğmesi, görüntülenecek rastgele bir sayı üreterek zar atışını tetiklemek için kullanılır. Düğmeye basıldığında, ESP32 üzerindeki 13 numaralı pine bağlanır; bu pin, basılmadığında yüksek durumda tutmak için dahili bir çekme yukarı direncine sahiptir.

Veri Sayfası Detayları

Üretici Texas Instruments
Parça numarası 74HC595
Mantık/IO voltajı 2 V ila 6 V
Besleme voltajı 4.5 V ila 5.5 V
Çıkış akımı (kanal başına) 6 mA maks.
Tepe akımı (kanal başına) 35 mA maks.
PWM frekans rehberi Uygulanamaz
Giriş mantık eşikleri VIH ≥ 2 V, VIL ≤ 0.8 V
Voltaj düşümü / RDS(on) / doyum 0.5 V maks.
Termal sınırlar 150 °C
Paket DIP-16
Notlar / varyantlar Dijital ekranlarda yaygın olarak kullanılır

 

  • Güvenilir çalışma için uygun voltaj seviyelerini (4.5 V ila 5.5 V) sağlayın.
  • Kaydırma yazmacına zarar vermemek için çıkış akımını sınırlayın.
  • Voltajı dengelemek için güç pinlerinin yakınına dekuplaj kapasitörleri kullanın.
  • Sayıların yanlış gösterilmesini önlemek için yedi segmentli ekranı doğru bağlayın.
  • Beklenmeyen davranışlara yol açabilecek gevşek bağlantılar için kablolamayı kontrol edin.

Kablolama Talimatları

ESP32-33_digital-dice-wiring

Dijital zarı kablolamak için güç bağlantılarını kurarak başlayın. Breadboard'unuzdaki toprağı (mavi hat) ESP32 üzerindeki toprak pinine bağlayın ve tüm toprak noktalarının birbirine bağlı olduğundan emin olun. Ardından, ESP32'den bir 3.3V pinini breadboard üzerindeki güç rayına (kırmızı hat) bağlayın.

ESP32-33_digital-dice-schematic

74HC595 kaydırma yazmacı için, pin 1'in 3.3V rayına ve pin 8'in toprağa bağlı olduğundan emin olun. Veri çıkış pinini (DS) ESP32 üzerindeki pin 25'e, kaydırma saati pinini (SHCP) pin 26'ya ve depolama saati pinini (STCP) pin 27'ye bağlayın. Basma düğmesi, ESP32 üzerindeki pin 13 ile toprak arasına bağlanmalıdır; böylece basıldığında pini düşük duruma çeker.

Kod Örnekleri ve Açıklama

Kodda, önce kaydırma yazmacı ve düğme için kullanılan pinleri tanımlarız. Düğme pini buttonPin olarak tanımlanır ve ESP32 üzerindeki pin 13'e ayarlanır. datArray veri dizisi, yedi segmentli ekran için 0-9 sayılarının ikili gösterimlerini içerir.


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

setup() fonksiyonunda, düğme pinini giriş moduna ve kaydırma yazmacı pinlerini çıkış moduna ayarlarız. Bu, pinleri düğmeden giriş okumak ve ekrana veri göndermek için hazırlar.


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

Programın ana mantığı loop() fonksiyonunda bulunur. Düğmeye basılıp basılmadığını kontrol eder, rastgele bir sayı üretir ve sayıyı yedi segmentli ekranda göstermek için show_number() fonksiyonunu çağırır.


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

show_number() fonksiyonu, veri dizisinden uygun değeri kaydırma yazmacına gönderir; bu da üretilen sayıyı göstermek için ekranın segmentlerini kontrol eder. Bu fonksiyon, düğmeye basıldığında görsel geri bildirim için çok önemlidir.

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

Gösterim / Ne Beklemeli

Kurulum tamamlandığında ve kod yüklendiğinde, butona basmak 1 ile 6 arasında rastgele bir sayı üretecek ve bu sayı yedi segmentli ekranda görüntülenecektir. Her şey doğru şekilde bağlandıysa, ekran butona her basıldığında bir sayı göstermelidir. Yüzen girişlere dikkat edin; düzensiz davranışları önlemek için butonun toprağa düzgün şekilde bağlandığından emin olun (videoda 1:30'da).

Video Zaman Damgaları

  • 00:00 Başlangıç
  • 1:48 Proje tanıtımı
  • 3:40 Dijital Zar için Kablolama Açıklandı
  • 13:16 Dijital Zar için Arduino Kodu açıklandı
  • 19:19 Arduino IDE'de ESP32 Kartı ve COM portu seçimi
  • 21:00 Dijital Zar gösterimi
  • 22:15 Arduino Kodunun Düzeltilmesi

Görseller

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
Dil: 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);
}

Kaynaklar ve referanslar

Dosyalar📁

Dosya mevcut değil.