บทความ

การเปลี่ยนขนาดของ matplotlib figure ใน jupyter

ในการทำงานกับ python-jupyter-matplotlib บางครั้งเราอาจมีความจำเป็นต้องเปลี่ยนขนาดของ figure เช่นกรณีที่ทำ subplots ซ้อนกันหลาย ๆ กราฟเป็นต้น การเปลี่ยนขนาดทำได้ 2 แนวทางคือ เปลี่ยนเฉพาะ figure ที่ต้องการ และ เปลี่ยนค่า default ของทั้ง notebook การเปลี่ยนเฉพาะ figure ที่ต้องการใช้คำสั่ง fig=plt.figure(figsize=(6, 8)) ในกรณีนี้เราสามารถตั้งค่า figsize ในคำสั่งที่สร้าง figure ได้เช่นสามารถใช้ figsize เป็น argument ของ plt.subplots ได้ ส่วนการเปลี่ยนค่า defualt ของทั้ง notebook ใช้คำสั่ง plt.rcParams['figure.figsize'] = [6, 8] ทั้งนี้หน่วยที่ระบุในคำสั่งเป็นนิ้ว เมื่อเราต้องการเปลี่ยนขนาด figure บางทีเราอาจต้องการทราบขนาดของ figure อื่น ๆ ที่เราทำไปแล้ว เวลาเปลี่ยนขนาดจะได้สอดคล้องกัน เราสามารถทราบขนาดได้ด้วยคำสั่ง size = fig.get_size_inches() ข้อมูลเกี่ยวกับการเปลี่ยนขนาดผมทราบจาก https://stackoverflow.com/questions/36367986/how-to-make-inline-plots-in-jupyter-notebook-larger  ส่วนข้อมูลเกี่ยวกับการอ่านค่าขนาด figure ปัจจุบันผมทราบจาก https://stackoverflow.com...

วิทยุ FM จาก AR1010 (PCB)

รูปภาพ
จาก บันทึกก่อนหน้านี้เรื่องวงจรวิทยุ FM จาก AR1010 กับ Barebone Arduino ก็ทิ้งท้ายไว้ว่าจะไม่ทำโปรเจ็คอื่นถ้าโปรเจ็คนี้ไม่เสร็จ แล้วก็ไม่ขึ้นโปรเจ็คอื่น ๆ อีกเลยนับจากนั้น...ทั้ง ๆ ที่อยากจะทำต่อให้เสร็จ อุปสรรคสำคัญคือระบบประกันคุณภาพอุดมศึกษากินเวลาไปหมด อย่าว่าแต่เวลาสำหรับงานอดิเรกแบบนี้เลยครับ แม้แต่เวลาสอนมันก็กิน! เรื่องนั้นช่างมันเถอะ บ่นไปหลายที่ ต่างกรรมต่างวาระ ช่วงนี้ปีใหม่ เป็นช่วงเดียวที่มีเวลาส่วนตัวจริง ๆ ก็เลยขุดงานขึ้นมาทำให้เสร็จซะ สิ่งที่ทำในขั้นตอนนี้คือการออกแบบแผ่นวงจรพิมพ์ (PCB) ครับ งานธรรมดาพื้น ๆ สำหรับหลาย ๆ คน แต่เป็นงานที่ยังสนุกและท้าทายเสมอสำหรับผม เครื่องมือที่ใช้ก็คือ KiCad เจ้าเก่า สิ่งที่ได้เรียนรู้ในรอบนี้ก็คือ ก่อนออกแบบก็ไปอ่านคู่มือการออกแบบ PCB โดยสรุปมาก่อน ได้ความรู้มาพอสมควร เช่นเรื่องการแยกกิ่งของไฟเลี้ยงและกราวด์ของวงจรส่วนแอนาลอกออกจากส่วนดิจิตัล การใช้กราวด์เพลน ปัญหาเรื่องสัญญาณรบกวนต่าง ๆ การใช้ via และ upper copper แทนการใส่ Link (เส้นลวด แต่ผมไม่รู้ว่าในวงการเขาเรียกว่าอะไร) แต่ก่อนทำไม่เป็น ตอนนี้ทำเสร็จแล้วยังมานึกว่า ไปใช้วิธีเพิ...

