[TH] Binary Search Tree

บทความนี้เป็นการเขียนโปรแกรมภาษา C/C++ กับบอร์ด Arduino Nano, Arduino Uno, LGT8F328P [NANO F328P-C] และ ET-BASE AVR EASY32U4 (ภาพที่ 1) หรือบอร์ดอื่น ๆ และแพล็ตฟอร์มอื่น ๆ ที่ใช้ภาษา C เพื่อเรียนรู้การเขียนโปรแกรมจัดการโครงสร้างข้อมูล (Data Structure) อีกประเภทหนึ่งซึ่งมีวิธีการจัดเก็บและจัดการที่แตกต่างกันไปอันมีชื่อว่าต้นไม้แบบ BST หรือ Binary Search Tree ดังในภาพที่ 2 ซึ่งเป็นโครงสร้างที่สามารถนำไปประยุกต์เกี่ยวกับการเก็บข้อมูลที่มีคุณลักษณะที่ข้อมูลทางกิ่งด้านซ้ายมีค่าที่น้อยกว่าตัวเอง และกิ่งด้านขวามีค่ามากกว่าต้นเอง หรือทำตรงกันข้ามคือกิ่งซ้ายมีค่ามากกว่า และกิ่งด้านขวามีค่าน้อยกว่า ทำให้การค้นหาข้อมูลในกรณีที่ต้นไม้มีความสมดุลย์ทั้งทางซ้ายและทางขวาบนโครงสร้าง BST ประหยัดเวลาหรือจำนวนครั้งในการค้นหาลงรอบละครึ่งหนึ่งของข้อมูลที่มี เช่น มีข้อมูล 100 ชุด ในรอบแรกถ้าตัวเองยังไม่ใช่ข้อมูลที่กำลังค้นหา จะเหลือทางเลือกให้หาจากกิ่งทางซ้ายหรือขวา ซึ่งการเลือกทำให้ข้อมูลของอีกฝั่งนั้นไม่ถูกพิจารณา หรือตัดทิ้งไปครึ่งหนึ่งโดยประมาณ แต่ถ้าเป็นกรณีที่ Binary Search Tree นั้นขาดความสมดุลย์จะส่งผลให้การค้นหามีความเร็วไม่แตกต่างกับการค้นหาแบบลำดับ (Sequential Search) เท่าใดนัก

ET-BASE AVR EASY32U4
ภาพที่ 1 บอร์ด ET-BASE AVR EASY32U4
Read More

[TH] Doubly Linked-List

บทความนี้เป็นการเขียนโปรแกรมภาษา C/C++ กับบอร์ด กับบอร์ด Arduino Nano, Arduino Uno, LGT8F328P [NANO F328P-C] และ ET-BASE AVR EASY32U4 หรือบอร์ดอื่น ๆ และแพล็ตฟอร์มอื่น ๆ ที่ใช้ภาษา C เพื่อจัดเก็บข้อมูลอุณหภูมิ/ความชื้นจากเซ็นเซอร์ DHT11 (ดังภาพที่ 1) ด้วยโครงสร้างข้อมูลแบบลิงค์ลิสต์คู่ โดยพื้นฐานของการจองหน่วยความจำ การเข้าถึง การยกเลิกการจองหน่วยความจำสามารถอ่านได้จากบทความก่อนหน้านี้ (Singly Linked List)

ภาพที่ 1 บอร์ด Arduino Uno และเซ็นเซอร์ DHT11
Read More

[TH] การตั้งค่า Slicer เบื้องต้นสำหรับการพิมพ์ 3 มิติ

บทความนี้เรามาดูกันเกี่ยวกับการตั้งค่า Slicer เพื่อปรับแต่งค่าตัวแปรต่างๆ ที่จำเป็นต่อการพิมพ์สามมิติให้เหมาะสม โดยใช้ PrusaSlicer ซึ่งค่าทั้งหมดถูกแบ่งเป็น 3 ส่วน ค่าที่ถูกใช้ในบทความนี้เป็นเพียงตัวอย่างบางส่วนเท่านั้น

สิ่งที่ต้องเตรียม

  1. PrusaSlicer ดาวโหลดได้ที่นี่

