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 มิลลิวินาที

}