วิทยุ FM จาก AR1010 (โปรโตบอร์ด)

รูปภาพ
ผมได้โมดูลเครื่องรับวิทยุ FM AR1010 มานานแล้ว (ไม่น้อยกว่า 3 - 5 ปี) จำไม่ได้ด้วยซ้ำว่าซื้อจากไหน แต่ก็ไม่มีโอกาสเอามาต่อวงจรให้เสร็จสักที ที่สำคัญคือโมดูลนี้หา Datasheet ยาก แม้แต่จากเว็บของ SparkFun เองก็ระบุว่าต้องติดต่อไปจึงจะให้ จนเดี๋ยวนี้โมดูลนี้เขาเลิกขายกันไปแล้ว คิดว่าสาเหตุหลัก ๆ ที่ทำให้ไม่ได้ลงมือทำซักทีก็คงจะเป็นเรื่องเวลา ตอนนี้เวลามีแล้ว รื้อ ๆ ค้น ๆ ในกล่องเจอเจ้าโมดูลนี้ก็เลยคิดว่าจะลองทำดู ไหน ๆ ก็อุตส่าห์ซื้อมาแล้ว แม้ว่าการเอาไปทำโปรเจ็คแล้วคงไม่มีมูลค่าเพิ่มอะไร เพราะวิทยุ FM เดี๋ยวนี้ถูกมาก แต่ถ้าทิ้งไว้ก็จะเสียของไปเปล่า ๆ อย่างน้อยถ้าออกแบบเองอยากได้อะไรก็คงจะทำได้ (ล่ะมั้ง) สุดท้ายก็เลยทำแบบง่าย ๆ คือให้มีคุณสมบัติดังนี้ แสดงตัวเลขความถี่ของสถานีทาง 7-Segment 4 ตัว มีปุ่มควบคุม 2 ปุ่มคือเลื่อนสถานีขึ้นและลง โดยข้อจำกัดของโมดูลเลยทำให้เลื่อนได้ทีละ 0.1 MHz เรื่องนี้มีข้อเสียคือจะจูนหาสถานีเช่น 92.25 MHz ไม่ได้ เจ้าปุ่ม 2 ปุ่มนั้นถ้ากดค้างเกิน 0.5 วินาทีจะกลายเป็นการค้นหาสถานีอัตโนมัติในทิศทางเลื่อนขึ้นหรือเลื่อนลงแล้วแต่ว่าปุ่มที่กดเป็นปุ่มไหน ให้สัญญาณเสียงสเ...

ทำสต๊อปโมชั่นกับ MS-09RS Rick Dom (ไม่มีวิธีทำ)

