Skip to content

Latest commit

 

History

History
727 lines (557 loc) · 65.3 KB

File metadata and controls

727 lines (557 loc) · 65.3 KB

LAB DIRECTION: Acid-Base Titration with TitraLab + MicroPad

คู่มือปฏิบัติการ: การไทเทรตกรด-เบสด้วยระบบ TitraLab และแอป MicroPad

วิชา: Integrated Chemistry Laboratory I (2302311) การทดลอง: การหาความเข้มข้นของกรดไฮโดรคลอริก (HCl) ด้วยการไทเทรต (titration) ภาควิชาเคมี คณะวิทยาศาสตร์ จุฬาลงกรณ์มหาวิทยาลัย


1. วัตถุประสงค์ (Objectives)

เมื่อเสร็จสิ้นการทดลองนี้ นิสิตจะสามารถ:

  1. อธิบายหลักการวัดพีเอช (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 นำผลสอบเทียบของบอร์ดตัวเองไปใช้จริง ไม่ใช้ค่าคงที่ตายตัว
  2. อธิบายการกรองสัญญาณรบกวน (noise rejection) — เข้าใจว่าเหตุใดการวัดศักย์ไฟฟ้า (potentiometric measurement) จึงมีสัญญาณรบกวน และเหตุใดการใช้ค่ามัธยฐาน (median) หรือการกรองแบบทนทาน (robust filtering) จึงให้ค่าพีเอชที่น่าเชื่อถือกว่าค่าเฉลี่ย (mean)
  3. ดำเนินการไทเทรตอัตโนมัติ (automated titration) — นำเข้าบทเรียนสู่แอป MicroPad เชื่อมต่อบอร์ด TitraLab ผ่านบลูทูธ (BLE) และให้บอร์ดหยดสารไทแทรนต์ (titrant) พร้อมสตรีมข้อมูลพีเอช อุณหภูมิ และปริมาตรสู่แท็บเล็ตแบบเรียลไทม์
  4. วิเคราะห์กราฟไทเทรต (titration curve) — หาจุดสมมูล (equivalence point) จากความชันสูงสุดของกราฟด้วยวิธีอนุพันธ์ (derivative method, max |dpH/dV|)
  5. คำนวณความเข้มข้น (concentration) — คำนวณความเข้มข้นของ HCl จากปริมาตร NaOH ที่จุดสมมูล โดยใช้ความสัมพันธ์ C₁V₁ = C₂V₂ พร้อมอัตราส่วนสโตอิชิโอเมตรี (stoichiometric ratio)
  6. ทำไทเทรตแบบดั้งเดิม (classical titration) — ใช้บิวเรตต์ (burette) และอินดิเคเตอร์ (indicator) หาจุดยุติ (endpoint)
  7. เปรียบเทียบวิธี (method comparison) — เปรียบเทียบผลจากการไทเทรตอัตโนมัติกับแบบดั้งเดิมในเชิงความแม่นยำ (accuracy) และความเที่ยง (precision)

2. ทฤษฎี (Theory)

หมายเหตุสำคัญ — การแบ่งหน้าที่ระหว่าง "ตัวขับ" (เฟิร์มแวร์) กับ "การสอบเทียบ" (นิสิต): อุปกรณ์ 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) หัวข้อทฤษฎีนี้จึงสอนทั้งหลักการ เคมีเบื้องหลังการวัด และเหตุผลที่นิสิตต้องสอบเทียบเองก่อนนำไปใช้

2.0 ห่วงโซ่การสอบเทียบ: สอบเทียบก่อน แล้วจึงนำไปใช้ (The Calibrate-First Chain)

อ่านหัวข้อนี้ก่อนเริ่มการทดลอง — เป็นหัวใจของบทเรียนและเป็นเงื่อนไขที่บอร์ด ตรวจสอบจริงก่อนยอมเริ่มไทเทรต

เนื่องจากหัววัดพีเอชและปั๊มของแต่ละบอร์ดไม่เหมือนกัน บทเรียน 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 2 01_pH_Sensor/02_calibration_3point.py ก่อน) แล้ว หยุดทันที — ปั๊มไม่ขยับ
  • ขาดอัตราการไหล → ส่งเหตุการณ์ flow_calibration_missing (พร้อมคำแนะนำให้รัน Week 2 02_Pump_Control/01_flow_rate_calibration.py ก่อน) แล้ว หยุดทันที — ปั๊มไม่ขยับ