เริ่มต้นให้เราทำการดาวโหลดโปรแกรม PrusaSlicer และติดตั้งให้เรียบร้อย

เมื่อเปิดโปรแกรมขึ้นมาจะเป็นดังภาพที่ 1

ภาพที่ 1 PrusaSlicer
Read More

[TH] เครื่องพิมพ์ 3 มิติ Ender 3 V2

บทความนี้พูดคุยเกี่ยวกับเครื่องพิมพ์ 3 มิติ Ender 3 V2 ซึ่งเป็นรุ่นปรับปรุงจากรุ่นยอดนิยมของ Creality คือ Ender 3, Ender 3 Pro โดยได้มีการปรับปรุงเรื่องของความง่ายในการประกอบ การใช้งาน คุณภาพของชิ้นงาน เป็นต้น ทำให้เครื่องพิมพ์ 3 มิติรุ่นนี้เหมาะสมสำหรับมือใหม่ที่พึ่งเริ่มใช้งานเครื่องพิมพ์ 3 มิติเป็นอย่างมาก

รูปร่างหน้าตา

ภาพที่ 1 Ender 3 V2
Read More

[TH] Filaments

บทความนี้เป็นเรื่องการพิมพ์สามมิติเกี่ยวกับ Filament ซึ่งเป็นพลาสติกที่ถูกหลอมและนำไปขึ้นรูปเป็นวัตถุต่างๆ ตามต้องการได้ โดยพูดถึงคุณสมบัต ของ Filament ที่ได้รับความนิยม ซึ่งมี 3 ชนิดคือ PLA, PETG, ABS

ภาพที่ 1 เส้นพลาสติก PLA+ สีขาว

ในการพิมพ์สามมิติสิ่งสำคัญที่ขาดไม่ได้คือวัตถุดิบตัวกลางในการขึ้นรูป ซึ่งก็คือ Filament นั่นเอง โดยแต่ละชนิดนั้นมีคุณสมบัติที่แตกต่างกันไป

PLA

PLA เป็นพลาสติกที่ได้รับความนิยมอย่างมากในการพิมพ์สามมิติ วัสถุถูกผลิตจากวัสดุจากธรรมชาติ โดยมีคุณสมบัติคือ

  1. เป็นวัสดุที่แข็ง ยืดหยุ่นได้น้อย
  2. ทนความร้อนได้ต่ำ
  3. แข็งตัวได้ไว

จากคุณสมบัติที่กล่าวมาจะเห็นได้ว่า PLA นั้นเป็นวัสดุที่เหมาะสมกับชิ้นงานที่ไม่โดนความร้อนมาก สามารถขึ้นรูปได้ง่าย มีความคงทนพอสมควร แต่ไม่ควรใช้สร้างวัตถุที่ต้องมีการยืดหยุ่นเยอะ เพราะมีลักษณะยอมหักไม่ยอมงอ ในปัจจุบันได้มีการพัฒนาเพิ่มคุณสมบัติให้กับ PLA โดยผู้ผลิตหลายเจ้าโดยการใส่สารเพิ่มเติมลงไปซึ่งเป็นสูตรของแต่ละเจ้าเพื่อให้ PLA นั้นมีความคงทนมากขึ้น ยืดหยุ่นและทนความร้อนมากขึ้น โดยมีชื่อเรียกที่แตกต่างกันไปเช่น PLA+ PLA Pro เป็นต้น

PETG

เป็นพลาสติกที่ได้รับความนิยมในหมู่คนที่เริ่มมีความรู้เพิ่มขึ้นในการพิมพ์สามมิติ เนื่องจากการพิมพ์ต้องมีการปรับจูนพอสมควรเพื่อให้ได้วัตถุที่ต้องการ มีคุณสมบัติคือ

  1. เป็นวัสดุที่แข็ง แต่ยืดหยุ่นได้มาก
  2. ทนความร้อนได้มากขึ้นกว่า PLA
  3. แข็งตัวได้ช้าลงเมื่อเทียบกับ PLA

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

ABS

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

  1. มีความแข็งแรงทนทานมาก ยืดหยุ่นได้
  2. ทนความร้อนได้สูงกว่า PETG

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

