วิชา: Integrated Chemistry Laboratory I (2302311) การทดลอง: การหาความเข้มข้นของกรดไฮโดรคลอริก (HCl) ด้วยการไทเทรต (titration) ภาควิชาเคมี คณะวิทยาศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย
เมื่อเสร็จสิ้นการทดลองนี้ นิสิตจะสามารถ:
- อธิบายหลักการวัดพีเอช (pH measurement) — เข้าใจความสัมพันธ์ระหว่างศักย์ไฟฟ้า (electric potential) ของขั้วไฟฟ้าแก้ว (glass electrode) กับค่าพีเอชตามสมการเนินสต์ (Nernst equation) และเหตุผลที่ต้องสอบเทียบ (calibration) เซ็นเซอร์ก่อนใช้งาน 1ก. สอบเทียบบอร์ดของตนเองและนำผลไปใช้ (student-performed calibration) — เข้าใจว่าอุปกรณ์ TitraLab ราคาประหยัดแตกต่างกันในแต่ละบอร์ด จึงต้องสอบเทียบทั้งหัววัดพีเอช (3 จุด หา slope_m, intercept_b) และอัตราการไหลของปั๊ม (flow rate) ด้วยตนเองใน Week 2 แล้วเห็นว่าบทเรียน Week 3 นำผลสอบเทียบของบอร์ดตัวเองไปใช้จริง ไม่ใช้ค่าคงที่ตายตัว
- อธิบายการกรองสัญญาณรบกวน (noise rejection) — เข้าใจว่าเหตุใดการวัดศักย์ไฟฟ้า (potentiometric measurement) จึงมีสัญญาณรบกวน และเหตุใดการใช้ค่ามัธยฐาน (median) หรือการกรองแบบทนทาน (robust filtering) จึงให้ค่าพีเอชที่น่าเชื่อถือกว่าค่าเฉลี่ย (mean)
- ดำเนินการไทเทรตอัตโนมัติ (automated titration) — นำเข้าบทเรียนสู่แอป MicroPad เชื่อมต่อบอร์ด TitraLab ผ่านบลูทูธ (BLE) และให้บอร์ดหยดสารไทแทรนต์ (titrant) พร้อมสตรีมข้อมูลพีเอช อุณหภูมิ และปริมาตรสู่แท็บเล็ตแบบเรียลไทม์
- วิเคราะห์กราฟไทเทรต (titration curve) — หาจุดสมมูล (equivalence point) จากความชันสูงสุดของกราฟด้วยวิธีอนุพันธ์ (derivative method, max |dpH/dV|)
- คำนวณความเข้มข้น (concentration) — คำนวณความเข้มข้นของ HCl จากปริมาตร NaOH ที่จุดสมมูล โดยใช้ความสัมพันธ์ C₁V₁ = C₂V₂ พร้อมอัตราส่วนสโตอิชิโอเมตรี (stoichiometric ratio)
- ทำไทเทรตแบบดั้งเดิม (classical titration) — ใช้บิวเรตต์ (burette) และอินดิเคเตอร์ (indicator) หาจุดยุติ (endpoint)
- เปรียบเทียบวิธี (method comparison) — เปรียบเทียบผลจากการไทเทรตอัตโนมัติกับแบบดั้งเดิมในเชิงความแม่นยำ (accuracy) และความเที่ยง (precision)
หมายเหตุสำคัญ — การแบ่งหน้าที่ระหว่าง "ตัวขับ" (เฟิร์มแวร์) กับ "การสอบเทียบ" (นิสิต): อุปกรณ์ TitraLab เป็นของราคาประหยัดและมีความแตกต่างในแต่ละบอร์ด (unit-to-unit variation) ดังนั้นนิสิต ต้องสอบเทียบ (calibrate) ทั้งหัววัดพีเอชและอัตราการไหลของปั๊ม ด้วยตนเอง และการได้ลงมือสอบเทียบ "คือหัวใจของการเรียนรู้" ของบทเรียนนี้ เพื่อให้ชัดเจน ขอบเขตของแต่ละฝ่ายแบ่งดังนี้:
- ตัวขับ (driver) = เฟิร์มแวร์: เฉพาะการอ่านสัญญาณดิบ (raw ADC จากหัววัดพีเอช, OneWire ของ DS18B20, การเปิด/ปิดปั๊มผ่าน PWM) เป็นหน้าที่ของเฟิร์มแวร์ผ่านตัวช่วย
scilabpro(เช่นslp.read_analog('PH'),slp.ds18b20(16),slp.set_actuator(...))- การสอบเทียบ (calibration) = ของนิสิต และเห็นได้ในโค้ด Python: นิสิต คำนวณ ผลสอบเทียบใน Week 2 (หา slope กับ intercept ของพีเอช และอัตราการไหลของปั๊ม) และบทเรียน Week 3 นี้ นำผลสอบเทียบนั้นไปใช้ (apply) อย่างเปิดเผยในโค้ด — แปลงพีเอชด้วยสมการ
pH = slope × mV + interceptและคำนวณเวลาเปิดปั๊มจากอัตรา การไหลที่วัดได้จริงของบอร์ดตัวเองบทเรียนนี้ ไม่ ใช้
slp.ph_probe()/calibration.json(ซึ่งเป็นความสะดวกของแอป ที่ใช้ค่าสอบเทียบของแอป ไม่ใช่ของนิสิต) แต่ใช้ ค่าสอบเทียบที่นิสิตทำเองในแต่ละบอร์ด เสมอ ไม่ใช้ค่าคงที่ตายตัว (never a hard-coded constant) หัวข้อทฤษฎีนี้จึงสอนทั้งหลักการ เคมีเบื้องหลังการวัด และเหตุผลที่นิสิตต้องสอบเทียบเองก่อนนำไปใช้
อ่านหัวข้อนี้ก่อนเริ่มการทดลอง — เป็นหัวใจของบทเรียนและเป็นเงื่อนไขที่บอร์ด ตรวจสอบจริงก่อนยอมเริ่มไทเทรต
เนื่องจากหัววัดพีเอชและปั๊มของแต่ละบอร์ดไม่เหมือนกัน บทเรียน Week 3 จึงทำงานเป็น
"ผู้ใช้" (consumer) ของผลสอบเทียบที่นิสิต "สร้าง" (producer) ไว้ใน Week 2
ทั้งสองสัปดาห์ตกลงใช้ไฟล์เส้นทางเดียวกันในโฟลเดอร์ถาวร /workspace/data/:
| สิ่งที่สอบเทียบ | Week 2 (ผู้สร้าง) เขียนไฟล์ | Week 3 (ผู้ใช้) อ่านไป "ใช้" อย่างไร |
|---|---|---|
| หัววัดพีเอช (pH electrode) — 3 จุด | /workspace/data/ph_calibration.txtคอลัมน์ slope_m,intercept_b,r_squared,cal_temp |
อ่าน slope กับ intercept มาแปลงทุกจุด:pH = slope_m × mV + intercept_b |
| อัตราการไหลของปั๊ม (pump flow rate) | /workspace/data/flow_calibration.txtบรรทัด flow_rate=<mL/s> |
อ่านอัตราการไหลมาคำนวณเวลาเปิดปั๊มต่อหยด:pump_time_ms = DOSE_VOLUME_ML / flow_rate × 1000 |
ความสอดคล้องเชิงตัวเลข (numerical consistency): Week 3 แปลง ADC ดิบเป็นมิลลิโวลต์
ด้วยตัวประกอบ RAW_TO_MV = 3300 / 4095 ≈ 0.806 mV ต่อ 1 นับ ADC ซึ่งเป็น ตัวเดียวกัน
กับที่ Week 2 ใช้ขณะหา slope/intercept (voltage_mv = adc × 3300 / 4095, ADC 12 บิต
0–4095, Vref 3300 mV, ATTN_11DB) ดังนั้นค่าที่นำไปใช้ใน Week 3 จึงสอดคล้องกับค่าที่ผลิต
ใน Week 2 พอดี ถ้าตัวประกอบนี้ไม่ตรงกัน สมการ slope/intercept จะให้พีเอชผิด
บอร์ดจะปฏิเสธการรันถ้าขาดการสอบเทียบ (refuse-to-run guard): เมื่อนิสิตเริ่มบทเรียน
01_titration_auto.py จะ โหลดไฟล์สอบเทียบทั้งสองก่อนแตะแอกชูเอเตอร์ใด ๆ หากไฟล์ใดหายหรือรูปแบบผิด:
- ขาดพีเอช → ส่งเหตุการณ์
ph_calibration_missing(พร้อมคำแนะนำให้รัน Week 201_pH_Sensor/02_calibration_3point.pyก่อน) แล้ว หยุดทันที — ปั๊มไม่ขยับ - ขาดอัตราการไหล → ส่งเหตุการณ์
flow_calibration_missing(พร้อมคำแนะนำให้รัน Week 202_Pump_Control/01_flow_rate_calibration.pyก่อน) แล้ว หยุดทันที — ปั๊มไม่ขยับ
เมื่อโหลดสำเร็จ บอร์ดจะส่งเหตุการณ์ calibration_loaded (พร้อม slope, intercept,
flow rate, และเวลาเปิดปั๊มที่คำนวณได้) ขึ้นแอป เพื่อให้นิสิต เห็นชัดว่ากำลังใช้ค่าสอบเทียบ
ของบอร์ดตัวเองจริง สรุปสั้น ๆ: ไม่สอบเทียบ Week 2 ก่อน = Week 3 จะไม่ยอมรัน
การไทเทรตกรดแก่ (strong acid, HCl) ด้วยเบสแก่ (strong base, NaOH):
HCl(aq) + NaOH(aq) → NaCl(aq) + H₂O(l)
ที่จุดสมมูล (equivalence point) จำนวนโมลของกรดและเบสทำปฏิกิริยาพอดีกัน:
mol HCl = mol NaOH
C_HCl × V_HCl = C_NaOH × V_eq
เนื่องจากเป็นปฏิกิริยากรดแก่-เบสแก่ที่อัตราส่วน 1 : 1 จุดสมมูลทางทฤษฎีจึงอยู่ที่ พีเอช ≈ 7 (เกลือ NaCl ที่เกิดขึ้นเป็นเกลือกลาง)
เซ็นเซอร์พีเอชเป็นขั้วไฟฟ้าแก้ว (glass electrode) ชนิดหนึ่ง เมื่อจุ่มในสารละลายจะเกิด ความต่างศักย์ไฟฟ้า (potential difference) ที่แปรผันตามความเข้มข้นของไฮโดรเจนไอออน ความสัมพันธ์นี้อธิบายด้วย สมการเนินสต์ (Nernst equation):
E = E° − (2.303 RT / nF) × pH
โดย:
| สัญลักษณ์ | ความหมาย | ค่า |
|---|---|---|
| E | ศักย์ไฟฟ้าที่วัดได้ (measured potential) | mV |
| E° | ศักย์ไฟฟ้ามาตรฐาน (standard/offset potential) | mV |
| R | ค่าคงที่ของแก๊ส (gas constant) | 8.314 J·mol⁻¹·K⁻¹ |
| T | อุณหภูมิสัมบูรณ์ (absolute temperature) | K |
| n | จำนวนอิเล็กตรอนที่ถ่ายโอน (n = 1 สำหรับ H⁺) | 1 |
| F | ค่าคงที่ฟาราเดย์ (Faraday constant) | 96485 C·mol⁻¹ |
ที่อุณหภูมิ 25 °C เทอม (2.303 RT / nF) มีค่าประมาณ 59.16 mV ต่อหนึ่งหน่วยพีเอช:
E = E° − (59.16 mV) × pH (ที่ 25 °C)
เขียนกลับเป็นรูปสมการเส้นตรง (linear form) ที่ นิสิตหาค่าใน Week 2 และบทเรียน Week 3 นำไปใช้แปลงค่า (โดยใช้ชื่อคอลัมน์เดียวกับไฟล์สอบเทียบ):
pH = slope_m × E(mV) + intercept_b
โดย slope_m เชิงทฤษฎี ≈ −0.0169 pH/mV (ส่วนกลับของ 59.16 mV/pH) และ intercept_b มีค่าสูง (≈ 34–36) เพราะวงจร LMC6482 บนบอร์ดเลื่อนสัญญาณ (offset) +1650 mV เพื่อให้ พีเอช 7 อยู่กึ่งกลางช่วง ADC
เหตุใดต้องสอบเทียบ (calibration)? ในทางปฏิบัติ E° และความชันจริงของขั้วไฟฟ้า แต่ละหัวเบี่ยงไปจากค่าทฤษฎี และเปลี่ยนไปตามอายุการใช้งานและอุณหภูมิ — และเนื่องจากหัววัด ของแต่ละบอร์ดแตกต่างกัน นิสิตจึง ต้องสอบเทียบหัวของบอร์ดตัวเอง โดยจุ่มหัววัดใน สารละลายกันชน (buffer solution) ที่ทราบพีเอช (พีเอช 4.00, 7.00, 10.00) แล้วใช้ การถดถอยเชิงเส้น (linear regression) หาค่า slope_m กับ intercept_b ที่แท้จริงของหัวนั้น ค่าสัมประสิทธิ์การตัดสินใจ (R²) ที่เข้าใกล้ 1 บ่งชี้ว่าขั้วไฟฟ้าตอบสนองเป็นเส้นตรงตามสมการ เนินสต์ (เกณฑ์ที่ยอมรับ R² ≥ 0.99)
การสอบเทียบนี้นิสิตทำเองใน Week 2 (
01_pH_Sensor/02_calibration_3point.py) ซึ่งคำนวณ slope_m, intercept_b ด้วยการถดถอยเชิงเส้นแล้วบันทึกลง/workspace/data/ph_calibration.txtจากนั้นบทเรียน Week 3 จะ อ่านค่าทั้งสองมาใช้ อย่างเปิดเผยในโค้ด Python — แต่ละจุดบนกราฟ บอร์ดอ่าน ADC ดิบจากไดรเวอร์ (slp.read_analog('PH')), แปลงเป็นมิลลิโวลต์ (mV = raw × RAW_TO_MV), แล้วใช้สมการ ของนิสิตเองpH = slope_m × mV + intercept_b(ฟังก์ชันread_ph_median()ในtitration.py) ไม่ใช้slp.ph_probe()ที่จะไปใช้ค่าสอบเทียบของแอป
การวัดศักย์ไฟฟ้า (potentiometric measurement) ผ่านวงจรแปลงสัญญาณแอนะล็อกเป็นดิจิทัล (ADC) มีสัญญาณรบกวน (noise) จากหลายแหล่ง เช่น สัญญาณรบกวนทางไฟฟ้า ความไม่เสถียร ของขั้วไฟฟ้าขณะพีเอชยังไม่คงที่ และค่ากระโดด (spike) ชั่วขณะ หากนำค่าที่อ่านได้มาเฉลี่ย (mean) ตรง ๆ ค่ากระโดดเพียงค่าเดียวจะดึงค่าเฉลี่ยให้ผิดไปอย่างมาก
วิธีแก้คือใช้ สถิติแบบทนทาน (robust statistics) ซึ่งไม่อ่อนไหวต่อค่าผิดปกติ (outlier):
- ค่ามัธยฐาน (median) — เรียงค่าที่อ่านได้แล้วเลือกค่าตรงกลาง ค่ากระโดดที่ปลายข้อมูล
จะไม่ส่งผลต่อค่ากลาง วิธีนี้คือการกรองที่นิสิตเห็นชัดในโค้ด ฟังก์ชัน
read_ph_median()ในไฟล์titration.pyอ่านค่าหลายครั้ง (median-of-N, ค่าเริ่มต้น 5 ครั้ง) — โดยแต่ละครั้งอ่าน ADC ดิบ → แปลงเป็น mV → ใช้สมการสอบเทียบของนิสิต (pH = slope_m × mV + intercept_b) → จำกัดค่าในช่วง 0–14 — แล้วคืน ค่ามัธยฐาน ของพีเอชที่ได้ เป็นการกรองสัญญาณรบกวนที่ทำในชั้นบทเรียน (Python ที่นิสิตอ่าน/แก้ไขได้) - การกรองแบบ IQR/Tukey (Tukey's fences) — วิธีที่ละเอียดกว่า ใช้พิสัยระหว่างควอร์ไทล์
(interquartile range, IQR = Q₃ − Q₁) กำหนดขอบเขต [Q₁ − 1.5·IQR, Q₃ + 1.5·IQR]
ค่าที่อยู่นอกขอบเขตนี้ถือเป็น outlier และถูกตัดทิ้งก่อนเฉลี่ย เป็นแนวทางขั้นสูงที่นิสิต
สามารถนำไปต่อยอด
read_ph_median()ได้ (เปลี่ยนจาก median เป็น IQR/Tukey)
สรุป: ค่าพีเอชแต่ละจุดที่เห็นบนแท็บเล็ตเกิดจากบทเรียนเอง — บอร์ดอ่าน ADC ดิบจากไดรเวอร์ เฟิร์มแวร์ (
slp.read_analog('PH')) แล้วโค้ดบทเรียน (read_ph_median) ใช้สมการสอบเทียบ ของนิสิตแปลงเป็นพีเอช พร้อมเก็บ ค่ามัธยฐานของการอ่านหลายครั้ง เพื่อตัดค่ากระโดด ของ ADC ทำให้แต่ละจุดบนกราฟไทเทรตเสถียรและน่าเชื่อถือ — การกรองทั้งหมดอยู่ในโค้ด ที่นิสิตเห็น ไม่ได้ซ่อนอยู่ในเฟิร์มแวร์
กราฟพีเอชเทียบกับปริมาตรไทแทรนต์ (pH vs volume) ของการไทเทรตกรดแก่-เบสแก่มีรูปตัว S (sigmoidal) ช่วงก่อนและหลังจุดสมมูลพีเอชเปลี่ยนช้า แต่ที่บริเวณจุดสมมูลพีเอชเปลี่ยน อย่างรวดเร็วที่สุด ดังนั้น ความชันของกราฟ (อนุพันธ์อันดับหนึ่ง dpH/dV) จึงมีค่าสูงสุด ที่จุดสมมูลพอดี
dpH/dV = (pH[i] − pH[i−1]) / (V[i] − V[i−1])
วิธีหาจุดสมมูลจากกราฟ:
- First Derivative (dpH/dV): จุดสมมูลคือจุดที่ |dpH/dV| สูงสุด (ความชันมากที่สุด)
— นี่คือวิธีที่คลาส
TitrationAnalysisในไฟล์titration.pyใช้ (เมท็อดdetect_equivalence_point()ค้นหาดัชนีที่ |dpH/dV| มากที่สุด) - Second Derivative (d²pH/dV²): จุดสมมูลคือจุดที่อนุพันธ์อันดับสองเป็น ศูนย์ (zero crossing — จุดเปลี่ยนเว้า/นูนของเส้นโค้ง)
- pH = 7 Method: สำหรับกรดแก่-เบสแก่ จุดสมมูลอยู่ที่พีเอช ≈ 7 (ใช้ตรวจทานคร่าว ๆ)
รูปที่ 1: ตัวอย่างผลการวิเคราะห์กราฟไทเทรต (จากเครื่องมือ EquivPoint) แสดงกราฟพีเอช อนุพันธ์อันดับหนึ่ง และอนุพันธ์อันดับสอง โดยทั้งสามวิธีให้ค่าจุดสมมูลใกล้เคียงกัน
เมื่อทราบปริมาตรที่จุดสมมูล (V_eq) จากกราฟ คำนวณความเข้มข้นของสารตัวอย่าง (analyte) ที่ไม่ทราบค่าได้จาก:
ที่จุดสมมูล: ratio × mol(titrant) = mol(analyte)
ratio × C_titrant × V_eq = C_analyte × V_sample
ดังนั้น: C_analyte = ratio × C_titrant × V_eq / V_sample
โดย ratio คืออัตราส่วนสโตอิชิโอเมตรี (mol analyte ต่อ mol titrant) = 1.0 สำหรับ
HCl + NaOH (1 : 1) และเปลี่ยนเป็น 2 สำหรับกรดไดโปรติก เช่น H₂SO₄ — นี่คือสิ่งที่เมท็อด
calculate_unknown_concentration() ในไฟล์ titration.py ทำ
ในการทดลองนี้ใช้อินดิเคเตอร์ (indicator) เพื่อสังเกตจุดยุติด้วยสายตา ควบคู่กับค่าพีเอช ที่วัดจากเซ็นเซอร์:
| สถานะ | ช่วงพีเอช | สีที่สังเกต |
|---|---|---|
| กรด (acidic) | < 6.0 | เหลือง (yellow) |
| เปลี่ยนสี (transition) | 6.0 – 7.6 | เขียว (green) |
| เบส (basic) | > 7.6 | น้ำเงิน (blue) |
| สถานะ | ช่วงพีเอช | สีที่สังเกต |
|---|---|---|
| กรด (acidic) | < 8.2 | ไม่มีสี (colorless) |
| เปลี่ยนสี (transition) | 8.2 – 10.0 | ชมพูอ่อน (light pink) |
| เบส (basic) | > 10.0 | ชมพูเข้ม (magenta) |
เปรียบเทียบอินดิเคเตอร์ทั้งสอง:
| คุณสมบัติ | Bromothymol Blue | Phenolphthalein |
|---|---|---|
| ช่วงพีเอช | 6.0 – 7.6 | 8.2 – 10.0 |
| ใกล้จุดสมมูล (พีเอช 7)? | ใกล้มาก | ค่อนข้างไกล |
| สังเกตง่าย? | เขียว → น้ำเงิน | ไม่มีสี → ชมพู |
วัตถุประสงค์ของการใช้อินดิเคเตอร์: เปรียบเทียบจุดยุติ (endpoint) จากการเปลี่ยนสีกับจุดสมมูล ที่ได้จากเซ็นเซอร์พีเอช เพื่อประเมินว่าอินดิเคเตอร์ชนิดใดเหมาะสมกว่าสำหรับกรดแก่-เบสแก่
| สารเคมี | ความเข้มข้น | ปริมาณ | หมายเหตุ |
|---|---|---|---|
| HCl (analyte/สารตัวอย่าง) | ไม่ทราบ (~0.1 M) | 5.00 mL | ใช้ปิเปตต์ |
| NaOH (titrant/สารไทแทรนต์) | 0.1000 M | ~50 mL | สารละลายมาตรฐาน |
| Bromothymol Blue | 0.04% aq. | 2-3 หยด | อินดิเคเตอร์ (พีเอช 6.0-7.6) |
| Phenolphthalein | 1% in ethanol | 2-3 หยด | อินดิเคเตอร์ (พีเอช 8.2-10) |
| Buffer พีเอช 4.00 / 7.00 / 10.00 | - | อย่างละ 30 mL | นิสิตใช้สอบเทียบหัววัดพีเอชเองใน Week 2 |
| น้ำกลั่น (DI water) | - | 500 mL | ล้างและเจือจาง |
| อุปกรณ์ | จำนวน | หมายเหตุ |
|---|---|---|
| บอร์ด TitraLab Ver. 1.0 | 1 ชุด | ESP32 + เฟิร์มแวร์ MicroPad |
| แท็บเล็ต + แอป MicroPad | 1 | เป็นจอแสดงผลหลัก เชื่อมต่อผ่าน BLE |
| หัววัดพีเอช (pH electrode) | 1 | ต่อเข้าช่อง PH_PROBE |
| เซ็นเซอร์อุณหภูมิ DS18B20 | 1 | ต่อเข้าช่อง TEMP_PROBE |
| ปั๊มเพอริสตัลติก (peristaltic pump) | 1 | ต่อเข้า endpoint CONTROL_1 |
| บีกเกอร์ 50 mL | 1 | เซลล์ไทเทรต (titration cell) |
| ปิเปตต์ 5 mL (Class A) + ลูกยาง | 1 | ดูด HCl |
| ขวดฉีดน้ำกลั่น + กระดาษเช็ดเลนส์ | - | ล้างและซับหัววัด |
ตารางการต่อสายจัมเปอร์เฉพาะบทเรียนนี้ (Wiring / Jumper — lesson subset)
| Endpoint (ชื่อ endpoint) | GPIO | Device (อุปกรณ์) | Note (หมายเหตุ) |
|---|---|---|---|
PH_PROBE |
32 | หัววัดพีเอช (pH electrode) | ADC1 — ปลอดภัยต่อ Wi-Fi; ห้ามใช้ GPIO25 (ADC2) |
DS18B20 |
16 | เซ็นเซอร์อุณหภูมิ (temperature) | 1-Wire; ต้องมี pull-up 4.7 kΩ |
CONTROL_1 |
21 | ปั๊มเพอริสตัลติก (peristaltic pump) | แอกชูเอเตอร์มีตัวจับเวลาฮาร์ดแวร์ตัดไฟอัตโนมัติ; บทเรียนเปิดด้วยเพดาน DOSE_MAX_ON_MS = 1500 ms และเวลาเปิดต่อหยดคำนวณจาก flow rate ที่สอบเทียบ |
GREEN |
4 | ไฟ LED แสดงสถานะ (status LED) | - |
BUTTON_1 |
34 | ปุ่มเริ่ม (start button) | input-only — อ่านอย่างเดียว ห้ามขับเป็น output |
BUZZER |
26 | บัซเซอร์แจ้งเตือน (buzzer) | max-on 1500 ms |
หมายเหตุการต่อสาย: ตารางนี้สะท้อนโปรไฟล์การเดินสาย (routing profile)
titralab_v1_default(ณ วันที่ 2026-06-25) เฉพาะ endpoint ที่บทเรียนนี้ใช้ เท่านั้น บอร์ด TitraLab ต่อสายแบบจัมเปอร์ (jumper) ระหว่างหัว GPIO กับหัว DEVICES และเฟิร์มแวร์เป็นผู้แปลง ชื่อ endpoint (เช่นCONTROL_1) ให้เป็นเลขขา GPIO ผ่านโปรไฟล์นี้ ดังนั้นนิสิต ไม่ต้อง ระบุเลขขาตรง ๆ ในโค้ด (do not hard-code pins) ให้อ้างถึงอุปกรณ์ด้วยชื่อ endpoint เสมอ ผู้สอน/ผู้ช่วยสอนใช้ตารางนี้ตั้งค่าจัมเปอร์ ให้บอร์ดตรงกับโปรไฟล์ที่บทเรียนนี้สมมุติไว้ ดูตารางการต่อสายฉบับเต็มในUSER_MANUAL.md
| อุปกรณ์ | จำนวน | หมายเหตุ |
|---|---|---|
| บิวเรตต์ 25 หรือ 50 mL (Class A) | 1 | อ่านค่าทศนิยม 2 ตำแหน่ง |
| ขาตั้งบิวเรตต์พร้อม clamp | 1 ชุด | - |
| ขวดรูปชมพู่ 125 mL | 1 | สำหรับไทเทรต |
| กระดาษขาว | 1 แผ่น | รองใต้ขวด ช่วยสังเกตสี |
| ปิเปตต์ 5 mL (Class A) + กรวยกรอง | 1 | ใช้ร่วมกับ TitraLab |
┌─────────────────────────────────────────────────────────────────┐
│ การแบ่งกลุ่ม: 2-3 คน/กลุ่ม │
│ │
│ แต่ละกลุ่มทำการทดลอง 2 ส่วน แล้วนำผลมาเปรียบเทียบกัน: │
│ │
│ ส่วนที่ 1: TitraLab + MicroPad (ไทเทรตอัตโนมัติ) │
│ → บอร์ดหยด NaOH อัตโนมัติ สตรีมพีเอช/อุณหภูมิ/ปริมาตรสู่แท็บเล็ต │
│ → หา V_eq จากวิธีอนุพันธ์ (max |dpH/dV|) │
│ → สังเกตการเปลี่ยนสี BTB และ Phenolphthalein ควบคู่กัน │
│ │
│ ส่วนที่ 2: Classical Titration (ไทเทรตด้วยบิวเรตต์) │
│ → หา V_endpoint จากการสังเกตสีอินดิเคเตอร์ │
│ │
│ ⚠️ ทำทั้งสองส่วนอย่างน้อย 3 ซ้ำ (replicate) แล้วเปรียบเทียบผล │
└─────────────────────────────────────────────────────────────────┘
⚠️ ต้องทำขั้นตอนนี้ก่อน มิฉะนั้น Week 3 จะ "ปฏิเสธการรัน"
อุปกรณ์ TitraLab แต่ละบอร์ดต่างกัน นิสิตจึงต้องสอบเทียบ "หัววัดพีเอช" และ
"อัตราการไหลของปั๊ม" ของบอร์ดตัวเองก่อน บทเรียนนี้จะนำผลสอบเทียบนั้นไปใช้
1. สอบเทียบหัววัดพีเอชแบบ 3 จุด (Week 2)
→ รัน Week_2/01_pH_Sensor/02_calibration_3point.py
→ จุ่มหัววัดในบัฟเฟอร์ พีเอช 4.00 → 7.00 → 10.00 ตามลำดับ กดปุ่มบันทึกแต่ละจุด
→ โปรแกรมคำนวณ slope_m, intercept_b (linear regression) และตรวจ R² ≥ 0.99
→ บันทึกลงไฟล์ /workspace/data/ph_calibration.txt (เก็บถาวร ไม่หายเมื่อรีบูต)
2. สอบเทียบอัตราการไหลของปั๊ม (Week 2)
→ รัน Week_2/02_Pump_Control/01_flow_rate_calibration.py
→ ปั๊มน้ำลงกระบอกตวง จับเวลา อ่านปริมาตร คำนวณ flow rate (ทำซ้ำ 3-5 ครั้ง)
→ บันทึกลงไฟล์ /workspace/data/flow_calibration.txt (บรรทัด flow_rate=<mL/s>)
3. ตรวจสอบว่ามีไฟล์สอบเทียบทั้งสองในโฟลเดอร์ /workspace/data/ ก่อนไป Week 3
┌──────────────────────────────────────────────────────────────────────┐
│ Week 3 จะตรวจไฟล์สอบเทียบ "ก่อนสั่งปั๊มใด ๆ": │
│ • ถ้าขาด ph_calibration.txt → ส่ง event "ph_calibration_missing" │
│ แล้วหยุดทันที (ปั๊มไม่ขยับ) พร้อมข้อความให้กลับไปรัน Week 2 pH │
│ • ถ้าขาด flow_calibration.txt → ส่ง event "flow_calibration_missing" │
│ แล้วหยุดทันที (ปั๊มไม่ขยับ) พร้อมข้อความให้กลับไปรัน Week 2 flow │
│ • ถ้าครบ → ส่ง event "calibration_loaded" (แสดง slope/intercept/ │
│ flow_rate/เวลาเปิดปั๊ม) แล้วจึงเริ่มไทเทรตด้วยค่าของบอร์ดคุณเอง │
└──────────────────────────────────────────────────────────────────────┘
📌 การได้ลงมือสอบเทียบเอง "คือหัวใจของบทเรียน" — บอร์ดราคาประหยัดต่างกันทุกตัว
และผลการไทเทรตจะแม่นยำได้ก็ต่อเมื่อใช้ค่าสอบเทียบจริงของบอร์ดนั้น
1. ต่อสายจัมเปอร์อุปกรณ์ตาม USER_MANUAL.md (pH→PH_PROBE, อุณหภูมิ→TEMP_PROBE,
ปั๊ม→CONTROL_1, LED, BUTTON_1, buzzer)
2. จ่ายไฟบอร์ด TitraLab และตรวจว่าบอร์ดเริ่มทำงาน (boot) เรียบร้อย
3. เปิดแอป MicroPad บนแท็บเล็ต → สแกนหาบอร์ดผ่านบลูทูธ (BLE) → จับคู่ (pair)
4. นำเข้า (import) บทเรียน Week 3 (Acid-Base Titration) เข้าสู่แอป
5. ตรวจสอบว่าหน้าจอแอปแสดงค่าพร้อมรับข้อมูลสด (live pH / temperature / volume)
แท็บเล็ตคือจอแสดงผลหลัก — บอร์ด TitraLab รุ่น MicroPad ไม่มีเมนูบนจอ TFT ของบอร์ด อีกต่อไป ค่าทั้งหมด (พีเอช อุณหภูมิ ปริมาตร เหตุการณ์) จะสตรีมขึ้นแอปบนแท็บเล็ต
⚠️ ขั้นตอนสำคัญ — อ่านให้เข้าใจก่อนทำ
1. ใช้ปิเปตต์ดูด HCl 5.00 mL ใส่บีกเกอร์ 50 mL (เซลล์ไทเทรต)
2. เติมน้ำกลั่นประมาณ 5 mL เพื่อให้หัววัดพีเอชจม glass bulb พอดี
┌─────────────────────────────────────────────────────┐
│ ทำไมต้องเติมน้ำกลั่น? │
│ • หัววัดพีเอชต้องจมถึง glass bulb จึงจะวัดได้ │
│ • การเติมน้ำกลั่นไม่เปลี่ยน "จำนวนโมล" ของ HCl │
│ • จุดสมมูลขึ้นกับจำนวนโมล ไม่ใช่ความเข้มข้น │
│ • ปริมาตร HCl ที่แน่นอนคือ 5.00 mL (จากปิเปตต์) │
└─────────────────────────────────────────────────────┘
3. หยดอินดิเคเตอร์:
- Bromothymol Blue 2-3 หยด → สารละลายเป็นสีเหลือง (เพราะ HCl เป็นกรด พีเอช < 6)
- Phenolphthalein 2-3 หยด → ยังไม่มีสี
4. จุ่มหัววัดพีเอช เซ็นเซอร์อุณหภูมิ และปลายท่อไทแทรนต์ในบีกเกอร์
5. ตรวจว่า glass bulb ของหัววัดจมอยู่ในสารละลาย และท่อไทแทรนต์เติม NaOH เต็ม
ไม่มีฟองอากาศ (ไล่ฟองด้วยการเดินปั๊มสั้น ๆ ผ่านแอปหากจำเป็น)
1. กดเริ่มบทเรียนในแอป MicroPad → แอปสั่งให้บอร์ดรัน 01_titration_auto.py
2. การเริ่มแบบ local (ถ้าตั้งค่า WAIT_FOR_LOCAL_START):
- บอร์ดส่งเหตุการณ์ "waiting_for_start" → ไฟเขียว (LED) กะพริบรอ
- กดปุ่ม BUTTON_1 บนบอร์ดเพื่อเริ่ม (หรือรอจนหมดเวลาแล้วเริ่มอัตโนมัติ)
- ไฟเขียวติดค้าง = การทดลองกำลังดำเนิน
3. ระบบจะทำงานวนรอบโดยอัตโนมัติ:
- หยด NaOH ทีละ 0.2 mL (DOSE_VOLUME_ML) ผ่าน endpoint CONTROL_1
• เวลาเปิดปั๊มต่อหยด "คำนวณจากอัตราการไหลที่สอบเทียบ" ของบอร์ดตัวเอง
(closed-loop บนปริมาตร): pump_time_ms = DOSE_VOLUME_ML / flow_rate × 1000
— ไม่ใช่ค่าคงที่ตายตัว ดังนั้นปริมาตรที่รายงานจึงเท่ากับปริมาตรที่ "ส่งจริง"
• เวลาที่คำนวณถูก clamp ไม่เกิน DOSE_MAX_ON_MS (1500 ms) และเปิดปั๊มด้วย
max_on_ms เพื่อให้ฮาร์ดแวร์ไทเมอร์ตัดเอง พร้อมปิดปั๊มชัดเจนทุกครั้งหลังหยด
- รอให้พีเอชคงที่ ~10 วินาที (SETTLE_MS)
- อ่านพีเอชแบบมัธยฐาน (อ่าน 5 ครั้ง) — แต่ละครั้งอ่าน ADC ดิบแล้วใช้สมการสอบเทียบ
ของนิสิต (pH = slope_m × mV + intercept_b) + อ่านอุณหภูมิ
- สตรีมค่า volume_ml / pH / temp_c ขึ้นแอปทุกจุด
- ทำซ้ำจนครบปริมาตรสูงสุด (MAX_VOLUME_ML = 10.0 mL)
4. 👁️ สังเกตการเปลี่ยนสีอินดิเคเตอร์บนเซลล์จริง ควบคู่กับกราฟบนแท็บเล็ต:
┌────────────────────────────────────────────────────┐
│ 🟡 Bromothymol Blue: เหลือง → เขียว (พีเอช 6-7.6) │
│ → น้ำเงิน (พีเอช > 7.6) │
│ 📝 บันทึกปริมาตรที่สีเปลี่ยนจากเขียวเป็นน้ำเงิน │
│ 🩷 Phenolphthalein: ไม่มีสี → ชมพู (พีเอช > 8.2) │
│ 📝 บันทึกปริมาตรที่เริ่มเห็นสีชมพู │
└────────────────────────────────────────────────────┘
5. เสียงบัซเซอร์ (buzzer):
- บี๊บสั้น 1 ครั้ง (ความถี่สูง) = ใกล้ถึงปริมาตรเตือน ALERT_VOLUME_ML (4.80 mL)
→ เตรียมสังเกตการเปลี่ยนสีและจุดสมมูลให้ดี
- เสียง 2 โน้ตตอนท้าย = ไทเทรตเสร็จสิ้น (เหตุการณ์ titration_complete)
6. หากต้องการหยุดกลางคัน กดปุ่มหยุดในแอป — บอร์ดตรวจคำสั่งหยุด (stop_requested)
ทุกลูป แล้วปิดปั๊ม/บัซเซอร์/ไฟอย่างปลอดภัย และส่งเหตุการณ์ titration_aborted
เมื่อเสร็จ บอร์ดส่งเหตุการณ์ titration_complete พร้อมผลสรุปขึ้นแอป:
- equivalence_volume_ml = ปริมาตรที่จุดสมมูล (V_eq จาก max |dpH/dV|)
- equivalence_ph = พีเอช ณ จุดสมมูล
- unknown_concentration_m = ความเข้มข้น HCl ที่คำนวณได้ (mol/L)
- total_volume_ml = ปริมาตรไทแทรนต์รวมที่หยด
📝 บันทึกค่าเหล่านี้ลงตารางผล (หัวข้อ 9) และสังเกตกราฟ pH–volume รูปตัว S บนแท็บเล็ต
1. ล้างบีกเกอร์และหัววัดพีเอชด้วยน้ำกลั่น ซับแห้ง
2. เตรียม HCl ใหม่ (ขั้นตอนที่ 2)
3. รันไทเทรตซ้ำ (ขั้นตอนที่ 3-4) อย่างน้อย 3 ซ้ำ
4. บันทึก V_eq และความเข้มข้นที่คำนวณได้ของแต่ละซ้ำ
บันทึก: หากต้องการเก็บข้อมูลกราฟดิบเพื่อวิเคราะห์เพิ่มเติม สามารถส่งออก (export) ชุดข้อมูลที่สตรีมไว้จากแอป MicroPad แล้วนำไปวิเคราะห์ด้วยเครื่องมือ EquivPoint (
python equiv_point.py <file>.csv --save) เพื่อเทียบจุดสมมูลจากทั้งสามวิธีในรูปที่ 1
1. ล้างบิวเรตต์ด้วยน้ำกลั่น 2-3 ครั้ง
2. ล้างบิวเรตต์ด้วย NaOH 0.1000 M 2-3 ครั้ง (conditioning)
3. เติม NaOH 0.1000 M จนเกือบเต็ม → ไล่ฟองอากาศที่ปลายบิวเรตต์
4. ปรับระดับให้อยู่ที่ 0.00 mL (หรือบันทึกค่าเริ่มต้น)
⚠️ การอ่านค่าบิวเรตต์:
• อ่านที่ส่วนโค้งต่ำสุดของ meniscus
• สายตาอยู่ระดับเดียวกับ meniscus (หลีกเลี่ยง parallax error)
• อ่านทศนิยม 2 ตำแหน่ง (±0.01 mL)
1. ใช้ปิเปตต์ดูด HCl 5.00 mL ใส่ขวดรูปชมพู่ 125 mL
2. เติมน้ำกลั่น ~20 mL (ไม่ต้องแม่นยำ — ไม่เปลี่ยนจำนวนโมล HCl)
3. เลือกอินดิเคเตอร์ตัวใดตัวหนึ่ง:
🟡 Bromothymol Blue 2-3 หยด → สีเริ่มต้นเหลือง, จุดยุติ: เขียว → น้ำเงินอ่อน
🩷 Phenolphthalein 2-3 หยด → สีเริ่มต้นไม่มีสี, จุดยุติ: ชมพูอ่อนคงอยู่ 30 วินาที
4. วางกระดาษขาวรองใต้ขวดเพื่อช่วยสังเกตสี
1. บันทึกค่าเริ่มต้นบนบิวเรตต์ (V_initial)
2. เปิด stopcock ปล่อย NaOH หยดลงในขวด
- ช่วงแรก: ปล่อยเร็วได้ ~1-2 mL/ครั้ง
- ใกล้จุดยุติ: ปล่อยช้า ทีละหยด
3. เขย่าขวดตลอดเวลาขณะไทเทรต (มือถนัดจับ stopcock, อีกมือเขย่าขวด)
4. สังเกตการเปลี่ยนสี:
BTB: เหลือง → เขียว → น้ำเงินอ่อน (จุดยุติคือสีเขียวอมน้ำเงิน)
Ph.ph: ไม่มีสี → ชมพูจาง ๆ (จุดยุติคือชมพูอ่อนคงอยู่ 30 วินาที)
5. ปิด stopcock เมื่อถึงจุดยุติ → บันทึกค่าสุดท้าย (V_final)
6. คำนวณ: V_endpoint = V_final − V_initial
1. เติม NaOH ในบิวเรตต์ → เตรียม HCl ใหม่ในขวดรูปชมพู่
2. ทำไทเทรตซ้ำอย่างน้อย 3 ครั้ง บันทึกผลทุกครั้ง
💡 Tips: ครั้งแรกไทเทรตเร็วเพื่อหา endpoint คร่าว ๆ ครั้งต่อไปไทเทรตช้าใกล้จุดยุติ
จากจุดสมมูล (ใช้กับทั้งสองส่วน — V_eq จากเซ็นเซอร์ หรือ V_endpoint จากบิวเรตต์):
ratio × C_NaOH × V_eq = C_HCl × V_HCl
C_HCl = ratio × C_NaOH × V_eq / V_HCl (ratio = 1.0 สำหรับ HCl + NaOH)
ตัวอย่าง:
ถ้า V_eq = 4.85 mL, C_NaOH = 0.1000 M, V_HCl = 5.00 mL, ratio = 1.0
C_HCl = 1.0 × 0.1000 × 4.85 / 5.00 = 0.0970 M
ค่าเฉลี่ย: x̄ = (Σ xᵢ) / n
ส่วนเบี่ยงเบนมาตรฐาน: SD = √[ Σ(xᵢ − x̄)² / (n−1) ]
ความเที่ยงสัมพัทธ์: %RSD = (SD / x̄) × 100
เกณฑ์: %RSD ≤ 1% = ดีเยี่ยม (Excellent), ≤ 2% = ดี (Good)
| สารเคมี | อันตราย | การป้องกัน |
|---|---|---|
| HCl | กัดกร่อน, ระคายเคือง | สวมแว่นตานิรภัย, ถุงมือ |
| NaOH | กัดกร่อน, ไหม้ผิวหนัง | สวมแว่นตานิรภัย, ถุงมือ |
| Buffer | ระคายเคืองเล็กน้อย | ระวังไม่ให้เข้าตา |
⚠️ ความปลอดภัยของปั๊มเป็นหน้าที่ของเฟิร์มแวร์ (hardware-enforced)
• ปั๊มถูกเปิดพร้อมเพดานเวลา max_on_ms เสมอ — ฮาร์ดแวร์ไทเมอร์ของเฟิร์มแวร์จะตัด
ปั๊มเองเมื่อครบเวลา แม้สคริปต์จะค้าง (เช่น while True ค้าง) ปั๊มก็จะไม่เปิดค้าง
• บทเรียนยัง "ปิดปั๊มอย่างชัดเจน" (explicit OFF) ในทุกเส้นทางออก (finally)
• แอกชูเอเตอร์ (actuator) ทั้งหมดตั้งค่าเริ่มต้นเป็นปิด เมื่อบูต รีเซ็ต ตัดการเชื่อมต่อ BLE
หรือออกจากโปรแกรมด้วยข้อผิดพลาด
1. หัววัดพีเอช: ล้างด้วยน้ำกลั่นทุกครั้งที่เปลี่ยนสารละลาย, ซับแห้งด้วยกระดาษเช็ดเลนส์
(ห้ามถู), ห้ามปล่อยให้ glass bulb แห้ง
2. การไทเทรต: ตรวจว่าท่อไทแทรนต์ไม่มีฟองอากาศ, หัววัดจมตลอดเวลา, ห้ามขยับบีกเกอร์
ระหว่างไทเทรต
3. ปิเปตต์: ใช้ลูกยางดูด ห้ามใช้ปาก
4. การจับคู่ BLE: หากการเชื่อมต่อหลุด ปั๊มจะปิดอัตโนมัติ — ให้เชื่อมต่อใหม่แล้วเริ่มซ้ำ
| Run | V_eq (เซ็นเซอร์, mL) | pH ณ จุดสมมูล | V_endpoint BTB (mL) | V_endpoint Ph.ph (mL) | C_HCl (M) |
|---|---|---|---|---|---|
| R1 | |||||
| R2 | |||||
| R3 | |||||
| Mean | |||||
| SD | |||||
| %RSD |
หมายเหตุ:
- V_eq = จุดสมมูลจากวิธีอนุพันธ์ (max |dpH/dV|) ที่บอร์ดคำนวณและส่งขึ้นแอป
- V_endpoint (BTB) = ปริมาตรที่ Bromothymol Blue เปลี่ยนจากเขียวเป็นน้ำเงิน
- V_endpoint (Ph.ph) = ปริมาตรที่ Phenolphthalein เริ่มเปลี่ยนเป็นชมพู
ใช้ Bromothymol Blue:
| Run | V_initial (mL) | V_final (mL) | V_endpoint (mL) | C_HCl (M) |
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| Mean / SD / %RSD |
ใช้ Phenolphthalein:
| Run | V_initial (mL) | V_final (mL) | V_endpoint (mL) | C_HCl (M) |
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 | ||||
| Mean / SD / %RSD |
| วิธี | V_endpoint (mL) | C_HCl (M) | %RSD | หมายเหตุ |
|---|---|---|---|---|
| TitraLab (เซ็นเซอร์ pH) | วิธีอนุพันธ์ | |||
| TitraLab (BTB) | สังเกตสี | |||
| TitraLab (Ph.ph) | สังเกตสี | |||
| Classical (BTB) | บิวเรตต์ | |||
| Classical (Ph.ph) | บิวเรตต์ |
ค่าอ้างอิง (reference): V_eq จาก TitraLab (เซ็นเซอร์พีเอช, วิธีอนุพันธ์)
% Error = |V_method − V_reference| / V_reference × 100
เปรียบเทียบ:
• TitraLab vs Classical → ความแม่นยำ (accuracy) ของวิธีอัตโนมัติ
• BTB vs Phenolphthalein → ความเหมาะสมของอินดิเคเตอร์
• %RSD → ความเที่ยง (precision) ของแต่ละวิธี
-
สมการเนินสต์ (Nernst equation): ระบุความสัมพันธ์ระหว่างศักย์ไฟฟ้าของขั้วไฟฟ้าแก้วกับค่าพีเอช และอธิบายว่าเหตุใด ที่ 25 °C ความชันจึงเป็น 59.16 mV ต่อหนึ่งหน่วยพีเอช หากอุณหภูมิสูงขึ้นความชันนี้ จะเปลี่ยนไปอย่างไร?
-
เหตุใดต้องสอบเทียบเซ็นเซอร์พีเอช? อธิบายว่าเหตุใดค่า slope_m และ intercept_b จริงจึงต่างจากค่าทฤษฎี และค่า R² ≥ 0.99 ในการสอบเทียบบอกอะไรเกี่ยวกับขั้วไฟฟ้า
2ก. ห่วงโซ่การสอบเทียบ (calibrate-first chain):
- บทเรียน Week 3 ใช้ค่าสอบเทียบจากไฟล์ใดบ้าง และไฟล์เหล่านั้นถูกสร้างเมื่อใด (สัปดาห์ใด สคริปต์ใด)?
- ถ้านิสิตข้ามการสอบเทียบ Week 2 แล้วเริ่ม Week 3 ทันที จะเกิดอะไรขึ้น
(อ้างถึงเหตุการณ์
ph_calibration_missing/flow_calibration_missing) เหตุใดการออกแบบให้ "ปฏิเสธการรันเมื่อขาดการสอบเทียบ" จึงสำคัญต่อความปลอดภัย และความถูกต้องของผลการทดลอง? - เหตุใดจึงต้องใช้ตัวประกอบแปลง mV เดียวกัน (3300/4095) ทั้งตอนสอบเทียบ (Week 2) และตอนนำไปใช้ (Week 3)? ถ้าทั้งสองไม่ตรงกันจะเกิดอะไรกับค่าพีเอช?
2ข. การสอบเทียบอัตราการไหลของปั๊ม (flow rate):
เหตุใดจึงต้องสอบเทียบอัตราการไหลของปั๊มแต่ละบอร์ด แทนที่จะใช้เวลาเปิดปั๊มค่าคงที่?
อธิบายว่าการคำนวณเวลาเปิดปั๊มจาก pump_time_ms = DOSE_VOLUME_ML / flow_rate × 1000
ทำให้ "ปริมาตรที่รายงานเท่ากับปริมาตรที่ส่งจริง" อย่างไร
-
การกรองสัญญาณรบกวน (noise rejection): เหตุใดการวัดศักย์ไฟฟ้าจึงควรใช้ค่ามัธยฐาน (median) หรือการกรองแบบ IQR/Tukey แทนค่าเฉลี่ย (mean)? ยกตัวอย่างสถานการณ์ที่ค่ากระโดด (spike) เพียงค่าเดียวจะทำให้ ค่าเฉลี่ยผิดไปมากแต่ค่ามัธยฐานยังถูกต้อง
-
การหาจุดสมมูลด้วยอนุพันธ์: เหตุใด |dpH/dV| จึงมีค่าสูงสุดที่จุดสมมูลพอดี? เปรียบเทียบจุดสมมูลที่ได้จากวิธี first derivative, second derivative และ pH = 7 — วิธีใดแม่นยำที่สุด เพราะเหตุใด?
-
ถ้าไม่เติมน้ำกลั่นในเซลล์ไทเทรตจะเกิดอะไรขึ้น? อธิบายผลต่อการวัดพีเอช และอธิบายว่าเหตุใดการเติมน้ำกลั่นจึงไม่กระทบจุดสมมูล
-
เปรียบเทียบจุดยุติจากอินดิเคเตอร์ทั้งสอง:
- V_endpoint ของ BTB และ Phenolphthalein ต่างกันหรือไม่ เท่าไร?
- พีเอชที่ BTB เปลี่ยนสี (เขียว→น้ำเงิน) อยู่ในช่วง transition (6.0-7.6) หรือไม่?
- อินดิเคเตอร์ตัวใดให้จุดยุติใกล้ V_eq จากเซ็นเซอร์มากกว่า เพราะเหตุใด?
-
ทำไม Bromothymol Blue จึงเหมาะกว่า Phenolphthalein สำหรับกรดแก่-เบสแก่? อธิบายโดยใช้ช่วงพีเอช transition และจุดสมมูลทางทฤษฎี (พีเอช ≈ 7)
-
อัตราส่วนสโตอิชิโอเมตรี: ถ้าเปลี่ยนสารตัวอย่างเป็น H₂SO₄ (กรดไดโปรติก) ค่า ratio ในสมการ C_analyte = ratio × C_titrant × V_eq / V_sample ควรเป็นเท่าใด เพราะเหตุใด?
-
เปรียบเทียบ TitraLab กับ Classical Titration:
เปรียบเทียบ TitraLab + MicroPad Classical (บิวเรตต์) ความแม่นยำ (accuracy) ? ? ความเที่ยง (precision) ? ? ความสะดวก ? ? ข้อมูลที่ได้ (กราฟเต็มเส้น vs จุดยุติเดียว) ? ? แหล่งความคลาดเคลื่อน ? ?
- Harris, D.C. (2016). Quantitative Chemical Analysis (9th ed.). W.H. Freeman.
- Skoog, D.A., West, D.M., Holler, F.J., & Crouch, S.R. (2014). Fundamentals of Analytical Chemistry (9th ed.). Cengage Learning.
- SciLabPro MicroPad — TitraLab Lesson: Week 3 (
01_titration_auto.py,titration.py,experiment.py). - SciLabPro MicroPad — TitraLab Lesson: Week 2 calibration (ผู้สร้างไฟล์สอบเทียบ):
01_pH_Sensor/02_calibration_3point.py(→/workspace/data/ph_calibration.txt),02_Pump_Control/01_flow_rate_calibration.py(→/workspace/data/flow_calibration.txt).
LAB DIRECTION v2.1 | TitraLab + MicroPad — Integrated Chemistry Laboratory I (2302311) Department of Chemistry, Faculty of Science, Chulalongkorn University