เมื่อโหลดสำเร็จ บอร์ดจะส่งเหตุการณ์ calibration_loaded (พร้อม slope, intercept, flow rate, และเวลาเปิดปั๊มที่คำนวณได้) ขึ้นแอป เพื่อให้นิสิต เห็นชัดว่ากำลังใช้ค่าสอบเทียบ ของบอร์ดตัวเองจริง สรุปสั้น ๆ: ไม่สอบเทียบ Week 2 ก่อน = Week 3 จะไม่ยอมรัน

2.1 ปฏิกิริยาการไทเทรต (Titration Reaction)

การไทเทรตกรดแก่ (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 ที่เกิดขึ้นเป็นเกลือกลาง)

2.2 สมการเนินสต์และการวัดพีเอช (The Nernst Equation and pH Measurement)

เซ็นเซอร์พีเอชเป็นขั้วไฟฟ้าแก้ว (glass electrode) ชนิดหนึ่ง เมื่อจุ่มในสารละลายจะเกิด ความต่างศักย์ไฟฟ้า (potential difference) ที่แปรผันตามความเข้มข้นของไฮโดรเจนไอออน ความสัมพันธ์นี้อธิบายด้วย สมการเนินสต์ (Nernst equation):

E = E° − (2.303 RT / nF) × pH

โดย:

สัญลักษณ์ ความหมาย ค่า
E ศักย์ไฟฟ้าที่วัดได้ (measured potential) mV
ศักย์ไฟฟ้ามาตรฐาน (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() ที่จะไปใช้ค่าสอบเทียบของแอป

2.3 การกรองสัญญาณรบกวนแบบทนทาน (Robust Filtering of Noisy pH Readings)

การวัดศักย์ไฟฟ้า (potentiometric measurement) ผ่านวงจรแปลงสัญญาณแอนะล็อกเป็นดิจิทัล (ADC) มีสัญญาณรบกวน (noise) จากหลายแหล่ง เช่น สัญญาณรบกวนทางไฟฟ้า ความไม่เสถียร ของขั้วไฟฟ้าขณะพีเอชยังไม่คงที่ และค่ากระโดด (spike) ชั่วขณะ หากนำค่าที่อ่านได้มาเฉลี่ย (mean) ตรง ๆ ค่ากระโดดเพียงค่าเดียวจะดึงค่าเฉลี่ยให้ผิดไปอย่างมาก

วิธีแก้คือใช้ สถิติแบบทนทาน (robust statistics) ซึ่งไม่อ่อนไหวต่อค่าผิดปกติ (outlier):

  1. ค่ามัธยฐาน (median) — เรียงค่าที่อ่านได้แล้วเลือกค่าตรงกลาง ค่ากระโดดที่ปลายข้อมูล จะไม่ส่งผลต่อค่ากลาง วิธีนี้คือการกรองที่นิสิตเห็นชัดในโค้ด ฟังก์ชัน read_ph_median() ในไฟล์ titration.py อ่านค่าหลายครั้ง (median-of-N, ค่าเริ่มต้น 5 ครั้ง) — โดยแต่ละครั้งอ่าน ADC ดิบ → แปลงเป็น mV → ใช้สมการสอบเทียบของนิสิต (pH = slope_m × mV + intercept_b) → จำกัดค่าในช่วง 0–14 — แล้วคืน ค่ามัธยฐาน ของพีเอชที่ได้ เป็นการกรองสัญญาณรบกวนที่ทำในชั้นบทเรียน (Python ที่นิสิตอ่าน/แก้ไขได้)
  2. การกรองแบบ 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 ทำให้แต่ละจุดบนกราฟไทเทรตเสถียรและน่าเชื่อถือ — การกรองทั้งหมดอยู่ในโค้ด ที่นิสิตเห็น ไม่ได้ซ่อนอยู่ในเฟิร์มแวร์

2.4 กราฟไทเทรตและการหาจุดสมมูลด้วยอนุพันธ์ (Titration Curve & Equivalence Point by Derivative)

กราฟพีเอชเทียบกับปริมาตรไทแทรนต์ (pH vs volume) ของการไทเทรตกรดแก่-เบสแก่มีรูปตัว S (sigmoidal) ช่วงก่อนและหลังจุดสมมูลพีเอชเปลี่ยนช้า แต่ที่บริเวณจุดสมมูลพีเอชเปลี่ยน อย่างรวดเร็วที่สุด ดังนั้น ความชันของกราฟ (อนุพันธ์อันดับหนึ่ง dpH/dV) จึงมีค่าสูงสุด ที่จุดสมมูลพอดี

dpH/dV = (pH[i] − pH[i−1]) / (V[i] − V[i−1])

วิธีหาจุดสมมูลจากกราฟ:

  1. First Derivative (dpH/dV): จุดสมมูลคือจุดที่ |dpH/dV| สูงสุด (ความชันมากที่สุด) — นี่คือวิธีที่คลาส TitrationAnalysis ในไฟล์ titration.py ใช้ (เมท็อด detect_equivalence_point() ค้นหาดัชนีที่ |dpH/dV| มากที่สุด)
  2. Second Derivative (d²pH/dV²): จุดสมมูลคือจุดที่อนุพันธ์อันดับสองเป็น ศูนย์ (zero crossing — จุดเปลี่ยนเว้า/นูนของเส้นโค้ง)
  3. pH = 7 Method: สำหรับกรดแก่-เบสแก่ จุดสมมูลอยู่ที่พีเอช ≈ 7 (ใช้ตรวจทานคร่าว ๆ)

Titration Curve Analysis

รูปที่ 1: ตัวอย่างผลการวิเคราะห์กราฟไทเทรต (จากเครื่องมือ EquivPoint) แสดงกราฟพีเอช อนุพันธ์อันดับหนึ่ง และอนุพันธ์อันดับสอง โดยทั้งสามวิธีให้ค่าจุดสมมูลใกล้เคียงกัน

2.5 การคำนวณความเข้มข้นด้วย C₁V₁ = C₂V₂ (Concentration via Stoichiometry)

เมื่อทราบปริมาตรที่จุดสมมูล (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 ทำ

2.6 อินดิเคเตอร์กรด-เบส (Acid-Base Indicators)

ในการทดลองนี้ใช้อินดิเคเตอร์ (indicator) เพื่อสังเกตจุดยุติด้วยสายตา ควบคู่กับค่าพีเอช ที่วัดจากเซ็นเซอร์:

Bromothymol Blue (BTB) — บรอมไทมอลบลู

สถานะ ช่วงพีเอช สีที่สังเกต
กรด (acidic) < 6.0 เหลือง (yellow)
เปลี่ยนสี (transition) 6.0 – 7.6 เขียว (green)
เบส (basic) > 7.6 น้ำเงิน (blue)

Phenolphthalein — ฟีนอล์ฟทาลีน

สถานะ ช่วงพีเอช สีที่สังเกต
กรด (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) จากการเปลี่ยนสีกับจุดสมมูล ที่ได้จากเซ็นเซอร์พีเอช เพื่อประเมินว่าอินดิเคเตอร์ชนิดใดเหมาะสมกว่าสำหรับกรดแก่-เบสแก่


3. สารเคมีและอุปกรณ์ (Chemicals and Equipment)

3.1 สารเคมี (Chemicals)

สารเคมี ความเข้มข้น ปริมาณ หมายเหตุ
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 ล้างและเจือจาง

3.2 อุปกรณ์ TitraLab + MicroPad (Automated Titration)

อุปกรณ์ จำนวน หมายเหตุ
บอร์ด 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

3.3 อุปกรณ์ไทเทรตแบบดั้งเดิม (Classical Titration)

อุปกรณ์ จำนวน หมายเหตุ
บิวเรตต์ 25 หรือ 50 mL (Class A) 1 อ่านค่าทศนิยม 2 ตำแหน่ง
ขาตั้งบิวเรตต์พร้อม clamp 1 ชุด -
ขวดรูปชมพู่ 125 mL 1 สำหรับไทเทรต
กระดาษขาว 1 แผ่น รองใต้ขวด ช่วยสังเกตสี
ปิเปตต์ 5 mL (Class A) + กรวยกรอง 1 ใช้ร่วมกับ TitraLab

4. การแบ่งกลุ่มและการทดลอง (Group Work)

┌─────────────────────────────────────────────────────────────────┐
│  การแบ่งกลุ่ม: 2-3 คน/กลุ่ม                                      │
│                                                                 │
│  แต่ละกลุ่มทำการทดลอง 2 ส่วน แล้วนำผลมาเปรียบเทียบกัน:          │
│                                                                 │
│  ส่วนที่ 1: TitraLab + MicroPad (ไทเทรตอัตโนมัติ)              │
│    → บอร์ดหยด NaOH อัตโนมัติ สตรีมพีเอช/อุณหภูมิ/ปริมาตรสู่แท็บเล็ต │
│    → หา V_eq จากวิธีอนุพันธ์ (max |dpH/dV|)                     │
│    → สังเกตการเปลี่ยนสี BTB และ Phenolphthalein ควบคู่กัน        │
│                                                                 │
│  ส่วนที่ 2: Classical Titration (ไทเทรตด้วยบิวเรตต์)           │
│    → หา V_endpoint จากการสังเกตสีอินดิเคเตอร์                    │
│                                                                 │
│  ⚠️ ทำทั้งสองส่วนอย่างน้อย 3 ซ้ำ (replicate) แล้วเปรียบเทียบผล   │
└─────────────────────────────────────────────────────────────────┘

5. วิธีการทดลอง ส่วนที่ 1: TitraLab + MicroPad (Procedure Part 1)

ขั้นตอนที่ 0 (บังคับก่อนเริ่ม): สอบเทียบบอร์ดของคุณใน Week 2 (Calibrate-First — REQUIRED)

⚠️ ต้องทำขั้นตอนนี้ก่อน มิฉะนั้น 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: เตรียมระบบและเชื่อมต่อแอป (Setup & Pairing)

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 ของบอร์ด อีกต่อไป ค่าทั้งหมด (พีเอช อุณหภูมิ ปริมาตร เหตุการณ์) จะสตรีมขึ้นแอปบนแท็บเล็ต

ขั้นตอนที่ 2: เตรียมสารละลาย Analyte

⚠️ ขั้นตอนสำคัญ — อ่านให้เข้าใจก่อนทำ

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 เต็ม
   ไม่มีฟองอากาศ (ไล่ฟองด้วยการเดินปั๊มสั้น ๆ ผ่านแอปหากจำเป็น)

ขั้นตอนที่ 3: เริ่มไทเทรตอัตโนมัติ (Run the Automated Titration)

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

ขั้นตอนที่ 4: อ่านผลและจุดสมมูลบนแท็บเล็ต (Read Result)

เมื่อเสร็จ บอร์ดส่งเหตุการณ์ 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 บนแท็บเล็ต

ขั้นตอนที่ 5: ทำซ้ำ (Replicate)

1. ล้างบีกเกอร์และหัววัดพีเอชด้วยน้ำกลั่น ซับแห้ง
2. เตรียม HCl ใหม่ (ขั้นตอนที่ 2)
3. รันไทเทรตซ้ำ (ขั้นตอนที่ 3-4) อย่างน้อย 3 ซ้ำ
4. บันทึก V_eq และความเข้มข้นที่คำนวณได้ของแต่ละซ้ำ

บันทึก: หากต้องการเก็บข้อมูลกราฟดิบเพื่อวิเคราะห์เพิ่มเติม สามารถส่งออก (export) ชุดข้อมูลที่สตรีมไว้จากแอป MicroPad แล้วนำไปวิเคราะห์ด้วยเครื่องมือ EquivPoint (python equiv_point.py <file>.csv --save) เพื่อเทียบจุดสมมูลจากทั้งสามวิธีในรูปที่ 1


6. วิธีการทดลอง ส่วนที่ 2: Classical Titration (Procedure Part 2)

ขั้นตอนที่ 1: เตรียมบิวเรตต์ (Burette Preparation)

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)

ขั้นตอนที่ 2: เตรียมสารละลาย Analyte

1. ใช้ปิเปตต์ดูด HCl 5.00 mL ใส่ขวดรูปชมพู่ 125 mL
2. เติมน้ำกลั่น ~20 mL (ไม่ต้องแม่นยำ — ไม่เปลี่ยนจำนวนโมล HCl)
3. เลือกอินดิเคเตอร์ตัวใดตัวหนึ่ง:
   🟡 Bromothymol Blue 2-3 หยด → สีเริ่มต้นเหลือง, จุดยุติ: เขียว → น้ำเงินอ่อน
   🩷 Phenolphthalein 2-3 หยด → สีเริ่มต้นไม่มีสี, จุดยุติ: ชมพูอ่อนคงอยู่ 30 วินาที
4. วางกระดาษขาวรองใต้ขวดเพื่อช่วยสังเกตสี

ขั้นตอนที่ 3: ไทเทรต (Titration)

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

ขั้นตอนที่ 4: ทำซ้ำ (Replicate)

1. เติม NaOH ในบิวเรตต์ → เตรียม HCl ใหม่ในขวดรูปชมพู่
2. ทำไทเทรตซ้ำอย่างน้อย 3 ครั้ง บันทึกผลทุกครั้ง

   💡 Tips: ครั้งแรกไทเทรตเร็วเพื่อหา endpoint คร่าว ๆ ครั้งต่อไปไทเทรตช้าใกล้จุดยุติ

7. การคำนวณ (Calculations)

7.1 หาความเข้มข้นของ HCl

จากจุดสมมูล (ใช้กับทั้งสองส่วน — 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

7.2 ค่าเฉลี่ยและ %RSD

ค่าเฉลี่ย:               x̄ = (Σ xᵢ) / n
ส่วนเบี่ยงเบนมาตรฐาน:    SD = √[ Σ(xᵢ − x̄)² / (n−1) ]
ความเที่ยงสัมพัทธ์:      %RSD = (SD / x̄) × 100

เกณฑ์: %RSD ≤ 1% = ดีเยี่ยม (Excellent), ≤ 2% = ดี (Good)

8. ข้อควรระวัง (Safety and Precautions)

ความปลอดภัยด้านสารเคมี (Chemical Safety)

สารเคมี อันตราย การป้องกัน
HCl กัดกร่อน, ระคายเคือง สวมแว่นตานิรภัย, ถุงมือ
NaOH กัดกร่อน, ไหม้ผิวหนัง สวมแว่นตานิรภัย, ถุงมือ
Buffer ระคายเคืองเล็กน้อย ระวังไม่ให้เข้าตา

ความปลอดภัยของอุปกรณ์อัตโนมัติ (Automation Safety)

⚠️ ความปลอดภัยของปั๊มเป็นหน้าที่ของเฟิร์มแวร์ (hardware-enforced)

• ปั๊มถูกเปิดพร้อมเพดานเวลา max_on_ms เสมอ — ฮาร์ดแวร์ไทเมอร์ของเฟิร์มแวร์จะตัด
  ปั๊มเองเมื่อครบเวลา แม้สคริปต์จะค้าง (เช่น while True ค้าง) ปั๊มก็จะไม่เปิดค้าง
• บทเรียนยัง "ปิดปั๊มอย่างชัดเจน" (explicit OFF) ในทุกเส้นทางออก (finally)
• แอกชูเอเตอร์ (actuator) ทั้งหมดตั้งค่าเริ่มต้นเป็นปิด เมื่อบูต รีเซ็ต ตัดการเชื่อมต่อ BLE
  หรือออกจากโปรแกรมด้วยข้อผิดพลาด

ข้อควรระวังในการทดลอง

1. หัววัดพีเอช: ล้างด้วยน้ำกลั่นทุกครั้งที่เปลี่ยนสารละลาย, ซับแห้งด้วยกระดาษเช็ดเลนส์
   (ห้ามถู), ห้ามปล่อยให้ glass bulb แห้ง
2. การไทเทรต: ตรวจว่าท่อไทแทรนต์ไม่มีฟองอากาศ, หัววัดจมตลอดเวลา, ห้ามขยับบีกเกอร์
   ระหว่างไทเทรต
3. ปิเปตต์: ใช้ลูกยางดูด ห้ามใช้ปาก
4. การจับคู่ BLE: หากการเชื่อมต่อหลุด ปั๊มจะปิดอัตโนมัติ — ให้เชื่อมต่อใหม่แล้วเริ่มซ้ำ

9. ตารางบันทึกผล (Data Recording)

9.1 ผลการไทเทรต TitraLab + MicroPad (Automated)

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 เริ่มเปลี่ยนเป็นชมพู

9.2 ผลการไทเทรตแบบดั้งเดิม (Classical Titration)

ใช้ 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

9.3 ตารางเปรียบเทียบ TitraLab vs Classical (Comparison)

วิธี 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) ของแต่ละวิธี

10. คำถามท้ายการทดลอง (Questions)

  1. สมการเนินสต์ (Nernst equation): ระบุความสัมพันธ์ระหว่างศักย์ไฟฟ้าของขั้วไฟฟ้าแก้วกับค่าพีเอช และอธิบายว่าเหตุใด ที่ 25 °C ความชันจึงเป็น 59.16 mV ต่อหนึ่งหน่วยพีเอช หากอุณหภูมิสูงขึ้นความชันนี้ จะเปลี่ยนไปอย่างไร?

  2. เหตุใดต้องสอบเทียบเซ็นเซอร์พีเอช? อธิบายว่าเหตุใดค่า 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 ทำให้ "ปริมาตรที่รายงานเท่ากับปริมาตรที่ส่งจริง" อย่างไร

  1. การกรองสัญญาณรบกวน (noise rejection): เหตุใดการวัดศักย์ไฟฟ้าจึงควรใช้ค่ามัธยฐาน (median) หรือการกรองแบบ IQR/Tukey แทนค่าเฉลี่ย (mean)? ยกตัวอย่างสถานการณ์ที่ค่ากระโดด (spike) เพียงค่าเดียวจะทำให้ ค่าเฉลี่ยผิดไปมากแต่ค่ามัธยฐานยังถูกต้อง

  2. การหาจุดสมมูลด้วยอนุพันธ์: เหตุใด |dpH/dV| จึงมีค่าสูงสุดที่จุดสมมูลพอดี? เปรียบเทียบจุดสมมูลที่ได้จากวิธี first derivative, second derivative และ pH = 7 — วิธีใดแม่นยำที่สุด เพราะเหตุใด?

  3. ถ้าไม่เติมน้ำกลั่นในเซลล์ไทเทรตจะเกิดอะไรขึ้น? อธิบายผลต่อการวัดพีเอช และอธิบายว่าเหตุใดการเติมน้ำกลั่นจึงไม่กระทบจุดสมมูล

  4. เปรียบเทียบจุดยุติจากอินดิเคเตอร์ทั้งสอง:

    • V_endpoint ของ BTB และ Phenolphthalein ต่างกันหรือไม่ เท่าไร?
    • พีเอชที่ BTB เปลี่ยนสี (เขียว→น้ำเงิน) อยู่ในช่วง transition (6.0-7.6) หรือไม่?
    • อินดิเคเตอร์ตัวใดให้จุดยุติใกล้ V_eq จากเซ็นเซอร์มากกว่า เพราะเหตุใด?
  5. ทำไม Bromothymol Blue จึงเหมาะกว่า Phenolphthalein สำหรับกรดแก่-เบสแก่? อธิบายโดยใช้ช่วงพีเอช transition และจุดสมมูลทางทฤษฎี (พีเอช ≈ 7)

  6. อัตราส่วนสโตอิชิโอเมตรี: ถ้าเปลี่ยนสารตัวอย่างเป็น H₂SO₄ (กรดไดโปรติก) ค่า ratio ในสมการ C_analyte = ratio × C_titrant × V_eq / V_sample ควรเป็นเท่าใด เพราะเหตุใด?

  7. เปรียบเทียบ TitraLab กับ Classical Titration:

    เปรียบเทียบ TitraLab + MicroPad Classical (บิวเรตต์)
    ความแม่นยำ (accuracy) ? ?
    ความเที่ยง (precision) ? ?
    ความสะดวก ? ?
    ข้อมูลที่ได้ (กราฟเต็มเส้น vs จุดยุติเดียว) ? ?
    แหล่งความคลาดเคลื่อน ? ?

11. เอกสารอ้างอิง (References)

  1. Harris, D.C. (2016). Quantitative Chemical Analysis (9th ed.). W.H. Freeman.
  2. Skoog, D.A., West, D.M., Holler, F.J., & Crouch, S.R. (2014). Fundamentals of Analytical Chemistry (9th ed.). Cengage Learning.
  3. SciLabPro MicroPad — TitraLab Lesson: Week 3 (01_titration_auto.py, titration.py, experiment.py).
  4. 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