ข้อควรระวัง

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

ข้อแนะนำในการเลือกใช้ Filament

หากเป็นมือใหม่ควรเริ่มต้นจาก PLA ก่อนเนื่องจากพิมพ์ได้ง่ายมาก (แต่เราดันห้าวไปใช้ PETG ในการพิมพ์ครั้งแรก ถึงกับปวดหัวเลยครับ) การควบคุมปัจจัยต่างๆ ไม่จำเป็นมาก ใช้เวลาน้อยกว่า

แต่เมื่อต้องการชิ้นงานที่มีความทนมากขึ้นระดับกลางก็ให้เปลี่ยนมาใช้ PETG เนื่องจากตัววัสดุสามารถสร้างชิ้นงานที่มีความแข็งได้พอๆกับ PLA แต่สามารถยืดหยุ่น หักงอได้มากกว่ามาก

สุดท้ายเมื่อต้องการใช้ชิ้นงานที่รับแรงกระแทกหรือคงทนมากๆ ก็ให้เปลี่ยนมาใช้ ABS เพราะมีความคงทนมากที่สุด

สรุป

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

(C) 2022, อ.จารุต บุศราทิจ / อ.ดนัย เจษฎาฐิติกุล

ปรับปรุงเมื่อ 2022-03-17, 2022-03-19

[TH] Hosting Unity WebGL game on the sever

บทความนี้กล่าวถึงการนำตัวเกมที่พัฒนาจาก Unity ในลักษณะของ WebGL ขึ้นไปไว้บนเซิฟเวอร์ที่ใช้ระบบปฏิบัติการ Ubuntu ใน Google compute engine

การพัฒนาเกมด้วยโปรแกรม Unity เราสามารถที่จะสร้างเกมเพียงครั้งเดียวและสร้างตัวเกมในหลายระบบได้ ไม่ว่าจะเป็น Windows, Android หรือเว็บ เป็นต้น ก่อนที่เราจะนำเกมของเราขึ้นเซิฟเวอร์ได้ต้องทำการปรับเปลี่ยน build target เป็น WebGL เสียก่อน โดยเข้าที่ File > Build Settings และเลือก Platform เป็น WebGL ดังภาพที่ 1

ภาพที่ 1 เลือก Platform เป็น WebGL

ในเบราเซอร์จะมีการเข้ารหัสบีบอัดไฟล์เพื่อลดการใช้งานข้อมูลลงซึ่งเราจำเป็นต้องเลือกการบีบอัดที่เบราเซอร์สนับสนุนใน Player Settings > Publishing Settings > Compression Format หากเราไม่ต้องการบีบอัดสามารถเลือกเป็น Disabled ได้ครับ

ภาพที่ 2 ปรับ Compression Format เป็น Disabled

จากนั้นทำการ Build และเลือกตำแหน่งที่ต้องการเก็บไฟล์เราจะได้ไฟล์คร่าวๆ ดังภาพที่ 3

ภาพที่ 3 ไฟล์ที่ได้จากการ Build

เกมที่ได้จะสามารถรันบนเว็บได้ให้เรานำไฟล์ที่ได้ทั้งหมดอัพโหลดขึ้นเซิฟเวอร์ได้ทันทีครับ แต่ต้องไม่ลืมตำแหน่งหรือ URL ที่สามารถเข้าถึงจากภายนอกได้ด้วยนะครับ โดยทางเราอัพโหลดไฟล์ไว้ใน apache เพื่อให้เข้าถึงได้ครับ

ภาพที่ 4 ตัวอย่างเกม

หลังจากอัพโหลดและระบุตำแหน่ง URL เรียบร้อยเราสามารถเข้าเล่นเกมได้ทันทีเลยครับ ทุกท่านสามารถเข้าไปทดลองเล่นได้ที่ https://www.jarutex.com/www/html/lab/

สรุป

การอัพโหลดเกมขึ้นเซิฟเวอร์นั้นสามารถทำได้ง่ายดาย เนื่องจากเกมที่ได้จาก Unity เป็นไฟล์ html ทำให้สามารถใช้งานบนเบราเซอร์ได้ทันที แต่ข้อควรระวังคือการบีบอัด หากเบราเซอร์ไม่สนับสนุนการบีบอัดที่กำหนด เกมของเราก็จะไม่สามารถใช้งานได้ครับ

