ค้นหาโค้ด

บทเรียน 9/31: การอ่านแรงดันไฟฟ้าโดยใช้ Arduino, Potentiometer AnalogRead | ชุดเรียนรู้ Arduino ของ SunFounder

บทเรียนนี้เป็นส่วนหนึ่งของ: หลักสูตร Arduino ที่ใช้ชุดการเรียนรู้ 3-in-1 ของ SunFounder

บทเรียน 9/31: การอ่านแรงดันไฟฟ้าโดยใช้ Arduino, Potentiometer AnalogRead | ชุดเรียนรู้ Arduino ของ SunFounder

บทนำ

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

analog_read_arduino-1-battery

ต่อไปนี้คือตัวอย่างเชิงปฏิบัติบางส่วนของสิ่งที่คุณสามารถสร้างได้ด้วยความรู้นี้:

  • สร้างจอมอนิเตอร์แหล่งจ่ายไฟแบบกำหนดเอง: แสดงแรงดันไฟฟ้าของแบตเตอรี่หรือแผงโซลาร์เซลล์แบบเรียลไทม์เพื่อให้แน่ใจว่าอยู่ภายในขีดจำกัดการทำงานที่ปลอดภัย
  • สร้างเครื่องวัดแสงอย่างง่าย: ใช้ตัวต้านทานที่ขึ้นกับแสง (LDR) ในวงจรแบ่งแรงดันไฟฟ้าเพื่อวัดระดับแสงโดยรอบและควบคุมแสงสว่างอัตโนมัติ
  • ทำเกจวัดอุณหภูมิ: เชื่อมต่อกับเซนเซอร์อุณหภูมิแบบแอนะล็อก เช่น TMP36 เพื่ออ่านและแสดงอุณหภูมิปัจจุบัน
  • เพิ่มปุ่มควบคุมสำหรับผู้ใช้: ใช้โพเทนชิโอมิเตอร์เป็นอินพุตแอนะล็อกเพื่อปรับพารามิเตอร์ เช่น ความสว่างของ LED ความเร็วมอเตอร์ หรือระดับเสียงของโมดูลเสียง
  • พัฒนาเซนเซอร์วัดระยะทาง: อ่านเอาต์พุตแรงดันไฟฟ้าจากเซนเซอร์วัดระยะทางแบบแอนะล็อก (เช่น เซนเซอร์อินฟราเรด Sharp) เพื่อวัดระยะทางถึงวัตถุ

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

บทเรียนนี้เน้นแนวคิดพื้นฐานของการอ่านแรงดันไฟฟ้าแบบแอนะล็อก เพื่อสาธิตสิ่งนี้ เราจะใช้โพเทนชิโอมิเตอร์ซึ่งทำหน้าที่เป็นตัวแบ่งแรงดันไฟฟ้าแบบแปรค่าได้ ส่วนประกอบที่จำเป็นสำหรับโปรเจกต์นี้นั้นเรียบง่ายและมักพบได้ในชุดเริ่มต้น:

  • Arduino Uno (หรือบอร์ดที่คล้ายกัน เช่น Nano)
  • โพเทนชิโอมิเตอร์ (ค่า 10kΩ เป็นค่าที่พบได้ทั่วไป)
  • สายจัมเปอร์
  • สาย USB สำหรับเขียนโปรแกรมและจ่ายไฟ
analog_read_arduino-8-pot-screwdriver
analog_read_arduino-9-pot-with_knob
analog_read_arduino-10-slider-pot

ทำความเข้าใจแอนะล็อกกับดิจิทัล

ต่างจากสัญญาณดิจิทัลซึ่งมีสถานะสูง (5V) หรือต่ำ (0V) อย่างเคร่งครัด สัญญาณแอนะล็อกสามารถเป็นแรงดันไฟฟ้าใดก็ได้ระหว่างขีดจำกัดทั้งสองนี้ พินแอนะล็อกของ Arduino (ระบุเป็น A0 ถึง A5) เชื่อมต่อกับ ตัวแปลงแอนะล็อกเป็นดิจิทัล (ADC) ส่วนประกอบนี้จะวัดแรงดันไฟฟ้าแอนะล็อกและแปลงเป็นตัวเลขดิจิทัลตามสัดส่วนที่ไมโครคอนโทรลเลอร์สามารถเข้าใจได้

analog_read_arduino-3-digital-signal
analog_read_arduino-5-analog-signal-example

