หน้าเว็บ

วันเสาร์ที่ 3 มิถุนายน พ.ศ. 2560

วันเสาร์ที่ 10 กันยายน พ.ศ. 2559

[IPST-SE] แนวการเขียนโปรแกรม STEM FESTIVAL 2016 EP.1

ตอนที่ 1 การอ่านบาร์โค้ด

STEM_Fes01

STEM_Fes02

บาร์โค้ดประกอบไปด้วย สี 3 สีคือ สีดำ สีน้ำตาลและสีขาว โดยแผ่นบาร์โค้ดออกแบบให้สีน้ำตาลเป็นพื้น สีดำ แทนลอจิก “1” สีขาวแทนลอจิก “0”  แถบบาร์โค้ดมีทั้งหมด 3 แถบ แทนตัวเลขฐานสอง 3 บิต ให้ค่าเท่ากับ 0 ถึง 7

STEM-Barcode

แถบสีที่ 3

แถบสีที่ 2

แถบสีที่ 1

ค่าที่ได้

สีขาว สีขาว สีขาว 0
สีขาว สีขาว สีดำ 1
สีขาว สีดำ สีขาว 2
สีขาว สีดำ สีดำ 3
สีดำ สีขาว สีขาว 4
สีดำ สีขาว สีดำ 5
สีดำ สีดำ สีขาว 6
สีดำ สีดำ สีดำ

7

การอ่านค่าแถบสีน้ำตาลด้วย ZX-03

ZX-03 For Brown

โดยปกติ ZX-03 จะอ่านค่าได้เฉพาะสีในช่วงโทนสีเทา คือไล่ลำดับตั้งแต่สีขาวไปจนถึงสีดำเท่านั้น  แต่ถ้าติดตั้งเซนเซอร์ให้สูงจากพื้นมากขึ้น ดังรูป ZX-03 จะสามารถแยกโทนสีอื่นๆ ได้ด้วย ซึ่งในที่นี้ใช้สีน้ำตาล โดยการอ่านค่าแสดงที่หน้าจอ GLCD ให้ค่าดังนี้

i-BOT-With-ZX-03-On-Black-Brown-White

ในการอ่านค่าบาร์โค้ด เราจะเลือกใช้เซนเซอร์ด้านใดด้านหนึ่งเท่านั้น ในที่นี้เลือกใช้เซนเซอร์ด้านขวา

จากรูปค่าที่อ่านได้ พอสรุปได้ว่า จะต้องสร้างค่าอ้างอิงขึ้นมา 2 ช่วง คือ
ค่าอ้างอิงระหว่างสีขาวกับสีน้ำตาล เท่ากับ (890+440)/2   = 665

ค่าอ้างอิงสร้างเป็นตัวแปรได้เป็น word whiteBrown=665 ;

ค่าอ้างอิงระหว่างสีน้ำตาลกับดำ เท่ากับ (440+90)/2 = 265

ค่าอ้างอิงสร้างเป็นตัวแปรได้เป็น word blackBrown=265 ;

การเขียนโปรแกรม โดยใช้คำสั่ง while

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

ตัวอย่าง

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

while (analog(1)<blackBrown) {
      fd(40);delay(12);    
}    
ao(); delay(100);

หมายเหตุ ค่า delay(100); ที่ตามมาเพื่อให้เห็นว่าหุ่นยนต์หยุดจริงๆ ก่อนไปทำงานส่วนถัดไป

การตรวจสอบแถบสีขาวหรือดำ

ปัญหาอยู่ตรงที่ เมื่อเดินผ่านสีน้ำตาลมาแล้ว ไม่แน่ใจว่าสีต่อไปเป็นสีขาวหรือสีดำ  จึงต้องเขียนเงื่อนไข while ดักไว้สองกรณีคือ มีค่ามากกว่าสีน้ำตาล (ขาว) และ มีค่าน้อยกว่าสีน้ำตาล (ดำ)  โดยใช้ AND (&&) มาช่วย  โดยให้เงื่อนไขเป็นเท็จ เมื่อเจอสีขาวหรือสีดำ และค่อยแยกแยะว่า สีที่ตรวจพบเป็นสีขาวหรือดำ

ตัวอย่าง

เดินผ่านสีน้ำตาลจนเงื่อนไขเป็นเท็จแล้ว จึงใช้คำสั่ง if ตรวจสอบว่าเป็นสีขาวหรือดำ จากนั้นนำค่าแสดงที่หน้าจอ

while (analog(1)>blackBrown&&analog(1)<whiteBrown) {

fd(40);delay(12);

}

ao(); delay(100);
if (analog(1)<blackBrown){
       glcd(2,0,"BLACK");     
}    
else if (analog(1)>whiteBrown){
      glcd(2, 0, "WHITE");    
}

 