รูปภาพ
ความฝันอย่างหนึ่งสมัยเรียนมัธยมต้นก็คือการได้เข้าร่วมทีมสเปเชียลเอฟเฟคระดับโลกอย่าง ILM เรื่องนี้ต้องขอบคุณสำนักพิมพ์ซีเอ็ดยูเคชันสำหรับ วารสารรู้รอบตัว ที่นำเสนอเรื่องราวของการสร้างสเปเชียลเอฟเฟคในภาพยนตร์ให้ได้อ่าน แม้ ความฝันจะถูกลืมไปชั่วระยะหนึ่ง และชีวิตก็หักเหสู่งานสอนแบบกู่ไม่กลับแล้ว นาน ๆ ทีก็นึกถึงความฝันเล็ก ๆ น้อย ๆ เหล่านั้นพอให้อบอุ่นใจบ้าง ช่วงนี้ (29/07 - 02/08) นักศึกษากำลังสอบกลางภาค ผมก็ไม่มีชั่วโมงสอนนอกจากงานธุรการประจำวัน ตอนกลางคืนก็เลยมีเวลาต่อ MS-09RS Rick Dom จนเสร็จ (จนได้) ทีนี้กล่องที่ซื้อมามันมี 2 ตัว อีกตัวหนึ่งคือ RX-78-3 Gundam ซึ่งต่อเสร็จไปแล้ว (เมื่อนานมาแล้ว) ก็เลยเอามาเล่นเป็นเด็ก ๆ ไปเลย เล่นไปเล่นมานึกได้ว่ามัน มีเทคนิคที่เรียกว่าสต๊อปโมชั่น (Stop Motion) ที่สามารถทำให้หุ่นพวกนี้มันเคลื่อนไหวได้นี่นะ เทคนิคสต๊อปโมชั่นที่ว่านี้ก็คือ ตั้งกล้องให้อยู่กับที่ ขยับท่าทางให้หุ่นทีละนิด ๆ แล้วก็บันทึกภาพของหุ่นทีละเฟรม ๆ หลังจากนั้นก็นำภาพแต่ละเฟรมมาต่อกันเป็นภาพเคลื่อนไหว สำหรับ สมัยก่อนเรื่องแบบนี้คงเป็นเรื่องวุ่นวายไม่ใช่น้อย แต่ในยุคคอ...

การแสดง Mesh Plot สามมิติด้วย QtiPlot

รูปภาพ
ที่มาที่ไป ในช่วงสามสี่เดือนที่ผ่านมามีภาระกิจเกี่ยวกับงานวิจัยอยู่ (กับเขาบ้าง -- และถูกขัดจังหวะตลอด) กล่าวโดยสังเขปงานวิจัยชิ้นนี้จะทำการวิเคราะห์สัญญาณเสียงแคนโดยใช้ Time-Frequency Analysis แบบ Modal Distribution การวิเคราะห์ทั้งหมดผมทำโดยใช้ Octave ผลการวิเคราะห์จะได้เมตริกซ์ M ซึ่งก็คือเมตริกซ์ Modal Distribution ที่แถวคือแกนความถี่และหลักคือแกนเวลา ปัญหาของการใช้ Octave ก็คือผลการวิเคราะห์ซึ่งสามารถแสดงผลได้โดยใช้ Mesh Plot ด้วยคำสั่ง >mesh(M); จะใช้เวลาในการสร้างรูปนานมาก เนื่องจากเมตริกซ์ M โดยปกติแล้วจะมีขนาดใหญ่ นอกจากนี้แม้ว่าเราจะอดทนพอที่จะรอจนกว่า Octave จะพล๊อตให้เราเสร็จ พอเราจะวิเคราะห์เมชเราก็มักจะหมุนเมชไปมาเสมอ ๆ ซึ่งคำสั่ง mesh ของ Octave จะตอบสนองช้ามากจนไม่สามารถจะวิเคราะห์อะไรได้ ผมก็เลยลองค้นดูว่าใน Debian Repository จะมีอะไรให้ใช้บ้าง พบ QtiPlot ที่คิดว่าน่าจะใช้ได้ครับ การติดตั้งผมใช้ Synaptic ในการติดตั้งจึงจะไม่ลงรายละเอียด QtiPlot ทำอะไรได้บ้าง? น่าจะหลายอย่างอยู่ แต่ที่ผมได้ทดลองใช้ด้วยตนเองก็คือ พล๊อตกราฟ 2 มิติได้ โดยเราจะต้องเตรียมข้อมูลให้อยู่ใ...

สังเคราะห์เสียงฆ้องบน Android ด้วย libpd ตอนที่ 1

