ค้นหาโค้ด

บทที่ 98-9: มิเตอร์วัดระดับแรงดันไฟฟ้า LED โดยใช้ Arduino หรือไฟเดินด้วยโพเทนชิโอมิเตอร์

บทที่ 98-9: มิเตอร์วัดระดับแรงดันไฟฟ้า LED โดยใช้ Arduino หรือไฟเดินด้วยโพเทนชิโอมิเตอร์

โปรเจกต์นี้แสดงวิธีสร้างโวลต์มิเตอร์วัดระดับแรงดันที่ใช้ LED ห้าดวงเป็นจอแสดงผลแบบกราฟแท่ง ขับเคลื่อนทั้งหมดด้วย Arduino และโพเทนชิโอมิเตอร์ตัวเดียว เมื่อคุณหมุนปุ่ม Arduino จะอ่านแรงดันที่เปลี่ยนแปลงบนพินอนาล็อกและติด LED หนึ่งดวงต่อหนึ่งโวลต์ แถวของไฟจึง "เดิน" ขึ้นลงตามปุ่มจริง ๆ นี่เป็นวิธีที่ชัดเจนที่สุดวิธีหนึ่งในการทำความเข้าใจอินพุตอนาล็อก เพราะคุณสามารถเห็นการแปลงสัญญาณอนาล็อกเป็นดิจิทัลเกิดขึ้นแบบเรียลไทม์ในรูปของแถบไฟจริง

5 leds on breadboard with sliding veriable resistor shown connected to Arduino UNO
LED 5 ดวงบนเบรดบอร์ดพร้อมตัวต้านทานปรับค่าแบบสไลต์ที่ต่อกับ Arduino UNO

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

  • ตัวบ่งชี้ประจุแบตเตอรี่ที่แสดงความจุคงเหลือของแบตเตอรี่ 12 V หรือพาวเวอร์แบงก์ USB เป็นแถว LED
  • มาตรวัดระดับถังน้ำ โดยเซ็นเซอร์ลูกลอยส่งแรงดันเป็นสัดส่วนกับความลึก
  • จอแสดงผลอุณหภูมิแบบแท่งโดยใช้เซ็นเซอร์อุณหภูมิอนาล็อกเช่น LM35
  • มาตรวัดความแรงสัญญาณหรือระดับเสียงสำหรับเครื่องรับวิทยุหรือแอมพลิฟายเออร์
  • การอ่านค่าเซ็นเซอร์อย่างง่ายสำหรับทรานสดิวเซอร์อนาล็อก 0–5 V ใด ๆ (ความดัน แสง ตำแหน่ง)
  • หัววัดแรงดันสำหรับทดสอบบนโต๊ะเพื่อตรวจสอบรางจ่ายไฟโดยไม่ต้องดูหน้าจอมัลติมิเตอร์

เนื่องจากค่าเกณฑ์ถูกคำนวณเป็นเปอร์เซ็นต์ของแรงดันบอร์ด โค้ดเดียวกันจึงใช้ได้กับบอร์ด 5 V เช่น Uno และ Mega และกับบอร์ด 3.3 V โดยแก้เพียงบรรทัดเดียว

ฮาร์ดแวร์และส่วนประกอบ

รายการชิ้นส่วนถูกตั้งใจให้มีน้อยที่สุด และทุกอย่างได้รับการอธิบายในช่วงต้นของวิดีโอ (ในวิดีโอที่ 01:54) คุณจะต้องมี:

  • บอร์ด Arduino หนึ่งตัว (Uno, Nano หรือ Mega)
  • LED ห้าดวง โดย ideally เป็นสีเดียวกันเพื่อให้แถบอ่านค่าได้ชัดเจน แม้ว่าสีผสมก็ใช้ได้เช่นกัน
  • ตัวต้านทานจำกัดกระแสห้าตัว บทเรียนนี้ใช้ตัวต้านทาน 1 kΩ แต่ค่าตั้งแต่ประมาณ 300 Ω ถึง 1 kΩ ก็ใช้ได้ ค่าที่สูงขึ้นเพียงทำให้ LED สว่างน้อยลง (ในวิดีโอที่ 05:33)
  • โพเทนชิโอมิเตอร์หนึ่งตัว ทั้งแบบปุ่มหมุนและแบบสไลต์ได้รับการสาธิต (ในวิดีโอที่ 02:19)
  • เบรดบอร์ดและสายจัมเปอร์

