Lab 5 Analog Output
จุดประสงค์การเรียนรู้
เพื่อให้ทราบถึงลักษณะของสัญญาณAnalog inputที่รับมาจากตัวต้านทานปรับค่าได้
สาระการเรียนรู้
1. สัญญาณ Analog Output
สัญญาณAnalog outputเป็นสัญญาณที่มีความละเอียดกว่าสัญญาณDigitalเป็นอย่างมาก ยกตัวอย่างเช่นหากเราต้องการจะเปิดไฟLEDหากใช้สัญญาณDigitalในการสั่งงานจะไม่สามารถทำให้LEDหรี่ไฟแบบปรับระดับได้ ดังนั้นบทความนี้จะพูดถึงการใช้งานAnalog Outputชนิด PWM (Pulse-Width modulation) ซึ่งเป็นเทคนิคในการเข้ารหัสสัญญาณDigitalให้ัมีOuputเฉลี่ยคล้ายสัญญาณAnalog โดยจะสร้างLogic HIGH(3.3V) และ LOW(0V)สลับกันซึ่งจะทำให้คาบเวลาช่วงHIGHของหนึ่งลูกคลื่นมีหน่วยเป็นเปอร์เซนต์หรือที่เรียกกันว่าDuty Cycle ดังภาพข้างล่าง
ที่มาของภาพ : https://blog.thaieasyelec.com/espino32-ch6-how-to-use-analog-output/
ซึ่งในที่นี้เราจะใช้ Library-> ESP32Servo.h ที่มีคำสั่ง analogWrite เพื่อสั่งให้PWMทำงานตั้งแต่ 0 - 255 เทียบกับ 0 - 100 เปอร์เซนต์นั่นเอง
2. คำสั่งการใช้งาน
รูปแบบการใช้งานคำสั่งในภาษาซีของArduino IDE ในเนื้อหานี้ จะใช้คำสั่งดังต่อไปนี้
วัสดุอุปกรณ์
1. ไมโครสวิตซ์ ชนิดกดติดปล่อยดับ จำนวน 1 ตัว
2. ตัวต้านทาน 10 กิโลโอห์ม จำนวน 1 ตัว
3. บอร์ด ESP32 Devkit V.1 จำนวน 1 บอร์ด
4. สายMicro USB จำนวน 1 เส้น
5. Breadboard
6. สายแพร Male-Male
7. หลอด LED จำนวน 3 หลอด
8. ตัวต้านทาน 220 โอห์ม จำนวน 3 ตัว
9. ตัวต้านทานปรับค่าได้ Potentiometer จำนวน 1 ตัว
วิธีทำการทดลอง
1. ต่อหลอดLEDและตัวต้านทานตามตารางDatasheetและดังรูปข้างล่าง
(หากทำการทดลองมาตั้งแต่Lab1-4 ไม่ต้องต่ออะไรเพิ่มเติมเพราะเราต่อมาก่อนแล้ว)
2. ทำการCopy Codeด้านล่างก่อนUpload code Arduino IDE ลงไปใบนบอร์ด ESP32 Devkit v1
ควรเลือกที่Tool -> Board -> ESP32 Arduino ->ESP32 Dev Module (ดังภาพประกอบด้านล่าง)
Arduino IDE Code
#include <ESP32Servo.h>
void setup(){
}
void loop (){
analogWrite(19,0);delay(1000);
analogWrite(19,50);delay(1000);
analogWrite(19,150);delay(1000);
analogWrite(19,255);delay(1000);
}
3.หลังจากนั้นให้เข้ามาที่ Tool ->Port แล้วเลือกพอร์ตC om portที่เชื่อมกับUSB ดังรูปข้างล่าง
** กรณีใช้งานใน Ubuntu พอร์ตที่ใช้อาจจะเป็นพอร์ตttyUSB0 ซึ่งจะต้องเลือกเป็นพอร์ตชื่อนี้แทนCom port และก่อนกดUpload ให้ทำการเปิดTerminal โดยเข้าไปที่desktop คลิกขวาตรงพื้นที่ว่าง แล้วเลือก Open Terminal หลังจากนั้นให้พิมพ์ข้อความในTerminalดังนี้เพื่อทำการเปิดพอร์ตUSB : sudo chmod 666 /dev/ttyUSB0 หลังจากนั้นให้กดEnter และทำการกรอกรหัสผ่านของเครื่องพร้อมกับกดปุ่มEnterอีกครั้ง หลังจากนั้นก็Upload codeในArduino IDE
4.ทำการกดปุ่มUpload ที่เป็นรูปหัวลูกษร หรือจะกด Ctrl+u ที่คีย์บอร์ดเพื่อทำการUploadโปรแกรมไปที่บอร์ดESP32 ดังรูปข้างล่าง
5.สังเกตการหรี่ของหลอดไฟแต่ละช่วงเวลา
ตอนที่2 การใช้งาน for loop ในการสั่งงานPWM
ทำการcopyและupload codeนี้ในArduino IDE และสังเกตการทำงานแบบวนรอบโดยทุก 20 มิลลิวินาที
ค่า PWMจะเพิ่มค่าขึ้นทีละ1ไปเรื่อยๆจนถึง255
Analog output for loop
#include <ESP32Servo.h>
void setup(){
}
void loop (){
for(int i = 0; i <= 255 ; i++){
analogWrite(19,i);delay(20);
}
}
ตอนที่3 การใช้Analog Input ร่วมกับ Analog Output
ทำการcopyและupload codeนี้ในArduino IDE และทำการหมุนตัวต้านทานปรับค่าได้
Arduino IDE Code
#include <ESP32Servo.h>
void setup(){
Serial.begin(115200); // อัตราการส่งข้อมูล 115200
}
void loop (){
int x = map(analogRead(35),0,4095,0,255 );//คำสั่งmapAnalogReadปรับค่าอยู่ระหว่าง0-255
analogWrite(19,x); // คำสั่งAnalogWriteเพื่อให้แสงสว่างหลอดLEDมีค่าเท่ากับการmapของVr
Serial.println(x); // สั่งprintทีละบรรทัดแสดงค่าที่mapจากVr
delay(100);//หน่วงเวลาทุกๆ 100 มิลลิวินาที
}