ความละเอียดของการแปลงนี้ถูกกำหนดโดยจำนวนบิตที่ ADC ใช้ Arduino Uno มี ADC ขนาด 10 บิต ซึ่งหมายความว่าสามารถแทนแรงดันไฟฟ้าขาเข้าได้ใน 210 = 1024 ขั้นตอนที่ไม่ต่อเนื่อง ส่งผลให้ได้ค่าดิจิทัลตั้งแต่ 0 ถึง 1023 ความแม่นยำของบอร์ดอื่นอาจแตกต่างกันไป ตัวอย่างเช่น บางรุ่นมี ADC ขนาด 12 บิต ซึ่งให้ 212 = 4096 ขั้นตอน ให้ความละเอียดที่ละเอียดกว่ามาก (ในวิดีโอที่ 04:01)

analog_read_arduino-6-flat-5-volts

โพเทนชิโอมิเตอร์เป็นตัวแบ่งแรงดันไฟฟ้า

โพเทนชิโอมิเตอร์เป็นตัวต้านทานแบบแปรค่าได้ที่มีสามพิน เมื่อต่อสายโดยให้พินด้านนอกเชื่อมต่อกับ 5V และ GND มันจะทำหน้าที่เป็นตัวแบ่งแรงดันไฟฟ้า พินตรงกลาง (wiper) จะเลื่อนไปตามแทร็กตัวต้านทาน ทำให้คุณสามารถแตะแรงดันไฟฟ้าใดก็ได้ระหว่าง 0V ถึง 5V (ในวิดีโอที่ 07:45)

这使得它成为本课程的理想工具,因为它提供了一种简单、动手的方式来手动改变我们正在读取的电压。通过转动旋钮,您可以实时看到ADC值和计算出的电压变化。

analog_read_arduino-7-sampling

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

analog_read_arduino-12-wiring-breadboard
analog_read_arduino-11-multiturn-pot

การเชื่อมต่อโพเทนชิโอมิเตอร์เข้ากับ Arduino นั้นตรงไปตรงมามาก

ในขณะที่วิดีโอสาธิตวิธีการเดินสายไฟแบบเฉพาะ ต่อไปนี้เป็นวิธีมาตรฐานและน่าเชื่อถือที่สุดในการเชื่อมต่ออุปกรณ์:

  1. เชื่อมต่อขาซ้ายของโพเทนชิโอมิเตอร์เข้ากับพิน 5V บน Arduino
  2. เชื่อมต่อขาขวาของโพเทนชิโอมิเตอร์เข้ากับพิน GND บน Arduino
  3. เชื่อมต่อขากลางของโพเทนชิโอมิเตอร์เข้ากับพินแอนะล็อก A0 บน Arduino
analog_read_arduino-12-wiring-dual-shot

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

บทเรียนนี้ครอบคลุมโปรแกรมที่แตกต่างกันสี่โปรแกรม โดยแต่ละโปรแกรมสาธิตวิธีการอ่านและคำนวณแรงดันไฟฟ้าที่แตกต่างกันเล็กน้อย โปรแกรมทั้งหมดใช้ตรรกะหลักเดียวกัน แต่แสดงวิธีจัดโครงสร้างโค้ดที่แตกต่างกัน แนวคิดสำคัญคือการแปลงค่า ADC ดิบ (0-1023) เป็นแรงดันไฟฟ้าโดยใช้สูตร: Voltage = (ADC Value) * (5.0 / 1023)

ในส่วนของโค้ดด้านล่าง คุณจะสังเกตเห็นตัวแปรที่ผู้ใช้สามารถกำหนดค่าได้สองสามตัวที่ด้านบนของแต่ละสเก็ตช์:

  • int analogPin = A0; - นี่คือพินบน Arduino ที่เชื่อมต่อกับขากลางของโพเทนชิโอมิเตอร์ของคุณ คุณสามารถเปลี่ยนเป็นพินแอนะล็อกอื่นได้ (เช่น A1, A2)
  • Serial.begin(9600); - คำสั่งนี้ตั้งค่าอัตราบอดสำหรับการสื่อสารแบบอนุกรม ซึ่งต้องตรงกับอัตราบอดที่เลือกใน Serial Monitor ของ Arduino IDE

โค้ดบทเรียน 9/31-1 - การอ่านแรงดันไฟฟ้ากระแสตรงแบบแอนะล็อก วิธีที่ 1

analog_read_arduino-13-method-1

วิธีแรกนี้สั้นและกระชับที่สุด โดยทำการคำนวณแรงดันไฟฟ้าและพิมพ์ผลลัพธ์ทั้งหมดในโค้ดบรรทัดเดียวภายใน loop() วิธีนี้เหมาะสำหรับการทดสอบอย่างรวดเร็วเมื่อคุณเพียงแค่ต้องการเห็นค่าแรงดันไฟฟ้าโดยไม่ต้องเก็บไว้ใช้ในภายหลัง