รูปภาพ
หลังจากหัดเขียนโปรแกรมบน Android และทดลองเขียนโปรแกรม ฆ้องวง ขึ้นมา ก็รู้สึกถึงข้อจำกัดของการใช้เสียงฆ้องที่บันทึกไว้ล่วงหน้าซึ่งก็คือ มีข้อจำกัดด้านคุณภาพของการบันทึกเสียงและ ไม่สามารถปรับค่าความถี่และอัตราลดทอนของเสียงได้ แต่การสังเคราะห์เสียงโดยใช้ภาษา Java โดยตรงดูจะไม่ใช่ทางเลือกที่ดีนัก ยิ่งไม่ใช่ทางเลือกที่ดีสำหรับคนที่ไม่เชี่ยวชาญ Java อย่างผม หลังจากที่เสาะหากรรมวิธีเหมาะ ๆ ได้สักพักก็เจอเครื่องมือด้านการสังเคราะห์เสียงจำนวนหนึ่งคือ Chuck Csound puredata ผมได้ทดลองใช้ Chuck กับ Python เพื่อสังเคราะห์เสียงบน Linux ดูแล้วก็ใช้งานได้สะดวกดี แต่ Chuck ไม่มีเครื่องมือที่จะเชื่อมต่อกับ Java และ Android (หรือมีแต่ผมหาไม่เจอ) ส่วน Csound นั้นผมไม่เคยใช้ ค้นดูก็ไม่เจอเครื่องมือที่จะเชื่อมต่อกับ Java และ Android เช่นกัน สำหรับ puredata นั้นเดิมผมเคยยอมแพ้มันมาแล้วหนหนึ่งด้วยเหตุว่าเขียนแพตช์ (Patch) ของ puredata ไปแล้วก็เอาไปใช้ในโปรแกรมอื่นเหมือน Chuck ไม่ได้...จนกระทั่งผมได้พบกับ libpd จึงได้ทราบว่าผมคิดผิด อันที่จริง puredata สามารถสื่อสารกับภาษาโปรแกรมอื่น ๆ ได้ผ่านทาง libpd ขั้นต...

การติดตั้ง Arduino Sketch ลงในไมโครคอนโทรลเลอร์

รูปภาพ
ผมสนุกสนานกับการพัฒนาโครงงานเล็ก ๆ น้อย ๆ โดยใช้ Arduino มาระยะหนึ่ง สิ่งที่รบกวนจิตใจมาตลอดก็คือเมื่อจะพัฒนาโครงงานใหม่ ผมจะต้องรื้อโครงงานเก่าเพื่อนำบอร์ด Arduino ออกมาใช้ใหม่เสมอ จนกระทั่งมีนักศึกษาทักว่าถ้าต้องติดตั้งบอร์ด Arduino ลงไปในโครงงานทุกคราวไปมันจะไม่สิ้นเปลืองไปหน่อยหรือ? คิดในมุมกลับก็คือถ้ามันไม่มีวิธีที่ประหยัดกว่านี้ การพัฒนาชิ้นงานด้วย Arduino ก็ไม่น่าจะได้รับความนิยมกว้างขวางขนาดนี้หรอก เออแฮะ! นั่นก็จริง เมื่อคิดได้ดังนั้นแล้วก็เลยทำการค้นคว้าข้อมูลอินเตอร์เนตดู จึงพบว่าโครงการ Arduino มีความสามารถที่จะโปรแกรม Sketch ลงไปในไอซีไมโครคอนโทรลเลอร์เพื่อนำไปใช้แบบเดี่ยว ๆ (Standalone) ได้ด้วย ทำให้หลังจากที่เราพัฒนา Sketch บนบอร์ดทดลอง Arduino และทดลองวงจรแล้วเราสามารถติดตั้ง Sketch นั้นกับไอซีไมโครคอนโทรลเลอร์เปล่า ๆ ก็ได้ (เข้าใจผิดมาตั้งนาน) จากนั้นจึงติดตั้งไมโครคอนโทรลเลอร์นั้นลงในวงจรได้เลยโดยที่ไม่ต้องเสียสละบอร์ด Arduino ของเราลงไปในทุกโครงการ ในการนี้เราจำเป็นจะต้องมีอุปกรณ์หลัก 2 สิ่งคือ บอร์ด Arduino รุ่นใดก็ได้เพื่อใช้เป็นตัวโปรแกรม (Programmer) และ ไอซีไมโ...