การอ่านค่าบาร์โค้ด 3 แถบก็คือการเคลื่อนที่ลักษณะนี้ซ้ำ 3 ครั้ง แล้วนำค่าที่อ่านได้ทั้ง 3 บิต มารวมกัน สรุปเป็นโค้ดได้ดังนี้

เราสามารถนำค่าบาร์โค้ดจากตัวแปร BAR ไปใช้เพื่อตรวจสอบเส้นทางการเดินในขั้นตอนต่อไปได้

 

 

 

 

 

 

 

วันอังคารที่ 24 พฤศจิกายน พ.ศ. 2558

บันทึกช่วยจำ Raspberry Pi

ถาม  ถ้าต้องการพิมพ์เครื่องหมาย % ให้แสดงที่คำสั่ง Print  ต้องใช้คำสั่งอย่างไร
ตอบ ต้องใช้ "%%"  

ถาม   ฟังก์ชัน datetime.datetime.now() จะแสดงค่า วันเดือนปีและเวลา และค่าไมโครวินาทีของเวลาด้วย ถ้าต้องการแสดงแค่บางส่วนต้องทำอย่างไร
ตอบ  date=str(datetime.datetime.now().strftime("%Y-%m-%d : %H:%M:%S")) จะเป็นการกำหนดรูปแบบ วันที่และเวลาได้



วันอังคารที่ 14 กรกฎาคม พ.ศ. 2558

สร้างหุ่นยนต์ POPBOT-XT+ กับมอเตอร์ BO1 และติดตั้ง Encoder




popbot-xt รุ่นมาตรฐานจะมาพร้อมกับมอเตอร์รุ่น BO2 ทำให้ยากต่อการติดตั้ง Encoder เพื่อนับระยะทางการเคลื่อนที่ มาดูว่า ถ้าต้องการติดตั้ง Encoder ให้กับ POPBOT XT  ต้องปรับแต่งหุ่นยนต์อย่างไรกันบ้าง
รายละเอียดของตัว Encoder ที่ inex ใช้งานเป็นลักษณะดังนี้

เริ่มสร้างกันเลย...

1. ใช้ฉากโลหะ 2x3 ขันยึดเข้ากับฐานหุ่นยนต์
2. ใช้สกรู 3x10 มม.ขันยึดด้วยนอต 3 มม.

3. นำมอเตอร์มายึดโดยใช้สกรู 3x25 มม. เฉพาะด้านล่างก่อน
4. นำเสารองโลหะ 37 มม. คั่นระหว่างมอเตอร์ 2 ตัวแล้วใช้สกรู 3x25 มม.ขันยึด

5. นำล้อมายึดเข้ากับแกนมอเตอร์ แล้วใช้สกรูเกลียวปล่อยขันยึด

6. เสียบจานเอ็นโค้ดเดอร์ เข้ากับแกนของมอเตอร์

7. ยึดเสารองเข้ากับเอ็นโค้ดเดอร์ ทำเหมือนกัน 2 ชุด


8. ครอบ Encoder ลงบนจาน Encoder ขันสกรูยึดให้แน่น
9. เสียบสาย สัญญาณตำแหน่งดังรูป

10. นำถาดรองกะบะถ่าน ยึดเข้ากับเสารองพลาสติก และเสารองโลหะ ใช้สกรูขนาด 3x15 ขันยึด
11. นำถาดรองกะบะถ่าน ยึดเข้ากับฐานและใช้สกรู 3x6 มม.ขันยึดในตำแหน่งดังรูป

12. นำ ZX-03 ยึดเข้ากับแท่งต่อ 5 รู ใช้สกรู 3x15 มม.ขันยึดด้วยนอต 3 มม.
13. นำ ZX-03 ยึดเข้ากับด้านหน้าของหุ่นยนต์ ในตำแหน่งดังรูป ใช้สกรูขนาด 3x10 มม. ขันยึดให้แน่น

14. จัดวางตำแหน่งเซนเซอร์ ให้อยู่ในระนาบเดียวกัน

15. นำบอร์ด POP-XT ใส่ถ่าน AA 4 ก้อน
16. เสียบบอร์ดไว้ที่โครงหุ่นยนต์

17.เสียบสายมอเตอร์ ดูทิศทางให้ถูกต้อง โดยให้ปิดสวิตช์ที่ตัวหุ่นยนต์ จากนั้นลองหมุนมอเตอร์ หมุนไปด้านหน้าไฟต้องติดเป็นสีเขียว หมุนถอยหลังไฟติดเป็นสีแดง มอเตอร์ 1 ด้านซ้าย มอเตอร์ 2 ด้านขวา
18. เสียบสาย Encoder เข้าที่จุด 2/SDA และ 3/SCL
19. เสียบสาย ZX-03 เข้าที่ A0, A1, A2, A3 (จุดต่ออะนาลอกสีแดง)