void loop() {
    Serial.println(analogRead(analogPin) * 5.0/1023);          // ค่าดีบัก
}

โค้ดบทเรียน 9/31-2 - การอ่านแรงดันไฟฟ้ากระแสตรงแบบแอนะล็อก วิธีที่ 2

analog_read_arduino-13-method-2

วิธีนี้แนะนำตัวแปรท้องถิ่นชื่อ value ภายใน loop() ทำให้โค้ดอ่านง่ายขึ้นเล็กน้อยโดยแยกการอ่านพินแอนะล็อกออกจากการคำนวณ ฟังก์ชัน analogRead() จะส่งคืนค่าดิจิทัลดิบ ซึ่งจะถูกเก็บไว้ใน value ก่อนที่จะนำไปใช้ในการคำนวณ

int value = analogRead(analogPin);
Serial.println( value* 5.0/1023); // ค่าดีบัก

โค้ดบทเรียน 9/31-3 - การอ่านแรงดันไฟฟ้ากระแสตรงแบบแอนะล็อก วิธีที่ 3

analog_read_arduino-13-method-3

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

int value = analogRead(analogPin);
float voltage = value* 5.0/1023;
Serial.println(voltage); // พิมพ์ค่าแรงดันไฟฟ้า

โค้ดบทเรียน 9/31-4 - การอ่านแรงดันไฟฟ้ากระแสตรงแบบแอนะล็อก วิธีที่ 4

วิธีสุดท้ายต่อยอดจากวิธีที่สามโดยการจัดรูปแบบเอาต์พุตให้เป็นมิตรกับผู้ใช้มากขึ้น โดยใช้ Serial.print(voltage,1) เพื่อพิมพ์แรงดันไฟฟ้าด้วยทศนิยมเพียงหนึ่งตำแหน่ง อาร์กิวเมนต์ที่สอง 1 ระบุจำนวนตำแหน่งทศนิยม จากนั้นพิมพ์ตัวอักษร "V" เพื่อระบุหน่วยการวัด ทำให้ได้ผลลัพธ์ที่สะอาดตาเช่น 3.3V

int value = analogRead(analogPin);
float voltage = value* 5.0/1023;
Serial.print(voltage,1); // พิมพ์ค่าแรงดันไฟฟ้า
Serial.println("V");

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

ในวิดีโอ ผู้นำเสนอสาธิตตัวอย่างโค้ดทั้งสี่โปรแกรม หลังจากอัปโหลดโปรแกรมแรก Serial Monitor จะแสดงค่า ADC ดิบ เมื่อหมุนปุ่มโพเทนชิโอมิเตอร์ คุณจะเห็นค่าเปลี่ยนจาก 0 ถึง 1023 (ในวิดีโอที่เวลา 16:46)

เมื่อเปลี่ยนโค้ดเป็นการคำนวณแรงดันไฟฟ้า Serial Monitor จะแสดงค่าแรงดันไฟฟ้าจริง ซึ่งมีช่วงตั้งแต่ 0V ถึง 5V เมื่อหมุนปุ่ม ซึ่งเป็นการยืนยันด้วยภาพที่ชัดเจนว่าโค้ดทำงานถูกต้อง ผู้นำเสนอยังสาธิตให้เห็นว่าการถอดพินแอนะล็อกออกทำให้ค่าที่อ่านได้มีความผันผวน เนื่องจากพินอยู่ในสถานะ "ลอย" และสาธิตว่าการเชื่อมต่อกับ 3.3V จะให้ค่าที่อ่านได้ประมาณ 3.3V (ในวิดีโอที่เวลา 20:30)

บทต่างๆ

  • [00:00] บทนำสู่การอ่านแรงดันไฟฟ้ากระแสตรงด้วย Arduino
  • [01:30] การแปลงแอนะล็อกเป็นดิจิทัลทำงานอย่างไร
  • [07:39] บทนำสู่โพเทนชิโอมิเตอร์
  • [15:07] การเดินสายโพเทนชิโอมิเตอร์และการอัปโหลดโค้ดครั้งแรก
  • [17:33] วิธีที่ 1: การพิมพ์แรงดันไฟฟ้าโดยตรง
  • [19:21] วิธีที่ 2: การใช้ตัวแปรสำหรับค่าที่อ่านได้
  • [20:58] วิธีที่ 3: การเก็บค่าแรงดันไฟฟ้าที่คำนวณได้
  • [23:16] วิธีที่ 4: การจัดรูปแบบเอาต์พุตแรงดันไฟฟ้า

