ทำไมยุงกัดจึงคันและบวม มันคือผลจากปากยุงทิ่มลงไปหรือ ?

หลายท่านอาจสงสัยว่าอาการจี๊ด ๆ และคัน ๆ เวลายุงกัดเกิดจากอะไร ?  เกิดจากปากยุงทิ่มลงผิวหนังของเราหรือไม่ ?

ความจริงก็คือ …. ลำพังปากยุงไม่ได้ทำให้เรารู้สึกได้ขนาดนั้นเลย  แต่อาการคันเกิดขึ้นเนื่องจากสาร Histamine จากเซลล์ภูมิคุ้มกัน (Immune cells) ของเราเอง  เซลล์เหล่านี้เรียกว่า mast cells  โดยเมื่อส่วนผิวหนังถูกกระตุ้นอย่างเช่นเป็นรอยถลอกหรือถูกยุงกัด/ถูกแมลงกัด  mast cells จะปล่อยสาร histamine ออกมาเพื่อกระตุ้นให้ระบบภูมิคุ้มกันหลักของร่างกายเราทำงาน  

กลไกภูมิคุ้มกันของร่างกายบริเวณผิวหนังไม่ได้แยกแยะว่าสิ่งแปลกปลอมเหล่านั้นคืออะไร  มันมีหน้าที่อย่างเดียวก็คือลำเลียงเซลล์เม็ดเลือดขาวชนิดพิเศษที่ต่อต้านเชื้อโรคมาที่จุดเกิดเหตุให้เร็วที่สุดเพื่อมาต่อต้านสิ่งแปลกปลอมเหล่านั้นครับ  และการหลั่งสาร Histamine คือด่านแรกของกลไกนี้

โดย Histamine มันจะเริ่มทำให้หลอดเลือดในบริเวณนั้นขยายตัวดึงดูดเซลล์ภูมิคุ้มกัน ช่วยให้เซลล์เม็ดเลือดขาวชนิดพิเศษที่ต่อต้านเชื้อโรคเดินทางไปยังบริเวณที่ติดเชื้อได้อย่างรวดเร็วเพื่อทำลายแบคทีเรีย

แต่ Histamine เวลามันทำงานจะมีผลข้างเคียง คือมันจะไปจับกับตัวรับ (Receptor) H1 และ H4 ปลายประสาทในผิวหนัง  การจับตัวกันนี้จะกระตุ้นเส้นใยประสาทส่งสัญญาณไฟฟ้าไปยังไขสันหลังและสมอง ซึ่งรับรู้ได้ว่าเป็นอาการ “คัน” ครับ

ภาพประกอบผมทำจาก ChatGPT


หลายท่านคงเคยได้ยินยา Antihistamines หรือยาแก้แพ้  มันคือยาที่ถูกใช้กันแพร่หลายเป็นเรื่องปกติ  ยากลุ่มนี้จะทำหน้าที่ยับยั้งการทำงานของ Histamin ซึ่งคนที่เป็นภูมิแพ้ก็จะมีโอกาสสารพัดที่ไม่พึงประสงค์เกิดจากการทำงานของ Histamin เองครับ  ยาแก้แพ้จะช่วยหยุดอาการต่าง ๆ เช่น จาม คัน น้ำตาไหล   สารเคมีในยาแก้แพ้ทำหน้าที่เหมือน “ลูกกุญแจ” ที่พอดีกับแม่กุญแจของ receptor H1 , H4 เพื่อป้องกันไม่ให้ Histamin มาเกาะติดที่ปลาย receptor H1 , H4 และก่อให้เกิดปฏิกิริยาได้

ESP32 (EP.10) ESP32 กับการใช้วัดความถี่และแสดง parameters

ESP32 นั้นสามารถทำงานเป็นตัวนับความถี่และวิเคราะห์รูปคลื่นแสดง parameter ต่าง ๆ ได้อย่างแม่นยำ โดยใน ESP32 มันจะมี hardware อยู่ตัวหนึ่งที่เรียกว่า MCPWM (Motor Control Pulse Width Modulator)  ซึ่ง MCPWM จะเป็น dedicated hardware ที่แยกออกไปทำงานในฟังก์ชันนี้แบบเดี่ยวเลย มันทำงานโดยอาศัย clock ความเร็วสูง 80 MHz คือ APB (Advanced Peripheral Bus)  และ MCPWM มีคุณสมบัติที่แม่นยำมากในการที่จะ capture  โดยทำงานจาก MCPWM Capture Submodule ด้วยการ capture ช่วงขอบขาขึ้นหรือขอบขาลง (Rising/Falling edge) ของคลื่นสี่เหลื่ยมใด ๆ ก็ได้