หุ่นยนต์เมื่อประกอบเสร็จสมบูรณ์
 

การเคลื่อนที่ของหุ่นยนต์เมื่อใช้ Encoder



ระยะทางการเคลื่อนที่เมื่อล้อหมุนครบ 1 รอบ


แนวคิดการเขียนโปรแกรมอย่างง่ายๆ




อ่านค่าโดยใช้คำสั่ง in เพื่อรับค่าอินพุตเข้ามา เป็น "0" 1 ครั้ง เป็น "1" 1ครั้ง นับค่าเป็น 1 ค่า ดังนั้นถ้านับค่าครบ 20 ค่า จะเคลื่อนที่ได้ 1 รอบหรือประมาณ 22 เซนติเมตรพอดี

ขาที่ใช้งานเป็น Encoder ของ POP-XT



การอ่านค่าโดยใช้อินเตอร์รัปต์

บอร์ด POPXT ที่ติดตั้งซอฟต์แวร์ตั้งแต่เวอร์ชั่น 1.07 ขึ้นไป จะมีไลบรารี่ ชื่อ XTencoder.h ติดตั้งมาด้วย ไลบรารี่ ตัวนี้จะยอมให้สามารถต่อขาเอ็นโค้ดเดอร์ได้ถึง 4 ขา และทำงานเบื้องหลังได้ ผู้ใช้งานเพียงอ่านค่า หรือรีเซตค่า โดยไม่ต้องคอยวนตรวจสอบ รูปแบบการใช้งานคำสั่งมีดังนี้







ตัวอย่างการใช้งาน



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




วันศุกร์ที่ 26 มิถุนายน พ.ศ. 2558

How do I delete Dead Shared Folders

วิธีการลบชื่อแชร์โฟลเดอร์ในระบบเน็ตเวิร์ก

 

ATX003

เมื่อใช้งานคอมพิวเตอร์ ในที่ทำงานหรือที่บ้าน แล้วมีการต่อคอมพิวเตอร์ ต้องแชร์โฟลเดอร์ระหว่างกัน เราก็เข้าไปที่เครื่องคอมพิวเตอร์ที่ต้องการและคัดลอกไฟล์หรือส่งไฟล์เข้าไป แต่ในกรณีต้องการยกเลิกการแชร์ ชื่อที่เรายกเลิกจะยังคงค้างอยู่ สร้างความรำคาญเป็นอย่างยิ่ง วิธีการยกเลิกทำได้ดังนี้ครับ (ใช้ได้กับ Windows 8 และ Windows 7)

1. คลิกเมาส์ขวาที่ Computer เลือก Manage

ATX004

2. ที่หน้าต่าง Computer Management เลือกหัวข้อ Shared Folder > Shares

ATX005

3. จะเห็นชื่อโฟลเดอร์ทั้งหมดที่เราแชร์เอาไว้  ให้คลิกเมาส์ขวาที่โฟลเดอร์ที่ไม่ต้องการแชร์ จากนั้นเลือก Stop Sharing

ATX006

เท่านี้ โฟลเดอร์เก่าๆ ที่เราแชร์ไว้ก็จะถูกลบออกไป

วันจันทร์ที่ 12 มกราคม พ.ศ. 2558

Triangle with rounded corners

การสร้าง 3 เหลี่ยมแบบมีขอบโค้งใน Ilastrator

นอกเรื่อง กับโปรแกรม Illastrator ขอใช้ที่นี่บันทึกเตือนความจำกันหน่อย

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

IPST-SE016

1. เลือกเครื่องมือ Polygon Tool

IPST-SE017

2. เลือก Sides เป็น 3 สำหรับการทำรูป 3 เหลี่ยม

IPST-SE018

3. ไปที่เมนู Effect>Stylize>Round Corners...

IPST-SE019

4. ปรับค่าความโค้งตามต้องการ

IPST-SE020

5. เลือกคำสั่ง Expand Appearance

IPST-SE021

 

6. จะได้ 3 เหลี่ยมที่มีมุมโค้งตามต้องการ

วันศุกร์ที่ 26 กันยายน พ.ศ. 2557

POP-XT/IPST-SE with EVO24 Motor Driver 30A Ep2

POP-XT/IPST-SE ขับมอเตอร์กำลังสูงด้วยบอร์ดขับมอเตอร์ 30A รุ่น EVO24 :  ตอนที่ 2

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

Print
รูปที่ 1 การต่อวงจรขับมอเตอร์ในรูปแบบที่สร้างวงจรขึ้นมาเองจากตอนที่ 1