(C) 2022, อ.จารุต บุศราทิจ / อ.ดนัย เจษฎาฐิติกุล

ปรับปรุงเมื่อ 2022-03-10

[TH] PIC18F458 Ep.5 GPIO and 7-Segments

บทความนี้เป็นการประยุกต์ใช้ GPIO ของ PIC18F458 เพื่อสั่งงานวงจรของแอลอีดี 8 หลอดที่จัดเรียงตำแหน่งกันเป็นเหมือนตัวเลขดังภาพที่ 1 โดยใช้หลอด LED จำนวน 8 หลอดมาจัดวางใหม่และเรียกว่า 7-Segment ที่สามารถนำไปประยุกต์แสดงผลตัวเลข และตัวอักษรได้อีกจำนวนหนึ่ง นอกจากนี้ บนตัวบอร์ดทดลองได้ติดตั้ง 7-Segment เอาไว้จำนวน 4 หลัก ทำให้สามารถเขียนโปรแกรมเพื่อควบคุมการแสดงผลข้อมูล 4 หลัก

ภาพที่ 1 ภาคแสดงผลด้วย 7-Segment บนบอร์ดทดลอง
Read More

[TH] Office Syndrome our series : PIRIFORMIS SYNDROME

บทความนี้เป็นบทความต่อเนื่องเกี่ยวกับการดูแลร่างกายสำหรับคนที่ทำงานหน้าจอคอมพิวเตอร์นานๆ หรือสำหรับคนที่มีปัญหาจากการนั่งนานๆ ซึ่งพูดถึงกล้ามเนื้อ Piriformis ลักษณะอาการ สาเหตุ และวิธีบรรเทาให้อาการลดลง

ภาพที่ 1 กล้ามเนื้อ Piriformis
จาก www.dreamstime.com

Read More

[TH] PIC18F458 Ep.2 เจาะรายละเอียด

ในบทความก่อนหน้านี้ได้แนะนำบอร์ดที่ใช้ในแล็บวิชาสถาปัตยกรรมคอมพิวเตอร์และซอฟต์แวร์ที่ใช้ในการฝึกปฎิบัติไปแล้ว ครั้งนี้เป็นเนื้อหาเกี่ยวกับคุณสมบัติและผังการทำงานภายในชิพ PIC18F458 จากเอกสารของบริษัท Microchip เพื่อเป็นพื้นฐานในการเขียนโปรแกรมใช้งานความสามารถของไมโครคอนโทรลเลอร์ต่อไปในบทความถัดไป (ส่วนรายละเอียดของ PIC16F877 สามารถอ่านได้จากบทความนี้ครับ)

ภาพที่ 1 บอร์ดทดลองแล็บสถาปัตยกรรม
Read More

[TH] การสแกน QR Code และแสดงวัตถุสามมิติใน Unity3D

สำหรับสุดยอดโปรแกรมสร้างเกมอย่าง Unity3D แล้วนั้นมีจุดเด่นมากมายดังที่เคยกล่าวไป ซึ่งข้อหนึ่งนั้นคือการที่โปรแกรมสามารถสร้างเกมได้ในแทบทุกแพลตฟอร์มไม่ว่าจะเป็น คอมพิวเตอร์หรือมือถือ ซึ่งในบทความนี้จะกล่าวถึงการใช้งานบนมือถือ ซึ่งแน่นอนว่าต้องมีอุปกรณ์ที่คอมพิวเตอร์ไม่มีเช่น กล้อง โดยจะกล่าวถึงวิธีการแสกน QR Code เพื่อสั่งงานตามข้อความที่ถอดมาได้ และสั่งให้แสดงเป็นวัตถุ 3 มิติ

QR Code

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

เมื่อต้องการถอดรหัส QR code เป็นข้อความสามารถทำได้ทั้งการใช้กล้องแสกน หรือ บันทึกรูปภาพและใช้โปรแกรมถอดรหัส

ภาพที่ 1 QR code ของข้อความ “Hello world!! we are Jarutex!!”
Read More