หมายเหตุสั้น ๆ เกี่ยวกับ LED เอง เนื่องจากมันสำคัญต่อการเดินสาย: LED เป็นไดโอด ดังนั้นมันจึงนำกระแสได้ทางเดียว ด้านแบนของตัวพลาสติกและขาที่สั้นกว่าคือแคโทด (ลบ) ขาที่ยาวกว่าคือแอโนด (บวก) บทเรียนนี้อธิบายสัญลักษณ์และรูปร่างทางกายภาพอย่างละเอียด (ในวิดีโอที่ 02:39)

ค่าตัวต้านทานไม่ใช่ค่าสุ่ม LED จะมีแรงดันตกประมาณ 2 V และชนิด 3 mm และ 5 mm ขนาดเล็กจะกินกระแสประมาณ 10 mA เมื่อใช้แหล่งจ่าย 5 V แรงดันที่เหลือ 3 V ต้องตกคร่อมตัวต้านทาน ดังนั้นกฎของโอห์มให้ R = 3 V / 0.01 A = 300 Ω นั่นคือค่าสำหรับความสว่างสูงสุด การใช้ 1 kΩ เป็นทางเลือกที่ปลอดภัยและสว่างน้อยลงเล็กน้อย (ในวิดีโอที่ 04:41)

คู่มือการเดินสาย

Schematic for Arduino walking light LEDs
แผนผังสำหรับ LED ไฟเดินของ Arduino
wiring for Arduino walking light LEDs
การเดินสายสำหรับ LED ไฟเดินของ Arduino

ส่วน LED ของการเดินสายเหมือนกับโปรเจกต์ไฟเดินก่อนหน้านี้: แอโนดของ LED แต่ละดวงต่อกับพินดิจิทัลของตัวเอง และแคโทดแต่ละดวงผ่านตัวต้านทานไปยังรางกราวด์ร่วม ในบทเรียนนี้ LED ต่อกับพิน 7, 6, 5, 4 และ 3 (ในวิดีโอที่ 43:04)

โพเทนชิโอมิเตอร์เป็นชิ้นส่วนใหม่เพียงอย่างเดียว ขาด้านนอกสองข้างต่อกับรางจ่ายไฟทั้งสอง — ขาด้านนอกข้างหนึ่งต่อกราวด์และอีกข้างต่อ 5 V (หรือ 3.3 V หากคุณกำลังวัดระบบ 3.3 V) ขากลางเรียกว่าไวเปอร์ เป็นเอาต์พุตและต้องต่อกับพินอนาล็อก A0 (ในวิดีโอที่ 43:30) ไวเปอร์เป็นสิ่งที่สร้างแรงดันแปรผัน: เมื่อคุณหมุนปุ่ม ไวเปอร์จะเลื่อนไปตามรางต้านทานและแรงดันที่มันให้จะเปลี่ยนอย่างราบรื่นระหว่างรางทั้งสอง

รายละเอียดสำคัญอย่างหนึ่ง: หากคุณถอดโพเทนชิโอมิเตอร์ออกขณะวงจรทำงาน พินอนาล็อกจะลอยและ LED จะกะพริบแบบสุ่ม พฤติกรรมนี้ได้รับการสาธิตในวิดีโอ (ในวิดีโอที่ 48:52) และเป็นเครื่องเตือนใจที่ดีว่าอินพุตอนาล็อกจำเป็นต้องมีแหล่งแรงดันที่กำหนดไว้เสมอ

คำอธิบายโค้ด

โค้ดสั้นและส่วนใหญ่ตรงไปตรงมา ดังนั้นส่วนนี้จึงเน้นเฉพาะส่วนที่คุณอาจต้องการเปลี่ยนแปลง การตั้งค่าเหล่านี้ทั้งหมดอยู่ที่ด้านบนของสเก็ตช์