แต่ถึงวงจรจะง่ายๆ ไม่ซับซ้อนยังไง ก็ยังเป็นเรื่องยากสำหรับผู้ที่ไม่มีพื้นฐานด้านอิเล็กทรอนิกส์อยู่ดี ทาง inex เลยทำแผงวงจร ZX-nMotor ขึ้นมาเพื่อทดแทนวงจรในส่วนนี้   โดยหน้าตาของบอร์ด ZX-nMotor แสดงในรูปที่ 2

ZX-nMotor
รูปที่ 2 แผงวงจร ZX-nMotor สำหรับการแปลงสัญญาณเพื่อต่อกับบอร์ดขับมอเตอร์

ซึ่งเมื่อนำมาต่อเข้ากับบอร์ดขับมอเตอร์สามารถขันสายยึดเพียงอย่างเดียวโดยผู้ใช้งานไม่จำเป็นต้องบัดกรีวงจรส่วนใดๆ อีก รูปที่ 3 เป็นการเชื่อมต่อกับบอร์ด IPST-SE


Large-Motor-with-IPST-SE
รูปที่ 3 การต่อวงจรขับมอเตอร์เข้ากับบอร์ด IPST-SE ด้วยบอร์ด ZX-nMotor

และรูปที่ 4 จะเป็นการเชื่อมต่อกับบอร์ด POP-XT

Large-Motor-with-POPBOT-XT
รูปที่ 4 การต่อวงจรขับมอเตอร์เข้ากับบอร์ด POP-XT ด้วยบอร์ด ZX-nMotor

เมื่อต่อวงจรได้ตามนี้ บอร์ด IPST-SE/POP-XT สามารถขับมอเตอร์ขนาดใหญ่ ในขณะที่ยังคงเขียนโปรแกรมแบบเดิม ๆ

POP-XT with EVO24 Motor Driver 30A Ep1

POP-XT ขับมอเตอร์กำลังสูงด้วยบอร์ดขับมอเตอร์ 30A รุ่น EVO24 ตอนที่ 1

6 กันยายน 2013 เวลา 14:14 น.


บอร์ด POP-XT หรือ Robo Creator ของ inex สามารถขับมอเตอร์ขนาดเล็ก ที่มีการกินกระแสไม่เกิน 600 มิลลิแอมป์ได้ แต่เมื่อต้องการขับมอเตอร์ที่มีขนาดใหญ่ขึ้น จำเป็นต้องเอาวงจรขับมอเตอร์ภายนอกเข้ามาช่วย


บอร์ด EVO24V9.1

 ขอแนะนำวงจรขับมอเตอร์รุ่น EVO24V9.1 ของ SMile Robotics คุณสมบัติของวงจรขับมอเตอร์มีดังนี้

  • ขับกระแสสูงสุดชั่วขณะได้ถึง 30A
  • ขับกระแสต่อเนื่อง 9A ที่แรงดัน 24V
  • รองรับแรงดันได้ในช่วง 7-28V
  • ปรับความเร็วมอเตอร์แบบ PWM ได้ที่ความถี่ไม่เกิน 5kHz
  • มีวงจรป้องกันการจ่ายไฟกลับขั้ว
  • มีแผ่นระบายความร้อน
  • ตัดการทำงานเมื่ออุณหภูมิสูงกว่า 100 องศา










ด้านหน้าของบอร์ด EVO24V9.1


แผ่นระบายความร้อนด้านหลัง EVO24V9.1




รูปแบบการเชื่อมต่อบอร์ด EVO24V9.1 กับ POP-XT
เมื่อนำวงจรขับมอเตอร์ตัวนี้มาใช้กับบอร์ด POP-XT โดยไม่ต้องปรับแต่งมากนัก ต้องสร้างวงจรเรียงขาสัญญาณใหม่อีกเล็กน้อย โดยวงจรในส่วนเส้นประ คือส่วนที่เราต้องทำเพิ่ม เพื่อจัดเรียงการขับมอเตอร์ซึ่งจากเดิมเป็นไฟบวกลบ ให้กลายเป็นสัญญาณลอจิก




การสร้างวงจรแปลงสัญญาณสำหรับขับมอเตอร์ EV024V9.1
การสร้างเราจะใช้แผ่นวงจรพิมพ์อเนกประสงค์บัดกรี ไดโอดเบอร์ 1N4148 และตัวต้านทานค่า 330 โอห์มลงไป ได้ผลลัพธ์ตามนี้














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



หุ้มท่อหดเพื่อความปลอดภัย
ผลลัพธ์ท้ายสุดของวงจรที่สร้างขึ้นก็เป็นดังนี้



วงจรที่เสร็จสมบูรณ์
เมื่อนำทั้งหมดมารวมกันและทดสอบการทำงาน จะได้ผลลัพธ์ดังรูปครับ