วิชา: 2302311 Integrated Chemistry Laboratory I / ปฏิบัติการเคมีบูรณาการ 1 หน่วยงาน: ภาควิชาเคมี คณะวิทยาศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย Department of Chemistry, Faculty of Science, Chulalongkorn University
เอกสารในโฟลเดอร์นี้เป็นสื่อเสริมสำหรับนิสิตที่ต้องการศึกษาด้วยตนเองหลังจากเรียนในชั้นเรียน ช่วยเสริมความเข้าใจเรื่อง Object-Oriented Programming (OOP) และการเขียนโปรแกรมควบคุมฮาร์ดแวร์
These supplementary materials help students reinforce OOP concepts and hardware programming skills after the 3-hour class session. Study at your own pace to extend your learning.
เนื้อหาในโฟลเดอร์นี้เชื่อมโยงกับการทดลองไทเทรชัน (titration) ดังนี้:
| แนวคิดการเขียนโปรแกรม | การประยุกต์ใช้ในเคมี |
|---|---|
| Class/คลาส | จำลองอุปกรณ์ เช่น pH sensor, pump, buzzer |
| Object/ออบเจกต์ | สร้างตัวแทนของอุปกรณ์จริงในโปรแกรม |
| Method/เมธอด | การทำงานของอุปกรณ์ เช่น read_ph(), start_pump() |
| ADC reading/การอ่านค่า ADC | แปลงแรงดันจาก pH probe เป็นค่า pH (สมการ Nernst) |
| PWM signal/สัญญาณ PWM | ควบคุมความเร็วปั๊มเพื่อเติมสารไทแทรนต์ (titrant) |
| Loop/ลูป | วัด pH อย่างต่อเนื่องระหว่างไทเทรชัน |
| Conditional/เงื่อนไข | ตรวจจับจุดสมมูล (equivalence point) |
extras/
|-- 01_procedural/ # ตัวอย่างพื้นฐานแบบไม่ใช้ OOP (~1 ชั่วโมง)
|-- 02_advanced_oop/ # แนวคิด OOP ขั้นสูง (~2 ชั่วโมง)
|-- 03_exercises/ # แบบฝึกหัดเพิ่มเติม (~2-3 ชั่วโมง)
|-- 04_hardware/ # โมดูลเฉพาะฮาร์ดแวร์ (~1-2 ชั่วโมง)
|-- 05_reference/ # เอกสารอ้างอิง (ใช้เมื่อต้องการ)
เวลาที่ใช้ศึกษา: ประมาณ 1 ชั่วโมง Estimated study time: ~1 hour
เหมาะสำหรับนิสิตที่ต้องการทำความเข้าใจพื้นฐานก่อนเรียน OOP เปรียบเทียบกับการทำการทดลองแบบทำทีละขั้นตอน (step-by-step) โดยไม่จัดระบบ
| ไฟล์ | คำอธิบาย | ความเชื่อมโยงกับเคมี |
|---|---|---|
01_basic.py |
การกระพริบ LED แบบ Procedural | สัญญาณไฟบอกสถานะเครื่อง |
02_basic_loop.py |
การใช้ loop พื้นฐาน | การวัดค่าซ้ำๆ ระหว่างทดลอง |
02_toggle.py |
การสลับสถานะ LED | สลับโหมดการทำงาน |
03_Potentiometer.py |
การอ่านค่า ADC จาก Potentiometer | จำลองการอ่านค่าจากเซ็นเซอร์ |
03_twoLed.py |
ควบคุม LED สองดวง | แสดงสถานะปกติ/เตือน |
04_PWM_OUT.py |
การใช้ PWM output | ควบคุมความเร็วปั๊ม |
04_twoLed_infiniteLoop.py |
LED กับ infinite loop | การตรวจวัดอย่างต่อเนื่อง |
แนะนำ: ศึกษาก่อนเริ่มเรียน OOP เพื่อเข้าใจความแตกต่าง
เวลาที่ใช้ศึกษา: ประมาณ 2 ชั่วโมง Estimated study time: ~2 hours
เนื้อหาขั้นสูงสำหรับเตรียมพร้อมสัปดาห์ที่ 2 เรียนรู้การใช้หลาย objects ทำงานร่วมกัน เปรียบเสมือนการประกอบอุปกรณ์หลายชิ้นเข้าด้วยกันเป็นระบบไทเทรชันอัตโนมัติ
| ไฟล์ | คำอธิบาย | ความเชื่อมโยงกับเคมี |
|---|---|---|
02a_two_objects.py |
การใช้หลาย Objects ทำงานร่วมกัน | ใช้ LED + Button ด้วยกัน |
02b_adding_buzzer.py |
เพิ่ม Buzzer เข้ากับระบบ | เสียงเตือนเมื่อใกล้จุดสมมูล |
02c_titration_alert_system.py |
ระบบแจ้งเตือนสำหรับไทเทรชัน | ระบบตรวจจับจุดสมมูล |
02_buzzer_class.py |
คลาสสำหรับ Buzzer พร้อมเสียงต่างๆ | เสียงแจ้งเตือนหลายรูปแบบ |
03_preparing_for_week2.py |
เตรียมพร้อมสำหรับสัปดาห์ที่ 2 | พื้นฐาน Inheritance |
06_adc_sensor_class.py |
คลาสสำหรับเซ็นเซอร์ ADC | อ่านค่า pH probe |
06_comparing_styles.py |
เปรียบเทียบ Procedural vs OOP | เข้าใจข้อดีของ OOP |
แนะนำ: ศึกษาหลังจากเข้าใจเนื้อหาหลักของ Week 1 แล้ว
เวลาที่ใช้ศึกษา: ประมาณ 2-3 ชั่วโมง Estimated study time: ~2-3 hours
แบบฝึกหัดสำหรับฝึกฝนเพิ่มเติม มีทั้งไฟล์โจทย์ (_starter) และเฉลย (_solution) การฝึกเขียนโค้ดเหมือนกับการฝึกทำการทดลอง ยิ่งฝึกมากยิ่งชำนาญ
ไฟล์อยู่ใน: 03_exercises/exercises/
| ไฟล์ | คำอธิบาย | ความเชื่อมโยงกับเคมี |
|---|---|---|
ex01_status_led_starter.py |
โจทย์: สร้างคลาส StatusLED | ไฟแสดงสถานะการทดลอง |
ex01_status_led_solution.py |
เฉลย: คลาส StatusLED | - |
ex02_potentiometer_starter.py |
โจทย์: สร้างคลาส Potentiometer | จำลอง pH sensor |
ex02_potentiometer_solution.py |
เฉลย: คลาส Potentiometer | - |
ex03_temp_sensor_starter.py |
โจทย์: สร้างคลาส TemperatureSensor | การแก้ค่า pH ตามอุณหภูมิ |
ex03_temp_sensor_solution.py |
เฉลย: คลาส TemperatureSensor | - |
วิธีใช้:
- เปิดไฟล์
_starter.pyและลองทำโจทย์ - ถ้าติดปัญหา ดูคำใบ้ในไฟล์
- เปรียบเทียบกับ
_solution.pyหลังจากทำเสร็จ
เวลาที่ใช้ศึกษา: ประมาณ 1-2 ชั่วโมง Estimated study time: ~1-2 hours
ตัวอย่างการใช้งานฮาร์ดแวร์เฉพาะทางบนบอร์ด TitraLab แต่ละโฟลเดอร์ย่อยมีตัวอย่างสำหรับอุปกรณ์แต่ละชนิด
| ไฟล์ | คำอธิบาย | ความเชื่อมโยงกับเคมี |
|---|---|---|
01_song.py |
เล่นเพลงด้วย Buzzer | เสียงแจ้งเตือนจุดสมมูล |
| ไฟล์ | คำอธิบาย | ความเชื่อมโยงกับเคมี |
|---|---|---|
01_readTemp.py |
อ่านอุณหภูมิพื้นฐาน | วัดอุณหภูมิสารละลาย |
02_temp_sensor_class.py |
คลาส TemperatureSensor แบบละเอียด | ชดเชยค่า pH ตามอุณหภูมิ |
| ไฟล์ | คำอธิบาย | ความเชื่อมโยงกับเคมี |
|---|---|---|
01_test_SDCard.py |
อ่าน-เขียนข้อมูลลง SD Card | บันทึกข้อมูล titration curve |
| ไฟล์ | คำอธิบาย | ความเชื่อมโยงกับเคมี |
|---|---|---|
01_test_display.py |
ทดสอบจอ TFT พื้นฐาน | แสดงค่า pH แบบ real-time |
02_temperature.py |
แสดงอุณหภูมิบนจอ | แสดงข้อมูลระหว่างทดลอง |
หมายเหตุ: เนื้อหาเสริม ไม่จำเป็นต้องใช้ในหลักสูตรหลัก
| ไฟล์ | คำอธิบาย | ความเชื่อมโยงกับเคมี |
|---|---|---|
01_dac_basics.py |
พื้นฐาน DAC - กำหนดระดับแรงดัน | สัญญาณอ้างอิงสำหรับสอบเทียบ |
02_dac_waveform.py |
สร้างคลื่นสัญญาณต่างๆ | ใช้ใน Cyclic Voltammetry |
เวลาที่ใช้ศึกษา: ใช้เมื่อต้องการ Estimated study time: Use as needed
เอกสารอ้างอิงสำหรับทบทวนและค้นหาข้อมูลเมื่อติดปัญหา
| ไฟล์ | คำอธิบาย |
|---|---|
01_self_explained.py |
อธิบาย self อย่างละเอียด - หัวใจสำคัญของ OOP |
07_common_mistakes.py |
ข้อผิดพลาดที่พบบ่อยใน OOP พร้อมวิธีแก้ไข |
ขา GPIO มาตรฐานสำหรับบอร์ด TitraLab (อ้างอิงจาก pins.py):
| ขา GPIO | ค่าคงที่ | คำอธิบาย |
|---|---|---|
| GPIO2 | LED_RED |
LED สีแดง (Red LED) |
| GPIO4 | LED_GREEN |
LED สีเขียว (Green LED) |
| ขา GPIO | ค่าคงที่ | คำอธิบาย |
|---|---|---|
| GPIO34 | BUTTON1 |
ปุ่มกด 1 (Button 1) |
| GPIO35 | BUTTON2 |
ปุ่มกด 2 (Button 2) |
| GPIO39 | BUTTON3 |
ปุ่มกด 3 (Button 3) |
| ขา GPIO | ค่าคงที่ | คำอธิบาย |
|---|---|---|
| GPIO16 | DS18B20_PIN |
เซ็นเซอร์อุณหภูมิ DS18B20 (OneWire) |
| GPIO32 | PH_PIN |
เซ็นเซอร์ pH (ADC1 — ใช้ขาเดียวกับ POT1 ทีละอย่าง, ห้ามใช้ GPIO25) |
| GPIO32 | POT1_PIN |
Potentiometer 1 (ADC) |
| GPIO33 | POT2_PIN |
Potentiometer 2 (ADC) |
| ขา GPIO | ค่าคงที่ | คำอธิบาย |
|---|---|---|
| GPIO26 | BUZZER_PIN |
ลำโพง Buzzer (PWM) |
| GPIO21 | PUMP_PIN |
ปั๊มสำหรับไทเทรชัน (PWM) |
| ขา GPIO | ค่าคงที่ | คำอธิบาย |
|---|---|---|
| GPIO19 | SD_MISO |
SD Card MISO |
| GPIO23 | SD_MOSI |
SD Card MOSI |
| GPIO18 | SD_SCK |
SD Card Clock |
| GPIO5 | SD_CS |
SD Card Chip Select |
| ขา GPIO | ค่าคงที่ | คำอธิบาย |
|---|---|---|
| GPIO14 | TFT_SCK |
TFT SPI Clock |
| GPIO13 | TFT_MOSI |
TFT SPI Data |
| GPIO27 | TFT_DC |
TFT Data/Command |
| GPIO15 | TFT_CS |
TFT Chip Select |
| GPIO0 | TFT_RST |
TFT Reset |
หมายเหตุ:
- ห้ามใช้ GPIO16 สำหรับ LED (สงวนไว้สำหรับ DS18B20)
- ห้ามใช้ GPIO5 สำหรับ LED/PWM (สงวนไว้สำหรับ SD Card CS)
1. เริ่มที่ 01_procedural/ --> ทำความเข้าใจโค้ดพื้นฐาน (~1 ชม.)
2. กลับไปศึกษา core/ --> เข้าใจแนวคิด OOP (~2 ชม.)
3. ลองทำ 03_exercises/ --> ฝึกฝนด้วยตนเอง (~2-3 ชม.)
1. ทำ 03_exercises/ --> ฝึกฝนทุกแบบฝึกหัด (~2-3 ชม.)
2. ศึกษา 02_advanced_oop/ --> เรียนรู้แนวคิดขั้นสูง (~2 ชม.)
1. ศึกษา 04_hardware/ --> เลือกฮาร์ดแวร์ที่ต้องการ (~1-2 ชม.)
2. ใช้ 05_reference/ --> ค้นหาข้อมูลเมื่อติดปัญหา
1. ทบทวน 05_reference/ --> แก้ไขข้อผิดพลาดที่พบบ่อย
2. ศึกษา 02_advanced_oop/ --> เข้าใจ Inheritance เบื้องต้น (~2 ชม.)
| หัวข้อ | ไฟล์ | คำอธิบาย |
|---|---|---|
| OOP Introduction | ../core/01_intro_oop.py |
แนะนำแนวคิด OOP |
| LED Class พื้นฐาน | ../core/02_led_class.py |
ตัวอย่าง Class แรก |
| Button Class | ../core/03_button_class.py |
การจัดการปุ่มกดแบบ OOP |
| Temperature Sensor | ../core/04_temp_sensor_class.py |
คลาสเซ็นเซอร์อุณหภูมิ |
| Display Basics | ../core/05_display_basics.py |
พื้นฐานการแสดงผลบนจอ TFT |
| Combined Example | ../core/06_combined_example.py |
ตัวอย่างการใช้หลายคลาสร่วมกัน |
| อธิบาย self | ./05_reference/01_self_explained.py |
เข้าใจ self อย่างลึกซึ้ง |
| ข้อผิดพลาดที่พบบ่อย | ./05_reference/07_common_mistakes.py |
หลีกเลี่ยงข้อผิดพลาด |
| เปรียบเทียบ Styles | ./02_advanced_oop/06_comparing_styles.py |
Procedural vs OOP |
| ADC Sensor Class | ./02_advanced_oop/06_adc_sensor_class.py |
การอ่านค่า ADC แบบ OOP |
- ลงมือทำจริง - อย่าแค่อ่านโค้ด ให้พิมพ์และรันโค้ดด้วยตัวเอง
- แก้ไขและทดลอง - ลองเปลี่ยนค่าต่างๆ เพื่อดูผลลัพธ์
- ทำแบบฝึกหัดก่อนดูเฉลย - พยายามทำเองก่อน แล้วค่อยเปรียบเทียบ
- จดบันทึก - เขียนสิ่งที่เรียนรู้และข้อสงสัย
- ถามเมื่อไม่เข้าใจ - ติดต่อผู้สอนหรือเพื่อนร่วมชั้น
- เชื่อมโยงกับเคมี - นึกถึงการประยุกต์ใช้ในการทดลองไทเทรชัน
หากมีข้อสงสัย สามารถ:
- ศึกษา README.md หลักของ Week 1:
../README.md - ดูตัวอย่างใน
../core/ - ติดต่อผู้สอนในคาบเรียนหรือช่องทางที่กำหนด
ขอให้สนุกกับการเรียนรู้! Happy Learning!