การกำหนดพิน สิ่งเหล่านี้บอก Arduino ว่า LED และโพเทนชิโอมิเตอร์ต่อกับพินใด หากคุณเดินสาย LED ต่างออกไป ให้เปลี่ยนตัวเลขเหล่านี้ให้ตรงกัน — ลำดับมีความสำคัญ เพราะ LED1 คือค่าเกณฑ์ต่ำสุดและ LED5 คือค่าสูงสุด

const int potPin = A0;//define a pin to connect potentiometer
const int LED1 = 7;
const int LED2 = 6;
const int LED3 = 5;
const int LED4 = 4;
const int LED5 = 3;

แรงดันไฟฟ้าของบอร์ด นี่คือค่าที่สำคัญที่สุดที่ต้องตั้งให้ถูกต้อง เพราะเป็นค่าอ้างอิงที่ใช้คำนวณทุกเกณฑ์ ตั้งเป็น 5.0 สำหรับ Uno หรือ Mega และ 3.3 สำหรับ Nano หรือบอร์ดที่ใช้ 3.3 V หากตั้งค่าผิด LED ทุกดวงจะเปลี่ยนสถานะที่แรงดันไฟฟ้าที่ผิด (ในวิดีโอที่ 44:19)

float boardVoltage= 5.0;//for UNO and MEGA 5.0V for Nano either 5V or 3.3V

การแสดงแรงดันไฟฟ้าผ่าน Serial ตั้งค่าเป็น true เพื่อพิมพ์แรงดันไฟฟ้าที่วัดได้ไปยัง Serial Monitor ที่ 9600 baud ซึ่งมีประโยชน์มากในระหว่างการปรับเทียบ ตั้งค่าเป็น false เพื่อปิดเอาต์พุตเมื่อทุกอย่างทำงานได้แล้ว

boolean showVoltage = true;//true or false to read voltage in serial monitor

การแปลงค่าทำงานอย่างไร ตัวแปลงอนาล็อกเป็นดิจิทัลของ Arduino จะคืนค่าตัวเลขตั้งแต่ 0 ถึง 1023 เนื่องจากเป็นตัวแปลง 10 บิต (210 = 1024 ขั้น) โค้ดจะปรับขนาดตัวเลขดิบนั้นให้เป็นแรงดันไฟฟ้าจริงโดยใช้แรงดันไฟฟ้าของบอร์ดเป็นค่าอ้างอิง นี่คือบรรทัดที่ต้องจำไว้หากคุณเปลี่ยนไปใช้บอร์ด 12 บิต เช่น Due ซึ่งคุณจะต้องหารด้วย 4095 แทน

int sensorValue = analogRead(A0);
float voltage = sensorValue * (boardVoltage / 1023.0);

ตรรกะของเกณฑ์ แทนที่จะกำหนดค่าแรงดันไฟฟ้าแบบตายตัว แต่ละขั้นจะแสดงเป็นเปอร์เซ็นต์ของแรงดันไฟฟ้าของบอร์ด ที่ 95% ขึ้นไป LED ทั้งห้าดวงจะติด สูงกว่า 80% จะติดเพียงสี่ดวง และลดหลั่นลงไปจนถึง 20% ซึ่งจะมี LED ติดเพียงดวงเดียว วิธีการใช้เปอร์เซ็นต์นี้เองที่ทำให้สเก็ตช์สามารถใช้ได้ทั้งบอร์ด 5 V และ 3.3 V โดยไม่ต้องเขียนเงื่อนไขเปรียบเทียบใหม่

if (voltage >= boardVoltage*0.95)
{
      digitalWrite(LED1, HIGH);
      digitalWrite(LED2, HIGH);
      digitalWrite(LED3, HIGH);
      digitalWrite(LED4, HIGH);
      digitalWrite(LED5, HIGH);
}

เนื่องจากโค้ดใช้ else if จึงมีเพียงสาขาเดียวที่ทำงานในแต่ละรอบของลูป ดังนั้นจึงมี LED ติดพร้อมกันในจำนวนที่ถูกต้องเท่านั้น การหน่วง 50 ms ที่ท้ายแต่ละลูปช่วยป้องกันไม่ให้จอแสดงผลกะพริบ

โปรเจกต์สดและการสาธิต

