ค้นหาโค้ด

ESP32 บทเรียนที่ 10/55 - ตัวนับดิจิทัลโดยใช้จอแสดงผลเซเว่นเซกเมนต์ 74HC595 - ชุดเรียนรู้ IoT สำหรับ ESP32

ESP32 บทเรียนที่ 10/55 - ตัวนับดิจิทัลโดยใช้จอแสดงผลเซเว่นเซกเมนต์ 74HC595 - ชุดเรียนรู้ IoT สำหรับ ESP32

ในบทช่วยสอนนี้ เราจะสร้างตัวนับดิจิทัลโดยใช้จอแสดงผลเซเวนเซกเมนต์ที่ควบคุมโดยไมโครคอนโทรลเลอร์ ESP32 ตัวนับจะเพิ่มค่าจาก 0 ถึง 9 แล้วลดกลับไปที่ 0 ซึ่งให้ภาพที่ชัดเจนของกระบวนการนับ เราจะสำรวจวิธีการเปิดเซกเมนต์แต่ละส่วนและแสดงตัวอักษรบนจอแสดงผลเซเวนเซกเมนต์ด้วย

ESP32_Animte7Segment-segments

โปรเจกต์นี้ใช้ชิฟต์รีจิสเตอร์ 74HC595 เพื่อควบคุมจอแสดงผล ทำให้เราสามารถจัดการเซกเมนต์ได้อย่างมีประสิทธิภาพโดยไม่ต้องใช้พิน GPIO ของ ESP32 มากเกินไป โดยการส่งค่าไบนารีไปยังชิฟต์รีจิสเตอร์ เราสามารถทำให้เซกเมนต์ที่เกี่ยวข้องติดสว่างเพื่อแสดงตัวเลขและตัวอักษร เพื่อความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับกระบวนการนี้ คุณสามารถอ้างอิงวิดีโอ (ในวิดีโอที่ 03:15)

ESP32_Animte7Segment-letters

อธิบายฮาร์ดแวร์

ส่วนประกอบหลักของโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ ESP32 ชิฟต์รีจิสเตอร์ 74HC595 และจอแสดงผลเซเวนเซกเมนต์ ESP32 เป็นไมโครคอนโทรลเลอร์ที่ทรงพลังพร้อมความสามารถ Wi-Fi และ Bluetooth ในตัว ทำให้เหมาะสำหรับโปรเจกต์ IoT 74HC595 เป็นชิฟต์รีจิสเตอร์ที่ช่วยให้เราควบคุมเอาต์พุตหลายตัวโดยใช้พินอินพุตเพียงไม่กี่ตัว มันทำงานโดยรับข้อมูลอนุกรมและแปลงเป็นเอาต์พุตขนาน ซึ่งเหมาะสำหรับการขับจอแสดงผลเซเวนเซกเมนต์

จอแสดงผลเซเวนเซกเมนต์ประกอบด้วย LED แต่ละดวงเจ็ดดวงที่จัดเรียงเป็นรูปแบบเลขแปด แต่ละเซกเมนต์สามารถเปิดหรือปิดได้โดยการส่งค่าไบนารีที่เหมาะสมไปยังชิฟต์รีจิสเตอร์ ตัวอย่างเช่น เพื่อแสดงหมายเลข 0 เซกเมนต์ทั้งหมดยกเว้นเซกเมนต์กลาง (G) ต้องติดสว่าง

ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-counter-1

รายละเอียดดาต้าชีต

ผู้ผลิต Texas Instruments
หมายเลขชิ้นส่วน 74HC595
แรงดันไฟฟ้าลอจิก/IO 2 V ถึง 6 V
แรงดันไฟฟ้าจ่าย 2 V ถึง 6 V
กระแสเอาต์พุต (ต่อช่อง) 6 mA
กระแสสูงสุด (ต่อช่อง) 35 mA
คำแนะนำความถี่ PWM สูงถึง 1 kHz
เกณฑ์ลอจิกอินพุต 0.3 VCC ถึง 0.7 VCC
แรงดันตก / RDS(on) / ความอิ่มตัว สูงสุด 0.2 V
ขีดจำกัดความร้อน 125 °C
แพ็คเกจ DIP-16
หมายเหตุ / รุ่นต่างๆ มีให้เลือกหลายแพ็คเกจ

 

  • ตรวจสอบให้แน่ใจว่าแรงดันไฟฟ้าจ่ายถูกต้อง (2 V ถึง 6 V)
  • จำกัดกระแสเอาต์พุตเพื่อป้องกันความร้อนสูงเกินไป
  • ใช้ตัวต้านทานแยกสำหรับแต่ละเซกเมนต์เพื่อความสว่างที่เหมาะสมที่สุด
  • ระมัดระวังการเดินสายไฟเพื่อหลีกเลี่ยงการลัดวงจรและการเชื่อมต่อที่ผิดพลาด
  • ปฏิบัติตามผังพินอย่างระมัดระวังเพื่อหลีกเลี่ยงการกำหนดค่าที่ผิดพลาด

คำแนะนำการเดินสายไฟ

ESP32-10-seven-segment-wiring

เริ่มต้นด้วยการจัดเตรียมเบรดบอร์ดของคุณ เชื่อมต่อรางกราวด์ (เส้นสีน้ำเงิน) และรางไฟ (เส้นสีแดง) กราวด์ควรเชื่อมต่อกับเส้นสีน้ำเงินที่ด้านหนึ่งของเบรดบอร์ด ในขณะที่ไฟควรเชื่อมต่อกับเส้นสีแดงที่ด้านตรงข้าม ใช้สายสีดำเพื่อเชื่อมต่อกราวด์ของ ESP32 กับรางกราวด์ และสายสีแดงเพื่อเชื่อมต่อพิน 3.3V ของ ESP32 กับรางไฟ

