robot

คืนนี้ก็ทำงานที่แล็บอีกละ พรุ่งนี้ก็อีกคืนนึง เป็น 3 คืนติดในรอบ 1 อาทิตย์ ก็โอเค แต่ที่เซ็งที่สุดคือทำไม code ของ pulse width modulator มันไม่ทำงาน เราพยายามจะใช้ clock 2 ตัว โดยแต่ละตัวจะมี pulse ยาว 1.5 msec เอาไว้ควบคุม servo motor ทีนี้ clock ตัวแรกทำงาน แต่ตัวที่ 2 มันไม่... นั่งจ้องมันอยู่ราวๆ ชั่วโมงครึ่ง ก็ยอมแพ้แล้วกลับบ้าน โค้ดตรงส่วนนี้ก็มีดังนี้

PWMCLK = 0x11; //สำหรับ enable clock mode ของ PWM... มีทั้งหมด 8 port ในนี้ enable port 0 กับ 4
PWMPOL = 0x11; //กำหนดให้ port 0 กับ 4 เริ่มต้องด้วย high signal
PWMPRCLK = 0x77; //หาร bus signal ด้วย 128 สำหรับทั้ง 2 port (ได้เป็น clock A กับ clock B)
PWMSCLA = 0x8D; //หาร clock A ด้วย 8D (whatever number that is ขี้เกียจแปลงกลับเป็น dec) => clock SA
PWMSCLB = 0x8D; //หาร clock B ด้วย 8D => clock SB
PWMPER0 = 0x02; //หาร clock SA ด้วย 2 => clock ของ port 0
PWMDUT0 = 0x01; //duty cycle ของ port 0 เท่ากับครึ่งหนึ่งของ period
PWMPER4 = 0x02; //หาร clock SB ด้วย 2 => clock ของ port 4
PWMDUT4 = 0x01; //duty cycle ของ port 4 เท่ากับครึ่งหนึ่งของ period
PWME = 0x11; //enable pulse width modulator port 0 กับ 4

ทีนี้ ก็ใช้ pulse width modulator port 0 กับ 4 นี่แหละ แต่ดั๊น... port 0 ใช้ได้ port 4 no signal ... flat line... เอ่อ

เซ็ง... ยังไงก็ต้องแก้ปัญหานี้ให้ได้ภายในพรุ่งนี้ ไม่งั้นหุ่นยนต์ก็วิ่งไม่ได้ เลี้ยวไม่ได้ เซ็ง....

เมื่อวานก็พึ่งส่ง purchase request ซื้อ IR sensor 4 ตัว แง่ง แพงจริงๆ แล้วก็ได้ photoresistor มาแล้ว ซึ่งก็ต้องเอาไปทำเป็น color sensor... เอ่อ... ชีวิต ...

ปัญหาเยอะจริง เมื่อวานพึ่งนึกได้ว่าไม่มี battery holder เอ่อ ก็เลยต้องไปซื้อวันนี้ ตกเย็นวันนี้พึ่งนึกได้ว่าแล้วจะยึด battery กับ chassis ยังไง ก็คงใช้สกอตเทปชั่วคราวไปก่อน แต่อันจริงก็ต้องหาตัวอะไรมายึด ทีนี้ถ้าไม่ไปทำเองก็คงต้องซื้อ ไว้ค่อยคิดละกัน

agenda สำหรับพรุ่งนี้
- test servo motor โดยใช้ signal จาก microcontroller
- แก้ให้ใช้ dual clock ได้ แล้วสร้าง function สำหรับให้หุ่นยนต์เดินหน้าถอยหลังได้ ส่วนเลี้ยว 90 องศาก็คงต้องมานั่งทดลองกันดู
ตอนนี้ก็นั่งคิด นอนคิดอยู่ ว่าจะทำให้ยังไงให้หุ่นยนต์ของกลุ่มเราแก้ปัญหาของหุ่นยนต์ ได้แก่
  • ล้ม domino 3 ชิ้น ที่มี possible location อยู 4 ที่
  • แก้ปัญหาโดยที่ position และ direction เริ่มต้นของหุ่นยนต์นั้น random
  • เขาวงกตที่หุ่นยนต์อยู่สามารถเปลี่ยนแปลงได้ โดยที่สามารถเอากำแพงเพิ่ม เอาออก หรือย้ายที่ได้ทั้งหมดรวมกันไม่เกิน 3 อัน
  • มีเวลาให้ไม่เกิน 10 นาที
  • ทีมที่ชนะคือทีมที่เร็วที่สุด reliable ที่สุด และล้ม domino ได้หมด
  • หุ่นยนต์ต้องเป็น autonomous และไม่รับข้อมูลจากข้างนอก
  • ที่สำคัญ ห้ามทำลายกำแพง
  • งบ $250
ก็นั่นแหละ สรุป algorithm เริ่มต้นก็ dead recogning + back tracking ซึ่งมันก็ simple และ process ได้เร็ว (อยากจะบอกว่าความเร็วของ microcontroller ช้า) ใช้ RAM 12K ไม่ก็ flash 256 k แต่ถ้ามันมีอะไรที่เร็วกว่าก็ดี แต่ใช้พวก search algorithm based on predeterministic path ไม่ได้ process ไม่ไหว ช้าเกินด้วย เพราะ possible combinatino ของเขาวงกตก็ > 64! / (3! 61!) ไปคิดเอาเองว่าเท่าไหร่ ที่ใช้เครื่องหมายมากกว่าเพราะ ไม่เก่งป๊อบ... บลาๆๆ

ตอนนี้ budget บานมาก ด้วยความที่ใช้ sensor เยอะจัด plan ตอนนี้คือใช้ IR sensor 4 ตัว แล้วก็จะซื้อ photoresistor มา 4 ชิ้น เอามาทำ color sensor สรุปก็... 8 ละ... แล้วยังมี wheel encoder อีก เอาไว้วัดระยะทาง

อ้อ ส่วน motor ที่จะใช้นี่เป็น servo motor น่ะ แบบ modify ให้ใช้ได้ต่อเนื่อง เพื่อที่จะเอาไว้ควบคุมองศาการหมุนของล้อ กับเอาไว้ใช้วิ่งได้

อืม ... จะว่าไปแล้ว application ของ project นี้นี่เจ๋งดี... คิดว่างั้นปะ