เมื่ออัปโหลดสเก็ตช์แล้ว ให้เปิด Serial Monitor ที่ 9600 baud และหมุนปุ่มช้าๆ แรงดันไฟฟ้าที่พิมพ์และแถบ LED จะเปลี่ยนแปลงสอดคล้องกันอย่างใกล้ชิด ที่ประมาณ 1 V จะมี LED ติดหนึ่งดวง ที่ 2 V จะติดสองดวง และเป็นเช่นนี้ไปเรื่อยๆ จนถึงประมาณ 4.8 V ซึ่งทั้งห้าดวงจะติด (ในวิดีโอที่ 47:37) ค่าที่อ่านได้จะอยู่ในช่วงไม่กี่ร้อยมิลลิโวลต์จากค่าที่คาดไว้ ซึ่งถือว่ายอดเยี่ยมสำหรับตัวแปลง 10 บิต

หากขั้นต่างๆ ดูเหมือนไม่สม่ำเสมอเล็กน้อย มักเกิดจากตัวต้านทานมากกว่าโค้ด บทแนะนำนี้ระบุว่าตัวต้านทานคาร์บอนฟิล์มมาตรฐานมีความคลาดเคลื่อน 10% ในขณะที่แบบโลหะฟิล์มสีน้ำเงินมักอยู่ที่ 1% และให้ขั้นที่แน่นอนและแม่นยำกว่าอย่างเห็นได้ชัด (ในวิดีโอที่ 48:18)

คุณยังสามารถเปลี่ยนโพเทนชิออมิเตอร์แบบหมุนเป็นแบบสไลด์ได้ และจะได้พฤติกรรมเดียวกันพร้อมความรู้สึกแบบเชิงเส้น ซึ่งเป็นตัวเลือกที่ดีหากคุณวางแผนจะติดตั้งมิเตอร์นี้ลงในแผงควบคุม (ในวิดีโอที่ 49:07)

หากคุณต้องการเลื่อนแสงด้วยตนเองแทนการใช้ปุ่มหมุน เรื่องนี้ครอบคลุมอยู่ใน Lesson 98-8: Walking Light with Push Button and LEDs with Arduino และหากคุณเพียงต้องการให้ LED วิ่งตามตัวจับเวลาของตัวเอง ดูได้ที่ Lesson 98-7: Walking Light Using Arduino and 5 LEDs

โปรเจกต์ที่เกี่ยวข้องจากวิดีโอนี้

บทต่างๆ

  • [00:00] ภาพรวมของโปรเจกต์ LED 10 แบบ
  • [02:29] พื้นฐาน LED สัญลักษณ์ และการคำนวณตัวต้านทาน
  • [42:25] บทนำสู่มิเตอร์วัดระดับแรงดันไฟฟ้าด้วย LED
  • [43:04] การต่อวงจร LED และโพเทนชิออมิเตอร์
  • [43:54] อธิบายโค้ดแถบแสดงแรงดันไฟฟ้า
  • [44:19] การตั้งค่าอ้างอิงแรงดันไฟฟ้าของบอร์ด
  • [46:00] ตรรกะของเกณฑ์และขั้นแบบเปอร์เซ็นต์
  • [47:14] การสาธิต: การอ่านแรงดันไฟฟ้าด้วยแถบ LED
  • [48:18] ความคลาดเคลื่อนของตัวต้านทานและความแม่นยำ
  • [49:07] การใช้โพเทนชิออมิเตอร์แบบสไลด์

ภาพ

wiring for Arduino walking light LEDs
wiring for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
5 leds บนเบรดบอร์ดพร้อมตัวต้านทานแบบเลื่อนปรับค่าได้ที่แสดงการเชื่อมต่อกับ Arduino UNO
5 leds บนเบรดบอร์ดพร้อมตัวต้านทานแบบเลื่อนปรับค่าได้ที่แสดงการเชื่อมต่อกับ Arduino UNO
941-Lessson 98-LED-9: Arduino code walking LED light controlled by potentiometer
ภาษา: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

สิ่งที่คุณอาจต้องการ

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

ไฟล์📁

ไลบรารี Arduino (zip)

คู่มือผู้ใช้