จากนั้น ใส่ชิฟต์รีจิสเตอร์ 74HC595 ลงในเบรดบอร์ด โดยตรวจสอบให้แน่ใจว่ารอยบากอยู่ในทิศทางที่ถูกต้อง เชื่อมต่อพิน 11 (DS) เข้ากับพิน 25 บน ESP32 พิน 12 (SH_CP) เข้ากับพิน 26 และพิน 14 (ST_CP) เข้ากับพิน 27 เชื่อมต่อกราวด์ (พิน 8) ของชิฟต์รีจิสเตอร์เข้ากับรางกราวด์ และพิน 10 (MR) เข้ากับรางไฟเพื่อเปิดใช้งาน

สำหรับจอแสดงผลเซเวนเซกเมนต์ ให้เชื่อมต่อพินที่สอดคล้องกับเซกเมนต์ (a-g) เข้ากับพินเอาต์พุตของชิฟต์รีจิสเตอร์ ใช้ตัวต้านทาน (220 โอห์ม) อนุกรมสำหรับแต่ละเซกเมนต์เพื่อจำกัดกระแส ตรวจสอบให้แน่ใจว่ามีการเชื่อมต่อที่ถูกต้องสำหรับพินร่วม ซึ่งอาจเป็นแอโนดร่วมหรือแคโทดร่วมขึ้นอยู่กับประเภทจอแสดงผลของคุณ

ตัวอย่างโค้ดและคำอธิบาย

ในฟังก์ชัน setup เราเริ่มต้นด้วยการกำหนดพินที่เชื่อมต่อกับชิฟต์รีจิสเตอร์เป็นเอาต์พุต เพื่อให้แน่ใจว่า ESP32 ของเราสามารถควบคุมข้อมูลที่ส่งไปยังจอแสดงผลได้

void setup ()
{
  //set pins to output
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}

ที่นี่ เรากำหนด STcp, SHcp และ DS เป็นพินที่เชื่อมต่อกับ ST_CP, SH_CP และ DS ของชิฟต์รีจิสเตอร์ตามลำดับ การตั้งค่าพินเหล่านี้เป็นเอาต์พุตช่วยให้เราควบคุมชิฟต์รีจิสเตอร์ได้

ลูปหลักของโปรแกรมนับจาก 0 ถึง 9 โดยส่งค่าที่เกี่ยวข้องไปยังจอแสดงผลโดยใช้ฟังก์ชัน shiftOut

for(int num = 0; num <10; num++)
{
    digitalWrite(STcp,LOW); //กราวด์ ST_CP และค้างไว้ต่ำตราบเท่าที่คุณกำลังส่งข้อมูล
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //ดึง ST_CP ขึ้นสูงเพื่อบันทึกข้อมูล
    delay(1000);
}

ลูปนี้จะเพิ่มค่าตัวแปร num ทีละหนึ่ง และส่งค่าที่สอดคล้องกันจาก datArray ไปยังจอแสดงผลทุกวินาที ฟังก์ชัน shiftOut จะส่งข้อมูลไปยังชิฟต์รีจิสเตอร์ ซึ่งจะทำให้ส่วนที่เหมาะสมติดสว่างขึ้น

การสาธิต / สิ่งที่คาดหวัง

เมื่อต่อสายเสร็จเรียบร้อยและอัปโหลดโค้ดแล้ว คุณควรเห็นจอแสดงผลเจ็ดส่วนนับจาก 0 ถึง 9 หยุดชั่วครู่ก่อนจะนับกลับลงไปที่ 0 แต่ละตัวเลขจะแสดงเป็นเวลาหนึ่งวินาที หากต้องการให้การนับเร็วขึ้น คุณสามารถปรับค่า delay ในลูปได้ (ในวิดีโอที่ 15:30)

เมื่อจัดการกับแต่ละส่วนแยกกัน อย่าลืมส่งค่าไบนารีที่ถูกต้องเพื่อแสดงตัวอักษรหรือส่วนเฉพาะ หากจอแสดงผลดูมืดลง ให้พิจารณาเพิ่มตัวต้านทานแยกสำหรับแต่ละส่วนเพื่อให้ความสว่างสม่ำเสมอทั่วทั้งจอ

ไทม์สแตมป์ของวิดีโอ

  • 00:00 เริ่มต้น
  • 1:53 แนะนำเจ็ดส่วน
  • 4:38 อธิบายการต่อสาย
  • 13:15 โค้ด Arduino-1
  • 17:01 การเลือกพอร์ต COM และบอร์ด ESP32
  • 18:43 การสาธิต-1
  • 20:13 การแสดงตัวเลขเพียงหลักเดียว
  • 21:38 ตัวนับขึ้นและลง
  • 23:07 การเปิด/ปิดแต่ละส่วน
  • 24:53 การแสดง A, B, C, D, E และ F

ภาพ

ESP32_Animte7Segment-counter-1
ESP32_Animte7Segment-counter-1
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-counter-up-down
ESP32_Animte7Segment-letters
ESP32_Animte7Segment-letters
ESP32_Animte7Segment-segments
ESP32_Animte7Segment-segments
ESP32-10-seven-segment-schematic
ESP32-10-seven-segment-schematic
ESP32-10-seven-segment-wiring
ESP32-10-seven-segment-wiring
809-ESP32 Tutorial 10/55 - Arduino code for 2.5 7 segment
ภาษา: C++
const int STcp = 27;//ST_CP
const int SHcp = 26;//SH_CP 
const int DS = 25; //DS 

int datArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void setup ()
{
  //set pins to output
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
}
void loop()
{
  for(int num = 0; num <10; num++)
  {
    digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
    delay(1000);
  }
}

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

ไม่มีไฟล์ที่พร้อมใช้งาน