ภาพ

analog_read_arduino-5-analog-signal-example
analog_read_arduino-5-analog-signal-example
analog_read_arduino-6-flat-5-volts
analog_read_arduino-6-flat-5-volts
analog_read_arduino-7-sampling
analog_read_arduino-7-sampling
analog_read_arduino-8-pot-screwdriver
analog_read_arduino-8-pot-screwdriver
analog_read_arduino-9-pot-with_knob
analog_read_arduino-9-pot-with_knob
analog_read_arduino-10-slider-pot
analog_read_arduino-10-slider-pot
analog_read_arduino-11-multiturn-pot
analog_read_arduino-11-multiturn-pot
analog_read_arduino-12-wiring-breadboard
analog_read_arduino-12-wiring-breadboard
analog_read_arduino-12-wiring-dual-shot
analog_read_arduino-12-wiring-dual-shot
analog_read_arduino-13-method-1
analog_read_arduino-13-method-1
analog_read_arduino-13-method-2
analog_read_arduino-13-method-2
analog_read_arduino-13-method-3
analog_read_arduino-13-method-3
analog_read_arduino-1-battery
analog_read_arduino-1-battery
analog_read_arduino-3-digital-signal
analog_read_arduino-3-digital-signal
926-Lesson 9/31-1 code - Reading analog DC voltage Method 1
ภาษา: C++
/*
 * Lesson 9/31-1 Analog read
 * In this lesson we learn to read analog voltage in 4 ways. 
Download and resource page https://robojax.com/RJT592
watch video tutorial https://www.youtube.com/watch?v=Y9_PgvgfOIc
 * written/updated by Ahmad Shamshiri www.Robojax.com
 * Dec 12, 2022
 * 

*/
 int analogPin = A0; // device connected to analog pin A0
                   // outside leads to ground and +5V
 int value = 0;  // variable to store the value read

 void setup() {
    Serial.begin(9600);           //  setup serial
 }

 void loop() {
  
    Serial.println(analogRead(analogPin) * 5.0/1023);          // debug value
 }
 
927-Lesson 9/31-2 code - Reading analog DC voltage Method 2
ภาษา: C++
/*
 * Lesson 9/31-2 Analog read
 * In this lesson we learn to read analog voltage in 4 ways. 
Download and resource page https://robojax.com/RJT592
watch video tutorial https://www.youtube.com/watch?v=Y9_PgvgfOIc
 * written/updated by Ahmad Shamshiri www.Robojax.com
 * Dec 12, 2022
 * 

*/
  //Method 2 of lesson 9
 int analogPin = A0; // device connected to analog pin A0
                   // outside leads to ground and +5V
 
 void setup() {
    Serial.begin(9600);           //  setup serial
 }

 void loop() {
    int value = analogRead(analogPin);
    Serial.println( value* 5.0/1023); // debug value
 }
 
928-Lesson 9/31-3 code - Reading analog DC voltage Method 3
ภาษา: C++
/*
 * Lesson 9/31-3 Analog read
 * In this lesson we learn to read analog voltage in 4 ways. 
Download and resource page https://robojax.com/RJT592
watch video tutorial https://www.youtube.com/watch?v=Y9_PgvgfOIc
 * written/updated by Ahmad Shamshiri www.Robojax.com
 * Dec 12, 2022
 * 

*/
  //Method 3 of lesson 9
 int analogPin = A0; // device connected to analog pin A0
                   // outside leads to ground and +5V
 
 void setup() {
    Serial.begin(9600);           //  setup serial
 }

 void loop() {
    int value = analogRead(analogPin);
    float voltage = value* 5.0/1023;
    Serial.println(voltage); // print the voltage
 
 }
 

929-Lesson 9/31-4 code - Reading analog DC voltage Method 4
ภาษา: C++
/*
 * Lesson 9/31-4 Analog read
 * In this lesson we learn to read analog voltage in 4 ways. 
Download and resource page https://robojax.com/RJT592
watch video tutorial https://www.youtube.com/watch?v=Y9_PgvgfOIc
 * written/updated by Ahmad Shamshiri www.Robojax.com
 * Dec 12, 2022
 * 

*/

 //Method 4 of lesson 9
 int analogPin = A0; // device connected to analog pin A0
                   // outside leads to ground and +5V
 
 void setup() {
    Serial.begin(9600);           //  setup serial
 }

 void loop() {
    int value = analogRead(analogPin);
    float voltage = value* 5.0/1023;
    Serial.print(voltage,1); // print the voltage
    Serial.println("V");
 }
 

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

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

ไฟล์📁

ไลบรารี Arduino (zip)

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