ภาพ block diagram แบบเต็มของ MCPWM ในการใช้คุมมอเตอร์ BLDC แบบ 3 เฟส ….ซึ่งใน project นี้จะใช้เพียงส่วน MCPWM Capture Submodule 2 ขาเท่านั้น (CAP0 , CAP1)  โดยรับคลื่นสี่เหลี่ยมเข้าทาง GPIO 11 และใช้ code สั่ง Capture Submodule + GPIO Matrix ให้เทียบเวลาของขอบขาขึ้น / ขอบขาลงของคลื่นสี่เหลี่ยมซึ่งการทำเพียงเท่านี้ก็ได้ข้อมูลครบถ้วนสมบูรณ์แล้วที่จะหาค่าของความถี่ , duty cycle , ON/OFF pulse width


ในโครงสร้างของ project นี้จะใช้ web dashboard โดยการทำงานก็จะเชื่อมต่อกันระหว่าง MCPWM Capture Submodule ส่งค่าฐานเวลาที่มัน capture ได้ไปยัง web dashboard และคำนวณออกมาเป็นค่าความถี่ , duty cycle , ON/OFF pulse width  และด้วยความทรงพลังของ HTML5 canvas ก็สามารถเขียน script ให้มันวาดรูปออกมาเป็นรูปคลื่นสี่เหลี่ยม + แสดง parameter อื่น ๆ ได้เลยตามภาพตัวอย่างด้านล่างนี้ครับ

ในคลิปด้านล่างนี้จะเห็นว่าออกแบบให้ dashboard update การแสดงผล 3 ครั้งต่อ 1 วินาที (ใน code ของ ESP32 จะใช้ library ESPAsyncWebServer + WebSockets เพื่อจะได้ update ตัวเลขต่าง ๆ ได้อิสระจาก main loop) …. และเมื่อทดลองเปลี่ยนความถี่ในหน้า web dashboard ก็จะแสดงค่าความถี่ที่เปลี่ยนไปและแสดงรูปคลื่นในรูปแบบของกราฟิก โดยบอก parameter ทั้งหมดมาให้ด้วย ซึ่งก็เป็นเรื่องที่น่าทึ่งว่า HTML สมัยนี้ทำได้ขนาดนี้เลยครับ  แต่ภาพของลูกคลื่นสี่เหลี่ยมที่เห็นนี้ไม่ใช่การวัดโดยตรงเหมือน Oscilloscope นะครับ  แต่เป็นการแสดงค่าเฉย ๆ

อุปกรณ์ที่ใช้มีเพียงเท่านี้

ESP32 (EP.9) ESP32 กับการใช้เป็น native USB device (HID)

ESP32 S3 (รุ่น S3 นะครับ ไม่ใช่ ESP32 ธรรมดา) มีความสามารถพิเศษอย่างหนึ่งก็คือตัวมันจะมี native USB hardware ใน chip  ก็คือเมื่อเสียบเข้า USB port ของ PC/Notebook  ESP32 S3 สามารถทำตัวเป็นอุปกรณ์ input แบบ USB โดยเป็นได้ทั้ง mouse / keyboard และอื่น ๆ ตามแต่เราจะเขียน code ประยุกต์มันให้เป็นอุปกรณ์ USB

ใน project สาธิตของกระทู้นี้ก็จะเสนอแนวทางการประยุกต์ใช้งานให้ทำงานเป็น USB keyboard และ mouse โดยรับ input ใด ๆ เข้ามาทางขา GPIO และส่งสัญญาณไปที่ PC เหมือนกับเรากดคีย์บอร์ดของคอมพิวเตอร์  ใน project นี้ผมจะสาธิตในรูปแบบของเกมสนุกอันนึงใน google chrome ก็คือเกมไดโน

ท่านที่ใช้ Google Chrome พิมพ์แบบนี้ที่ address bar ได้เลย
chrome://dino

