บทเรียน 9/31: การอ่านแรงดันไฟฟ้าโดยใช้ Arduino, Potentiometer AnalogRead | ชุดเรียนรู้ Arduino ของ SunFounder
บทนำ
คู่มือโปรเจกต์นี้สำรวจทักษะพื้นฐานในการอ่านแรงดันไฟฟ้ากระแสตรงแบบแอนะล็อกด้วย Arduino แม้ว่านี่จะเป็นแนวคิดหลักสำหรับผู้ที่สนใจงานอิเล็กทรอนิกส์ทุกคน แต่การประยุกต์ใช้ในโลกจริงนั้นมีความหลากหลายอย่างเหลือเชื่อ ความสามารถในการวัดแรงดันไฟฟ้าที่เปลี่ยนแปลงได้อย่างแม่นยำช่วยให้คุณเชื่อมต่อ Arduino กับเซนเซอร์และส่วนประกอบแอนะล็อกมากมายได้
ต่อไปนี้คือตัวอย่างเชิงปฏิบัติบางส่วนของสิ่งที่คุณสามารถสร้างได้ด้วยความรู้นี้:
- สร้างจอมอนิเตอร์แหล่งจ่ายไฟแบบกำหนดเอง: แสดงแรงดันไฟฟ้าของแบตเตอรี่หรือแผงโซลาร์เซลล์แบบเรียลไทม์เพื่อให้แน่ใจว่าอยู่ภายในขีดจำกัดการทำงานที่ปลอดภัย
- สร้างเครื่องวัดแสงอย่างง่าย: ใช้ตัวต้านทานที่ขึ้นกับแสง (LDR) ในวงจรแบ่งแรงดันไฟฟ้าเพื่อวัดระดับแสงโดยรอบและควบคุมแสงสว่างอัตโนมัติ
- ทำเกจวัดอุณหภูมิ: เชื่อมต่อกับเซนเซอร์อุณหภูมิแบบแอนะล็อก เช่น TMP36 เพื่ออ่านและแสดงอุณหภูมิปัจจุบัน
- เพิ่มปุ่มควบคุมสำหรับผู้ใช้: ใช้โพเทนชิโอมิเตอร์เป็นอินพุตแอนะล็อกเพื่อปรับพารามิเตอร์ เช่น ความสว่างของ LED ความเร็วมอเตอร์ หรือระดับเสียงของโมดูลเสียง
- พัฒนาเซนเซอร์วัดระยะทาง: อ่านเอาต์พุตแรงดันไฟฟ้าจากเซนเซอร์วัดระยะทางแบบแอนะล็อก (เช่น เซนเซอร์อินฟราเรด Sharp) เพื่อวัดระยะทางถึงวัตถุ
ฮาร์ดแวร์และส่วนประกอบ
บทเรียนนี้เน้นแนวคิดพื้นฐานของการอ่านแรงดันไฟฟ้าแบบแอนะล็อก เพื่อสาธิตสิ่งนี้ เราจะใช้โพเทนชิโอมิเตอร์ซึ่งทำหน้าที่เป็นตัวแบ่งแรงดันไฟฟ้าแบบแปรค่าได้ ส่วนประกอบที่จำเป็นสำหรับโปรเจกต์นี้นั้นเรียบง่ายและมักพบได้ในชุดเริ่มต้น:
- Arduino Uno (หรือบอร์ดที่คล้ายกัน เช่น Nano)
- โพเทนชิโอมิเตอร์ (ค่า 10kΩ เป็นค่าที่พบได้ทั่วไป)
- สายจัมเปอร์
- สาย USB สำหรับเขียนโปรแกรมและจ่ายไฟ
ทำความเข้าใจแอนะล็อกกับดิจิทัล
ต่างจากสัญญาณดิจิทัลซึ่งมีสถานะสูง (5V) หรือต่ำ (0V) อย่างเคร่งครัด สัญญาณแอนะล็อกสามารถเป็นแรงดันไฟฟ้าใดก็ได้ระหว่างขีดจำกัดทั้งสองนี้ พินแอนะล็อกของ Arduino (ระบุเป็น A0 ถึง A5) เชื่อมต่อกับ ตัวแปลงแอนะล็อกเป็นดิจิทัล (ADC) ส่วนประกอบนี้จะวัดแรงดันไฟฟ้าแอนะล็อกและแปลงเป็นตัวเลขดิจิทัลตามสัดส่วนที่ไมโครคอนโทรลเลอร์สามารถเข้าใจได้
ความละเอียดของการแปลงนี้ถูกกำหนดโดยจำนวนบิตที่ ADC ใช้ Arduino Uno มี ADC ขนาด 10 บิต ซึ่งหมายความว่าสามารถแทนแรงดันไฟฟ้าขาเข้าได้ใน 210 = 1024 ขั้นตอนที่ไม่ต่อเนื่อง ส่งผลให้ได้ค่าดิจิทัลตั้งแต่ 0 ถึง 1023 ความแม่นยำของบอร์ดอื่นอาจแตกต่างกันไป ตัวอย่างเช่น บางรุ่นมี ADC ขนาด 12 บิต ซึ่งให้ 212 = 4096 ขั้นตอน ให้ความละเอียดที่ละเอียดกว่ามาก (ในวิดีโอที่ 04:01)
โพเทนชิโอมิเตอร์เป็นตัวแบ่งแรงดันไฟฟ้า
โพเทนชิโอมิเตอร์เป็นตัวต้านทานแบบแปรค่าได้ที่มีสามพิน เมื่อต่อสายโดยให้พินด้านนอกเชื่อมต่อกับ 5V และ GND มันจะทำหน้าที่เป็นตัวแบ่งแรงดันไฟฟ้า พินตรงกลาง (wiper) จะเลื่อนไปตามแทร็กตัวต้านทาน ทำให้คุณสามารถแตะแรงดันไฟฟ้าใดก็ได้ระหว่าง 0V ถึง 5V (ในวิดีโอที่ 07:45)
这使得它成为本课程的理想工具,因为它提供了一种简单、动手的方式来手动改变我们正在读取的电压。通过转动旋钮,您可以实时看到ADC值和计算出的电压变化。
คู่มือการเดินสายไฟ
การเชื่อมต่อโพเทนชิโอมิเตอร์เข้ากับ Arduino นั้นตรงไปตรงมามาก
ในขณะที่วิดีโอสาธิตวิธีการเดินสายไฟแบบเฉพาะ ต่อไปนี้เป็นวิธีมาตรฐานและน่าเชื่อถือที่สุดในการเชื่อมต่ออุปกรณ์:
- เชื่อมต่อขาซ้ายของโพเทนชิโอมิเตอร์เข้ากับพิน 5V บน Arduino
- เชื่อมต่อขาขวาของโพเทนชิโอมิเตอร์เข้ากับพิน GND บน Arduino
- เชื่อมต่อขากลางของโพเทนชิโอมิเตอร์เข้ากับพินแอนะล็อก A0 บน Arduino
คำอธิบายโค้ด
บทเรียนนี้ครอบคลุมโปรแกรมที่แตกต่างกันสี่โปรแกรม โดยแต่ละโปรแกรมสาธิตวิธีการอ่านและคำนวณแรงดันไฟฟ้าที่แตกต่างกันเล็กน้อย โปรแกรมทั้งหมดใช้ตรรกะหลักเดียวกัน แต่แสดงวิธีจัดโครงสร้างโค้ดที่แตกต่างกัน แนวคิดสำคัญคือการแปลงค่า 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
วิธีแรกนี้สั้นและกระชับที่สุด โดยทำการคำนวณแรงดันไฟฟ้าและพิมพ์ผลลัพธ์ทั้งหมดในโค้ดบรรทัดเดียวภายใน loop() วิธีนี้เหมาะสำหรับการทดสอบอย่างรวดเร็วเมื่อคุณเพียงแค่ต้องการเห็นค่าแรงดันไฟฟ้าโดยไม่ต้องเก็บไว้ใช้ในภายหลัง
void loop() {
Serial.println(analogRead(analogPin) * 5.0/1023); // ค่าดีบัก
}
โค้ดบทเรียน 9/31-2 - การอ่านแรงดันไฟฟ้ากระแสตรงแบบแอนะล็อก วิธีที่ 2
วิธีนี้แนะนำตัวแปรท้องถิ่นชื่อ value ภายใน loop() ทำให้โค้ดอ่านง่ายขึ้นเล็กน้อยโดยแยกการอ่านพินแอนะล็อกออกจากการคำนวณ ฟังก์ชัน analogRead() จะส่งคืนค่าดิจิทัลดิบ ซึ่งจะถูกเก็บไว้ใน value ก่อนที่จะนำไปใช้ในการคำนวณ
int value = analogRead(analogPin);
Serial.println( value* 5.0/1023); // ค่าดีบัก
โค้ดบทเรียน 9/31-3 - การอ่านแรงดันไฟฟ้ากระแสตรงแบบแอนะล็อก วิธีที่ 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: การจัดรูปแบบเอาต์พุตแรงดันไฟฟ้า
ภาพ
/*
* 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
}
/*
* 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
}
/*
* 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
}
/*
* 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");
}
Common Course Links
Common Course Files
สิ่งที่คุณอาจต้องการ
-
อเมซอนSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
อเมซอน
-
อเมซอน
-
อเมซอน
-
อเมซอน
แหล่งข้อมูลและเอกสารอ้างอิง
-
เอกสารDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ภายนอกPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
ไฟล์📁
ไลบรารี Arduino (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB
คู่มือผู้ใช้
-
คู่มือการประกอบรถอัจฉริยะ SunFounder 3-in-1 Arduino Smart Carเอกสารนี้แสดงการประกอบ SunFounder 3-in-1 Arduino Smart Car ทีละขั้นตอน
SunFounder_car_assembly_manual.pdf1.20 MB