เกมไดโนนี้เวลาเล่นจะต้องกดปุ่มลูกศรขึ้น (ARROW_UP) เพื่อให้ไดโนเสาร์กระโดดข้ามต้นกระบองเพชร โดยผมจะใช้ตัว LDR รับค่าของความสว่างในจอภาพ PC เพื่อนำไปเป็นสัญญาณกระตุ้นที่ขา GPIO ให้ ESP32 S3 สังสัญญาณเสมือนกับกดปุ่ม ARROW_UP เพื่อให้ตัวไดโนเสาร์กระโดดหลบต้นกระบองเพชรครับ

อุปกรณ์ที่ใช้มีเพียงเท่านี้


ขอเริ่มที่ตัว sensor ก่อน ใน project นี้จะใช้ sensor แสงพื้นฐานก็คือตัว LDR รับค่าความสว่างบนจอ PC  ก็คือในเกมนี้จะเป็นพื้นหลังสีดำอยู่แล้วและเมื่อมีสิ่งกีดขวางข้างหน้าไดโนเสาร์เลื่อนมา (ต้นกระบองเพชร) มันจะเป็นสีออกเทา-ขาวซึ่งก็หมายความว่าความสว่างจะเปลี่ยน  LDR ก็จะรับค่านี้ได้และไปสั่งงานให้ ESP32 S3 ส่งสัญญาณผ่าน USB ไปที่คอมพิวเตอร์เหมือนกับการปุ่มลูกศรขึ้น (ARROW_UP) เพื่อให้ไดโนเสาร์กระโดดครับ

ในการใช้งาน LDR เชื่อมต่อกับ ESP32 S3 จะต้องสร้างวงจรเองก็คือใช้ LM393 เป็นตัว comparator  ที่ต้องทำแบบนี้เพื่อจะได้มีสัญญาณ trigger ที่คมมากพอ …. จริง ๆ แล้วสามารถใช้ LDR ต่อกับตัวความต้านทานก็ได้ป้อนเข้า GPIO ก็ได้แต่ค่าแรงดันในการเปลี่ยนจาก logic 0 ไปเป็น logic 1 มันจะไม่ค่อยคมซึ่งมีผลต่อ delay time เป็นอย่างมากทำให้ส่งสัญญาณให้ไดโนเสาร์กระโดดพลาดได้ ดังนั้นจึงต้องใช้ comparator มาช่วยครับวงจรตามภาพล่างนี้

ในการติดตั้งตัว LDR ก็จ่อเข้ากับจอภาพง่าย ๆ อย่างนี้เลย

ผลลัพท์ออกมาแบบนี้


นอกจากนี้แล้วด้วยความที่ ESP32 S3 มันเป็นอุปกรณ์ native USB ดังนั้นจึงสั่งให้ประยุกต์ใช้งานให้สามารถ “พิมพ์” ข้อความไปที่โปรแกรมใด ๆ ก็ได้ใน windows อย่างในคลิปบนนี้เลื่อนไปวินาทีที่ 45 ก็คือพิมพ์ข้อความภาษาอังกฤษ  ซึ่งใน code สามารถเขียน delay time ได้ว่าจะให้พิมพ์ช้าหรือเร็วเท่าไหร่  แต่การประยุกต์ใช้งานลักษณะการพิมพ์เองแบบนี้ผมก็ยังนึกไม่ค่อยออกเท่าไหร่ครับ  ดังนั้นการประยุกต์ใช้งานแบบ sensor ร่วมกับเกมไดโนเสาร์กระโดดแบบข้างบนจะมีประโยชน์มากกว่า

ในการที่จะส่งสัญญาณผ่าน USB กับทำได้ทั้ง Keyboard / Mouse  ซึ่งใน library สามารถสั่งงานได้อย่างง่าย ๆ ว่าให้เลื่อน mouse cursor อย่างไร …. จากในคลิปบน (ที่เวลา 1:02) จะเห็นว่าสามารถวาดเป็นวงกลมได้ซึ่งถ้าเราทำด้วยมือไม่มีทางทำได้กลม perfect แบบนี้แต่ใน code ทำได้ครับ

ก็หวังว่าท่านที่สนใจคงจะได้ไอเดียไปประยุกต์ใช้งานเพื่อให้เป็นเสมือนอุปกรณ์ USB สำหรับคอมพิวเตอร์ได้นะครับ