หน้าเว็บ

วันศุกร์ที่ 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 โอห์มลงไป ได้ผลลัพธ์ตามนี้














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



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



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



การลบโฟลเดอร์ที่ซ่อนอยู่จากการติดไวรัส

ไม่ค่อยเกี่ยวข้องกับไมโครคอนโทรลเลอร์เท่าไหร่นะครับ
แต่เนื่องจากประสบปัญหา และอยากบันทึกวิธีการแก้ไขเอาไว้

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

Blogger022 
รูปที่ 1 จะเห็นว่าโฟลเดอร์เป็นสีจางๆ เนื่องจากปกติถูกซ่อนเอาไว้

Blogger023 
รูปที่ 2 ต้องเลือกเครื่องหมายถูก หน้าหัวข้อ Hide protected operating system files(Recommended) ใน Folder Options ออก ถึงจะมองเห็นไฟล์

วิธีการแก้ไวรัสชนิดนี้ก็ไม่ยาก ใช้ซอฟต์แวร์ สแกนไวรัสตัวไหนก็จัดการได้หมดครับ แต่สิ่งที่ ไวรัสทำกับเราคือซ่อนโฟลเดอร์ของเราเอาไว้ มองไม่เห็น ทางแก้ทำได้ง่ายๆ ดังนี้ครับ

เปิด Command Prompt ในโหมด Admin  (Run as administrator) ถ้าเป็น Windows 8 หน้าตาจะเป็นอย่างนี้ครับ

 Blogger019
รูปที่ 3 เลือกเปิด Command Prompt จาก windows 8 ด้วยการ Search หา


Blogger018
รูปที่ 4 เลือก รันให้ทำงานในโหมด Administator

Blogger020 
รูปที่ 5 หน้าต่าง Command Prompt ที่ต้อง Run ในโหมด Admin

พิมพ์ คำสั่ง  attrib -h -r -s /s /d g:\xxx

โดยไดรฟ์ที่ต้องการตามตัวอย่างคือไดรฟ์ g: ส่วน xxx คือชื่อโฟลเดอร์ที่ต้องการล้างการซ่อนโฟลเดอร์ครับ

Blogger021
รูปที่ 6 พิมพ์คำสั่งนี้พร้อมทั้งระบุชื่อโฟลเดอร์ที่ต้องการแก้ค่า
 

แนะนำให้แก้เฉพาะโฟลเดอร์ที่เราใช้งาน ส่วนโฟลเดอร์ระบบต่างๆ ไม่ต้องปรับแก้

Blogger024 
รูปที่ 7 โฟลเดอร์หลังจากปรับเปลี่ยนแล้ว

จากนั้นก็เปลี่ยนค่า Folder Options กลับมาเป็นเหมือนเดิม เป็นอันเสร็จขั้นตอน

Blogger025 
รูปที่ 8 การเปลี่ยนค่า Folder Options กลับมาเป็นเหมือนเดิม

วันจันทร์ที่ 22 กันยายน พ.ศ. 2557

IPST-SE with Large Speaker

ต่อลำโพงขยายให้กับบอร์ด IPST-SE ด้วยวงจรง่ายๆ

ปกติ IPST-SE จะมีลำโพงขนาดเล็ก ZX-Speaker ให้มาในชุด ใช้เพื่อขับเสียงแสดงสถานะต่าง ๆ ได้  เชื่อมต่อง่ายๆ ดังรูปที่ 1
 IPST-with-ZX-Speaker
รูปที่ 1 การเชื่อมต่อลำโพงเปียโซปกติจาก ZX-Speaker
คำสั่งสำหรับสั่งงานให้ลำโพงเปียโซส่งเสียงออกมาก็คือคำสั่ง sound() โดยมีรูปแบบการใช้งานคือ
sound(PIN,FREQ,DURATION);
โดย
PIN   คือตำแหน่งขาที่ต่อลำโพง
FREQ คือความถี่ที่ส่งไปยังลำโพง
DURATION คือระยะเวลาที่ต้องการให้เสียงดัง
แต่ข้อจำกัดของลำโพงเปียโซคือ จะตอบสนองความถี่เสียงช่วง 300-3kHz เท่านั้น และเสียงดังค่อนข้างเบา 

วงจรขยายเสียงอย่างง่าย

   รายการอุปกรณ์

ลำโพงขนาด 5-10W 8W                                       1 ตัว
ตัวต้านทาน 1/4W 5% 1kW                                   1 ตัว
ทรานซิสเตอร์เบอร์ BC337                   1 ตัว
สาย JST 3AA-8                         1 เส้น   

จากข้อจำกัดนี้เอามาสร้างเป็น วงจรเล็กๆ เพื่อขยายเสียงให้มีความดังเพิ่มมากขึ้น ต่อเข้ากับลำโพงตัวใหญ่ๆ ได้แสดงการเชื่อมต่อในรูปที่ 2 โดยเอาต์พุตจากขา 17 จะส่งไปยังขาเบสของทรานซิสเตอร์ โดยมีตัวต้านทาน 1kW ทำหน้าที่จำกัดกระแส ไฟเลี้ยงที่ใช้ก็ใช้ไฟเลี้ยง 5V ภายในวงจรได้เลย

Large-Speaker-Circuit
รูปที่ 2 วงจรแสดงการเชื่อมต่อเครื่องขยายเสียงอย่างง่าย


ลองทดสอบเขียนโปรแกรมสั้น ๆ เป็นเสียงหวอรถพยาบาลตามโปรแกรมที่ 1 ทีนี้เสียงหวอของเราก็ดังไปทั่วแน่นอน

#include <ipst.h>
void setup(){

}
void loop()
{
  sound(17,500,500);
  sound(17,2500,500);
}
โปรแกรมที่ 1 ตัวอย่างโปรแกรมเสียงหวอรถพยาบาล



แถมอีกโปรแกรมสำหรับเสียงเมโลดี้ของเกมสุดคลาสสิคอย่างมาริโอ้ครับ


#include <ipst.h>
void setup(){
}
void loop()
{    sound(17,660,100);
   delay(75);sound(17,660,100);
   delay(150);sound(17,660,100);
   delay(150);sound(17,510,100);
   delay(50);sound(17,660,100);
   delay(150);sound(17,770,100);
   delay(275);sound(17,380,100);
   delay(287);sound(17,510,100);
   delay(225);sound(17,380,100);
   delay(200);sound(17,320,100);
   delay(250);sound(17,440,100);
   delay(150);sound(17,480,80);
   delay(165);sound(17,450,100);
   delay(75);sound(17,430,100);
   delay(150);sound(17,380,100);
   delay(100);sound(17,660,80);
   delay(100);sound(17,760,50);
  delay(75);sound(17,860,100);
   delay(150);sound(17,700,80);
   delay(75);sound(17,760,50);
   delay(175);sound(17,660,80);
   delay(150);sound(17,520,80);
   delay(75);sound(17,580,80);
   delay(75);sound(17,480,80);
   delay(175);sound(17,510,100);
   delay(275);sound(17,380,100);
   delay(200);sound(17,320,100);
   delay(250);sound(17,440,100);
   delay(150);sound(17,480,80);
   delay(165);sound(17,450,100);
   delay(75);sound(17,430,100);
   delay(150);sound(17,380,100);
   delay(100);sound(17,660,80);
   delay(100);sound(17,760,50);
   delay(75);sound(17,860,100);
   delay(150);sound(17,700,80);
   delay(75);sound(17,760,50);
   delay(175);sound(17,660,80);
   delay(150);sound(17,520,80);
   delay(75);sound(17,580,80);
   delay(75);sound(17,480,80);
   delay(250);sound(17,500,100);
   delay(150);sound(17,760,100);
   delay(50);sound(17,720,100);
   delay(75);sound(17,680,100);
   delay(75);sound(17,620,150);
   delay(150);sound(17,650,150);
   delay(150);sound(17,380,100);
   delay(75);sound(17,430,100);
   delay(75);sound(17,500,100);
   delay(150);sound(17,430,100);
   delay(75);sound(17,500,100);
   delay(50);sound(17,570,100);
   delay(110);sound(17,500,100);
   delay(150);sound(17,760,100);
   delay(50);sound(17,720,100);
   delay(75);sound(17,680,100);
   delay(75);sound(17,620,150);
   delay(150);sound(17,650,200);
   delay(150);sound(17,1020,80);
   delay(150);sound(17,1020,80);
   delay(75);sound(17,1020,80);
   delay(150);sound(17,380,100);
   delay(150);sound(17,500,100);
   delay(150);sound(17,760,100);
   delay(50);sound(17,720,100);
   delay(75);sound(17,680,100);
   delay(75);sound(17,620,150);
   delay(150);sound(17,650,150);
   delay(150);sound(17,380,100);
   delay(75);sound(17,430,100);
   delay(75);sound(17,500,100);
   delay(150);sound(17,430,100);
   delay(75);sound(17,500,100);
   delay(50);sound(17,570,100);
   delay(110);sound(17,500,100);
   delay(150);sound(17,760,100);
   delay(50);sound(17,720,100);
   delay(75);sound(17,680,100);
   delay(75);sound(17,620,150);
   delay(150);sound(17,650,200);
   delay(150);sound(17,1020,80);
   delay(150);sound(17,1020,80);
   delay(75);sound(17,1020,80);
   delay(150);sound(17,380,100);
   delay(150);sound(17,500,100);
   delay(150);sound(17,760,100);
   delay(50);sound(17,720,100);
   delay(75);sound(17,680,100);
   delay(75);sound(17,620,150);
   delay(150);sound(17,650,150);
   delay(150);sound(17,380,100);
   delay(75);sound(17,430,100);
   delay(75);sound(17,500,100);
   delay(150);sound(17,430,100);
   delay(75);sound(17,500,100);
   delay(50);sound(17,570,100);
   delay(210);sound(17,585,100);
   delay(275);sound(17,550,100);
   delay(210);sound(17,500,100);
   delay(180);sound(17,380,100);
   delay(150);sound(17,500,100);
   delay(150);sound(17,500,100);
   delay(75);sound(17,500,100);
   delay(150);sound(17,500,60);
   delay(75);sound(17,500,80);
   delay(150);sound(17,500,60);
   delay(175);sound(17,500,80);
   delay(75);sound(17,580,80);
   delay(175);sound(17,660,80);
   delay(75);sound(17,500,80);
   delay(150);sound(17,430,80);
   delay(75);sound(17,380,80);
   delay(300);sound(17,500,60);
   delay(75);sound(17,500,80);
   delay(150);sound(17,500,60);
   delay(175);sound(17,500,80);
   delay(75);sound(17,580,80);
   delay(75);sound(17,660,80);
   delay(225);sound(17,870,80);
   delay(162);sound(17,760,80);
   delay(300);sound(17,500,60);
   delay(75);sound(17,500,80);
   delay(150);sound(17,500,60);
   delay(175);sound(17,500,80);
   delay(75);sound(17,580,80);
   delay(175);sound(17,660,80);
   delay(75);sound(17,500,80);
   delay(150);sound(17,430,80);
   delay(75);sound(17,380,80);
   delay(300);sound(17,660,100);
   delay(75);sound(17,660,100);
   delay(150);sound(17,660,100);
   delay(150);sound(17,510,100);
   delay(50);sound(17,660,100);
   delay(150);sound(17,770,100);
   delay(225);sound(17,380,100);  
}


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

ชั่งน้ำหนักแบบอิเล็กทรอนิกส์

 

<อ้างอิงจากวารสาร The Prototype Electronics ฉบับที่ 40>

 

UniconProject07-fig31_CO

แนะนำอุปกรณ์สำหรับชั่งน้ำหนัก

  UniconProject07-fig29_CO-[Converted]
รูปที่ 1 ชุดตัวตรวจจับและวัดน้ำหนัก ZX-WEIGHT

 

ตัวตรวจจับที่ชื่อโหลดเซลและแผงวงจรปรับสภาพสัญญาณคือตัวช่วยสำคัญ

    ตัวตรวจจับสำหรับวัดน้ำหนักวัตถุสำหรับมินิโปรเจ็กต์นี้มีชื่อว่า ZX-WEIGHT แสดงในรูปที่ 1 ประกอบด้วยโหลดเซล (load cell) ที่มีหน้าตาเป็นแท่งโลหะอันเป็นตัวตรวจจับตัวจริงทำงานร่วมกับวงจรปรับสภาพสัญญาณที่เรียกว่า signal condition จนได้เป็นค่าข้อมูลของน้ำหนักที่ส่งไปยังไมโครคอนโทรลเลอร์ที่ติดต่อด้วย ในการใช้งานตัวตรวจจับนี้ผู้ผลิตไม่ได้มีเพียงฮาร์ดแวร์มาเท่านั้น ยังมาพร้อมกับไลบรารีสำหรับพัฒนาโปรแกรมบน Arduino เพื่อให้ใช้งานได้ง่ายขึ้นด้วย ชุดตัวตรวจจับและวัดน้ำหนักนี้ทำงานด้วยไฟเลี้ยงในย่าน +2.6 ถึง +5V

   

โหลดเซลที่เป็นตัววัดหรือชั่งน้ำหนักมีคุณสมบัติทางเทคนิคดังนี้


    • ย่านวัดสูงสุด 1 กิโลกรัม ให้เอาต์พุตเป็นแรงดันไฟตรง
    • ใช้ไฟเลี้ยง +5 ถึง +15V
    • ความไวเอาต์พุต 1.0±0.15mV/V
    • ค่าความผิดพลาด 100ppm ของค่าวัดเต็มสเกล
    • ค่าสัมประสิทธิ์อุณหภูมิ 0.05/0.03 %F.S/10°C ในทุกๆ 30 นาที
    • อินพุตอิมพีแดนซ์ 1.055kW
    • เอาต์พุตอิมพีแดนซ์ 1kW
    • ขนาด 33 x 38 มม.
    โหลดเซลที่ใช้วัดน้ำหนัก 1 กิโลกรัมในชุด ZX-WEIGHT จะมีความคลาดเคลื่อนเป็นแบบไม่เป็นเชิงเส้นหรือนอนลิเนียร์อยู่เล็กน้อย โดยคลาดเคลื่อนในระดับไม่ถึง 100 กรัม ทั้งนี้ขึ้นอยู่กับน้ำหนักของวัตถุด้วย โดยวัตถุที่มีน้ำหนักน้อย ค่าที่ได้จะมีความแม่นยำมากกว่าวัตถุที่มีน้ำหนักมาก

แผงวงจรปรับสภาพสัญญาณสำหรับโหลดเซลในชุด ZX-WEIGHT มีคุณสมบัติทางเทคนิคดังนี้

    • ใช้ไอซีฟังก์ชั่นพิเศษเบอร์ HX711 ผลงานของ AVIA Semiconductor เป็นไอซีแปลงสัญญาณอะนาลอกเป็นดิจิตอลความละเอียด 24 บิตสำหรับโหลดเซลโดยเฉพาะ
    • มีอินพุตแบบดิฟเฟอเรนเชียล 2 ชุด จึงใช้งานกับโหลดเซลได้ง่าย
    • มีขาเอาต์พุตไฟเลี้ยงสำหรับโหลดเซล มาจากวงจรเรกูเลเตอร์ภายในไอซี HX711
    • เชื่อมต่อกับไมโครคอนโทรลเลอร์ด้วยสัญญาณ 2 เส้นคือ สัญญาณข้อมูล Dout และสัญญาณนาฬิกา PD_Clock
    • ใช้ไฟเลี้ยง +2.6 ถึง +5.5V ใช้กระแสไฟฟ้าน้อยกว่า 1.6mA
    • มีจุดต่อโหลดเซลเป็นเทอร์มินอลบล็อก 4 ขา และจุดต่อสัญญาณสำหรับเชื่อมต่อไมโครคอนโทรลเลอร์แบบ JST 3 ขา 2 ชุด พร้อมใช้งาน
    ในชุดตัวตรวจจับและวัดน้ำหนัก ZX-WEIGHT ยังมีชิ้นส่วนพลาสติกและอุปกรณ์ยึดติดเพื่อสร้างแท่นชั่งน้ำหนักอย่างง่ายมาให้พร้อมดังแสดงในรูปที่ 2

UniconProject07-fig30
รูปที่ 2 แสดงชิ้นส่วนและอุปกรณ์ทั้งหมดของชุดตัวตรวจจับและวัดน้ำหนัก ZX-WEIGHT

เชื่อมต่อกับบอร์ด Unicon

    การเชื่อมต่อบอร์ด Unicon เพื่อใช้งานชุดตัวตรวจจับและวัดน้ำหนัก ZX-WEIGHT แสดงดังรูปที่ 3 ใช้ 2 ขาพอร์ตคือ 1 และ 30 โดยพอร์ต 1 ต่อกับขา DOUT ส่วนขาพอร์ต 30 ต่อกับขา SCK และต่อแผงวงจรสวิตช์ ZX-01 เข้าที่พอร์ต 20 เพื่อใช้เป็นปุ่มสำหรับตั้งค่าเริ่มต้นให้เป็น 0 กรัม ในกรณีที่เปิดไฟเลี้ยงขึ้นมาแล้วค่าที่ได้ไม่เป็น 0 กรัมในขณะที่ยังไม่ได้ทำการชั่งน้ำหนักใดๆ หรือจะเรียกว่าเป็นสวิตช์ตั้งค่าศูนย์ก็ได้

UniconProject07-fig31_CO
รูปที่ 3 วงจรเชื่อมต่อระหว่างชุดตัวตรวจจับและวัดน้ำหนัก ZX-WEIGHT กับบอร์ด Unicon

    สายสัญญาณที่ใช้เชื่อมต่อระหว่างแผงวงจรปรับสภาวะสัญญาณกับบอร์ด Unicon ใช้สายสัญญาณ JST3AA-8 มาทำการสลับสายตามรูปที่ 4

UniconProject07-fig32_CO-[Converted]
รูปที่ 4 การสลับสายสัญญาณ JST3AA-8 เพื่อใช้ในการเชื่อมต่อระหว่างแผงวงจรปรับสภาวะสัญญาณของชุดตัวตรวจจับและวัดน้ำหนัก ZX-WEIGHT กับบอร์ด Unicon

สร้างและติดตั้งแท่นชั่งน้ำหนักอย่างง่าย

UniconProject07-fig33-[Converted]
รูปที่ 5 แบบของแท่นชั่งน้ำหนักที่ทำจากแผ่นอะครีลิกใส หนา 5 มม.

UniconProject07-fig34_CO-[Converted]
รูปที่ 6 แนวทางการประกอบชิ้นส่วนของแท่นชั่งน้ำหนัก

    เพื่อให้การใช้งานชุดตัวตรวจจับและวัดน้ำหนัก ZX-WEIGHT มีประสิทธิภาพมากที่สุด จึงต้องติดตั้งโหลดเซลไว้กับโครงสร้างที่เหมาะสม นั่นคือ ทำเป็นแท่นชั่งน้ำหนัก โดยมีชิ้นส่วนต่างๆ แสดงในรูปที่ 5 ซึ่งใช้แผ่นอะครีลิกใสหนา 5 มม. ประกอบเข้าด้วยกันตามแนวทางในรูปที่ 6 จากนั้นติดตั้งแผงวงจรปรับสภาพสัญญาณ แล้วต่อสายสัญญาณของโหลดเซลทั้ง สี่เส้นเข้ากับแผงวงจรแผงวงจรปรับสภาพสัญญาณดังนี้
    สายสีแดงต่อเข้าที่จุด E+
    สายสีขาวต่อเข้าที่จุด E-
    สายสีดำต่อเข้าที่จุด S-
    สายสีเขียวต่อเข้าที่จุด S+
    ในรูปที่ 7 แสดงแท่นชั่งน้ำหนักที่พร้อมสำหรับเชื่อมต่อกับบอร์ด Unicon

UniconProject07-fig35 
รูปที่ 7 แท่นชั่งน้ำหนักที่ประกอบเสร็จแล้ว พร้อมเชื่อมต่อกับบอร์ด Unicon
หรือบอร์ดไมโครคอนโทรลเลอร์อื่นๆ

เขียนโค้ดและผนวกไลบรารีสำหรับใช้งานชุดตัวตรวจจับและวัดน้ำหนัก ZX-WEIGHT

    โค้ดโปรแกรมภาษา C/C++ สำหรับ Arduino เพื่ออ่านค่าจากชุดตัวตรวจจับและวัดน้ำหนัก ZX-WEIGHT แสดงในโปรแกรมที่ 1 หัวใจหลักของโปรแกรมนี้คือ ไฟล์ไลบรารี Hx711.h จะต้องมีการคัดลอกไฟล์ไลบรารีนี้แล้วนำไปไว้ในโฟลเดอร์ libraries ของซอฟต์แวร์ Arduino ตามที่ได้ติดตั้งไว้ เช่น C:\Program Files\Arduino\libraries ดังรูปที่ 8 (อาจเปลี่ยนแปลงไปตามการติดตั้งซอฟต์แวร์ของผู้พัฒนาแต่ละคน) ก่อนที่จะทำการคอมไพล์หรืออัปโหลดโปรแกรมไปยังบอร์ด Unicon

 UniconProject07-Program08
โปรแกรมที่ 1 ไฟล์ Unicon_WeightSensor.ino สำหรับอ่านค่าจากชุดตัวตรวจจับและวัดน้ำหนัก ZX-WEIGHT โดยใช้บอร์ด Unicon

UniconProject07-fig36
รูปที่ 8 แสดงโฟลเดอร์ libraries ของซอฟต์แวร์ Arduino สำหรับนำโฟลเดอร์ของไฟล์ไลบรารี Hx711.h มาติดตั้งไว้

    การทำงานของโปรแกรมที่ 1 จะอ่านค่าน้ำหนักของวัตถุที่วัดได้ นำมาคูณกับ 0.921 ก่อน ซึ่งค่า 0.921 เป็นค่าชดเชยความคลาดเคลื่อนของน้ำหนักที่วัดได้ โดยทำการเทียบน้ำหนักกับเครื่องชั่งน้ำหนักตัวอื่น แล้วนำมาคำนวณเป็นค่าดังกล่าว โดยค่า 0.921 มาจากการวัดเทียบน้ำหนัก โหลดเซลวัดน้ำหนักได้เกินจริงเฉลี่ยประมาณ 108.577% จึงนำมาคำนวณด้วย 100 / 108.577 ก็จะได้เป็น 0.921 เพื่อใช้ชดเชยค่าที่วัดไว้จากโหลดเซล เมื่อได้ค่าน้ำหนักแล้วจึงนำไปแสดงบนจอแสดงผล GLCD-XT ต่อไป
    สำหรับสวิตชที่ใช้สำหรับตั้งค่าเริ่มต้นให้เป็น 0 หรือสวิตช์ตั้งค่าศูนย์ ใช้ในกรณีที่ยังไม่ได้ชั่งวัตถุใดๆ แล้วค่าที่ได้ไม่เป็น 0 กรัม โดยโปรแกรมจะตรวจสอบสถานะของสวิตช์ดังกล่าวว่า มีการกดหรือไม่ เมื่อมีการกด ก็จะนำค่าน้ำหนักที่โหลดเซลวัดได้ในขณะนั้นไปกำหนดใหม่ให้เป็น 0 กรัม

ทดสอบวัดน้ำหนัก

    เมื่ออัปโหลดโค้ดและโปรแกรมในบอร์ด Unicon เริ่มทำงานแล้ว ให้รอสักครู่ เพื่อให้โหลดเซลได้เตรียมความพร้อมเข้าสู่สภาวะพร้อมทำงาน จึงไม่ควรวางวัตถุใดๆ ไว้บนแท่นชั่งในขณะเริ่มทำงานใหม่ๆ หากค่าน้ำหนักที่แสดงขณะไม่มีวัตถุใดๆ มาชั่งยังไม่เป็น 0 กรัม ให้กดสวิตช์ที่ต่อกับพอร์ต 20 หรือสวิตช์ตั้งค่าศูนย์ค้างไว้  จนกว่าจอแสดงผล GLCD-XT แสดงข้อความว่า Calibrate ให้ปล่อยสวิตช์ รอจนกระทั่งค่าน้ำหนักที่แสดงเป็น 0 กรัม เมื่อค่าคงที่ที่ 0 กรัมแล้ว จึงเริ่มชั่งน้ำหนักวัตถุได้ ดังแสดงผลการทำงานตามรูปที่ 9

UniconProject07-fig37-[Converted]
รูปที่ 9 ผลการชั่งน้ำหนักที่ได้จากมินิโปรเจ็กต์เครื่องชั่งน้ำหนักแบบดิจิตอลที่สร้างจากบอร์ด Unicon

หมายเหตุ
โค้ดของโครงงานทั้งหมดดาวน์โหลดได้ที่ www.tpemagazine.com

วัดระยะทางด้วยคลื่นอัลตร้าโซนิก

แนะนำโมดูลวัดระยะทางด้วยคลื่นอัลตร้าโซนิก HC-SR04

UniconProject06-fig26_CO-[Converted]

<อ้างอิงจากวารสาร The Prototype Electronics ฉบับที่ 40>


     HC-SR04 เป็นโมดูลวัดระยะทางที่ใช้หลักการสะท้อนของคลื่นอัลตร้าโซนิก ราคาประหยัด โดยตัว HC-SR04 มีแหล่งกำเนิดคลื่นอัลตร้าโซนิกส่งไปสะท้อนกับวัตถุที่อยู่ข้างหน้ากลับมายังตัวรับสัญญาณ โดยระยะทางที่วัดได้จะสัมพันธ์กับระยะเวลาที่คลื่นอัลตร้าโซนิกเคลื่อนที่ไปกระทบวัตถุและสะท้อนกลับมายังตัวรับ เมื่อรู้ระยะเวลาที่คลื่นอัลตร้าโซนิกสะท้อนกลับมา จึงนำมาคำนวณหาเป็นระยะทางระหว่างโมดูล HC-SR04 กับวัตถุได้ โดยโมดูล HC-SR04 วัดระยะทางในช่วง 2 ถึง 500 ซม. (5 เมตร) มีความละเอียดอยู่ที่ 0.3 ซม. ใช้ไฟเลี้ยง +5V
     ในรูปที่ 1 แสดงส่วนประกอบทั้งหมดของชุดโมดูล HC-SR04 เพื่อใช้ในการติดต่อกับบอร์ดไมโครคอนโทรลเลอร์ โดยเฉพาะอย่างยิ่งกับบอร์ด Unicon


รูปที่ 1 โมดูล HC-SR04 พร้อมกับสาย JST3AC-8 จำนวน 2 เส้น เพี่อใช้เชื่อมต่อกับบอร์ด Unicon และบอร์ดไมโครคอนโทรลเลอร์อื่นๆ

การติดต่อกับบอร์ด Unicon

     การเชื่อมต่อกับบอร์ด Unicon ของโมดูล HC-SR04 ใช้สายสัญญาณแบบ JST3AC-8 จำนวน 2 เส้น ดังรูปที่ 2 โดยปลายสายด้านหัวต่อ IDC ตัวเมียของสาย JST3AC-8 เส้นที่ 1 ต่อกับคอนเน็กเตอร์ของโมดูล HC-SR04 ที่ขาไฟเลี้ยง (+V), กราวด์ (GND) และ Trigger ส่วนเส้นที่ 2 ให้ต่อสายสัญญาณ (สีขาว เส้นกลาง) กับขา Echo ส่วนหัวต่อ IDC ตัวเมียของสายสีแดงและดำที่เหลือให้ปล่อยลอยไว้ ส่วนปลายสายด้านที่เป็นหัวต่อ JST ให้นำไปเสียบจุดต่อพอร์ต 2 สำหรับขา Trigger และพอร์ต 3 สำหรับขา Echo บนบอร์ด Unicon

UniconProject06-fig26_CO-[Converted]
รูปที่ 2 วงจรเชื่อมต่อเพื่อใช้งานโมดูล HC-SR04 กับบอร์ด Unicon

    ในการสื่อสารข้อมูลกับโมดูล HC-SR04 ใช้ขาสัญญาณ 2 ขา คือ Trigger และ Echo โดยขา Trigger มีไว้สำหรับสั่งงานให้โมดูล HC-SR04 ส่งคลื่นอัลตร้าโซนิกออกไปข้างหน้า เมื่อคลื่นอัลตร้าโซนิกสะท้อนกลับมาจากวัตถุเป้าหมาย จะส่งสัญญาณพัลส์ออกมาทางขา Echo โดยสัญญาณนี้จะมีความกว้างที่สัมพันธ์กับระยะทางที่วัดได้ ดังนั้น ไมโครคอนโทรลเลอร์จะต้องส่งสัญญาณพัลส์ที่มีความกว้างพัลส์อย่างน้อย 10 ไมโครวินาทีไปยังขา Trigger ของโมดูล HC-SR04 แล้วรอรับสัญญาณพัลส์ที่ส่งกลับมาทางขา Echo เพื่อวัดความกว้างของสัญญาณพัลส์ ดังรูปที่ 3

 UniconProject06-fig27_CO-[Converted]
รูปที่ 3 แสดงการติดต่อระหว่างบอร์ด Unicon กับโมดูล HC-SR04 เพื่อวัดระยะทาง

    เมื่อวัดความกว้างของสัญญาณพัลส์จากขา Echo ในหน่วยไมโครวินาทีแล้ว นำไปคำนวณเป็นระยะทางในหน่วยเซนติเมตรหรือนิ้วได้ดังนี้
         ระยะทาง (เซนติเมตร) = (ระยะเวลาในหน่วยไมโครวินาที / 29) / 2
         ระยะทาง (นิ้ว) = (ระยะเวลาในหน่วยไมโครวินาที / 74) / 2

เขียนโค้ด


     ตัวอย่างโปรแกรมสำหรับติดต่อกับโมดูล HC-SR04 ของบอร์ด Unicon แสดงในโปรแกรมที่ 1 ฟังก์ชั่นหลักของโปรแกรมนี้คือ getDistance();  โดยการทำงานของฟังก์ชั่นนี้ เริ่มต้นด้วยการกำหนดให้ขาพอร์ต 30 เป็น
เอาต์พุตดิจิตอล แล้วส่งสัญญาณพัลส์กว้าง 10 ไมโครวินาทีออกไป จากนั้นกำหนดให้ขาพอร์ต 6 เป็นอินพุตดิจิตอล เพื่อรอรับสัญญาณพัลส์กลับมาจากขา Echo ของโมดูล HC-SR04 โดยใช้ฟังก์ชั่น pulseIn(); จากนั้นนำค่าความกว้างของพัลส์ที่วัดได้มาทำการคำนวณเป็นระยะทางในหน่วยเซนติเมตรและนิ้ว
     จากนั้นจึงนำค่าที่วัดได้ไปแสดงผลที่จอแสดงผล GLCD-XT ทั้งในหน่วยเซนติเมตรและหน่วยนิ้ว

UniconProject06-Program07
โปรแกรมที่ 6 ไฟล์ Unicon_HCSR04.ino สำหรับติดต่อกับโมดูลวัดระยะทางด้วยคลื่นอัลตร้าโซนิก HC-SR04 ของบอร์ด Unicon

 

ทดสอบวัดระยะทาง

     เมื่อรันโปรแกรม ที่จอแสดงผล GLCD-XT จะแสดงข้อความและค่าของการวัดในหน่วยเซนติเมตรและนิ้วทันที ทดลองใช้มือบังที่ด้านหน้าของโมดูล HC-SR04 แล้วเลื่อนมือเข้าใกล้และถอยห่างออกจากโมดูล สังเกตค่าการวัดที่ได้ ดังรูปที่ 4 อาจตรวจสอบความแม่นยำในการวัดด้วยการใช้ไม้บรรทัดหรือตลับเมตรวัดเทียบได้
     จากการทดสอบในพื้นที่โล่งกับวัตถุที่มีรูปร่างแน่นอนเพียง 1 ชิ้น โดยมีการปรับระยะทดสอบอย่างต่อเนื่องพบว่า
โมดูล HC-SR04 วัดระยะทางได้ระหว่าง 2 เซนติเมตร ถึง 5 เมตร แต่ระยะทำการที่ให้ผลค่อนข้างแน่นอนคือ 4 เซนติเมตร ถึง 3 เมตร

UniconProject06-fig28-[Converted] 
รูปที่ 4 แสดงผลการทำงานของโมดูล HC-SR04 บนบอร์ด Unicon

ตรวจจับรังสีอัลตร้าไวโอเล็ต

แนะนำตัวตรวจจับรังสีอัลตร้าไวโอเล็ต ZX-UV

<อ้างอิงจากวารสาร The Prototype Electronics ฉบับที่ 40>

รูปหัวเรื่อง

     ตัวตรวจจับรังสีอัลตร้าไวโอเล็ตหรือ UV Sensor ที่นำมาแนะนำในมินิโปรเจ็กต์นี้เป็นผลงานที่น่าสนใจจาก DF Robot (www.dfrobot.com) เป็นตัวตรวจจับที่สามารถตรวจจับปริมาณรังสี UV หรืออัลตร้าไวโอเลต (Ultraviolet) ความไวสูง ที่ใช้ชิป GUVA-S12SD ติดตั้งบนแผงวงจรและมีจุดต่อพร้อมใช้งาน ดังแสดงในรูปที่ 1 โดยตัวตรวจจับนี้สามารถตรวจจับรังสี UV ที่มีความยาวคลื่นในช่วง 200 ถึง 370 นาโนเมตร โดยให้ผลลัพธ์ออกมาเป็นสัญญาณอะนาลอกที่นำไปคำนวณหาค่าดัชนีของรังสี UV หรือ UV Index ได้ทันที มีจุดเชื่อมต่อสำหรับ บอร์ดไมโครคอนโทรลเลอร์ในอนุกรม .NET Gadgeteer และจุดเชื่อมต่อแบบ IDC 3 ขา จึงเชื่อมต่อกับบอร์ดไมโครคอนโทรลเลอร์ได้ทุกตระกูลรวมถึงบอร์ด Unicon ด้วย

 
รูปที่ 1 แผงวงจรตรวจจับรังสีอัลตร้าไวโอเล็ต ZX-UV พร้อมสายสัญญาณ JST3AC-8 สำหรับเชื่อมต่อบอร์ด Unicon

คุณสมบัติเบื้องต้น

     • ใช้ไฟเลี้ยง +3.3V ถึง +5V
     • ให้แรงดันเอาต์พุตในช่วง 0 ถึง 1V สัมพันธ์กับค่าดัชนีรังสี UV
     • ใช้กระแสไฟฟ้า 0.06mA (สูงสุด 0.1mA)
     • ตรวจจับรังสี UV ที่มีความยาวคลื่นในช่วง 200 ถึง 370 นาโนเมตร
     • ความไวในการตรวจจับน้อยกว่า 0.5 วินาที
     • ทำงานในสภาพแวดล้อมที่มีอุณหภูมิ -20 ถึง 85 องศาเซลเซียส
     • จุดต่อสำหรับ .Net Gadgeteer และจุดต่อแบบ IDC 3 ขา   
     • มีขนาดเพียง 27 x 22 มิลลิเมตร
     ในตารางที่ 1 แสดงค่าที่วัดได้จากตัวตรวจจับรังสีอัลตร้าไวโอเล็ต ZX-UV นำมาเทียบกับดัชนีรังสี UV หรือ UV index โดยค่าของแรงดันไฟตรงที่ได้จากตัวตรวจจับรังสีอัลตร้าไวโอเล็ต (Vout) จากในตารางที่ 1 มีหน่วยเป็น
มิลลิโวลต์ (mV) ยิ่งตรวจจับพบรังสี UV มีความเข้มมากเท่าใด แรงดันที่ได้จะสูงขึ้น และค่าดัชนีรังสีก็จะมีค่าสูงเช่นกัน

ตารางที่ 1
ตารางที่ 1 แสดงค่าที่วัดได้จากตัวตรวจจับรังสี UV (ZX-UV) เทียบกับค่าดัชนีรังสี UV

 

การต่อวงจรเพื่อใช้งานกับบอร์ด Unicon

     ใช้สาย JST3AC-8 ในการเชื่อมต่อระหว่างบอร์ด Unicon กับตัวตรวจจับ ZX-UV ดังรูปที่ 2 โดยปลายสายด้านหัวต่อ IDC ตัวเมียของสาย JST3AC-8 ต่อกับคอนเน็กเตอร์ IDC ของแผงวงจรตรวจจับ ZX-UV ที่ขาไฟเลี้ยง (+V), กราวด์ (GND) และ OUT ส่วนปลายสายที่เป็นหัวต่อ JST ให้นำไปเสียบจุดต่อพอร์ต A0 ของบอร์ด Unicon

รูปที่ 2
รูปที่ 2 วงจรเชื่อมต่อเพื่อใช้งานตัวตรวจจับรังสีอัลตร้าไวโอเล็ต ZX-UV กับบอร์ด Unicon

 

เขียนโค้ด


     โปรแกรมสำหรับติดต่อเพื่ออ่านค่าจากตัวตรวจจับรังสี UV ของบอร์ด Unicon แสดงในโปรแกรมที่ 1 เป็นการอ่านค่าอินพุตอะนาลอกแบบพื้นฐาน จากนั้นนำค่าที่ได้มาทำการเปรียบเทียบกับฐานข้อมูลของค่าดัชนีรังสี UV ที่ได้มาจากตารางที่ 1 แล้วนำค่าทั้งข้อมูลดิบและค่าดัชนีรังสี UV ที่เทียบได้ไปแสดงผลที่จอแสดงผล GLCD-XT 

UniconProject05-Program06
โปรแกรมที่ 1 ไฟล์ Unicon_UVsensor.ino สำหรับอ่านค่าจากแผงวงจรตรวจจับรังสีอัลตร้าไวโอเล็ต ZX-UV ของบอร์ด Unicon

 

ทดสอบการทำงาน

     หลังจากอัปโหลดโปรแกรมไปยังบอร์ด Unicon แล้ว นำแผงวงจรตรวจจับ ZX-UV ไปวัดในพื้นที่ที่มีแสงแดดส่องถึง แล้วดูค่าที่แสดงบนจอแสดงผล GLCD-XT ดังรูปที่ 24 โดยในบรรทัดแรกเป็นข้อมูลดิบที่ได้จากตัวตรวจจับรังสี UV ผ่านการแปลงสัญญาณด้วยโมดูลแปลงสัญญาณอะนาลอกเป็นดิจิตอลของบอร์ด Unicon ส่วนในบรรทัดที่สองเป็นค่าดัชนีรังสียูวีที่วัดได้ เพื่อแสดงว่า แสงที่ส่องมายังตัวตรวจจับมีค่าดัชนีรังสี UV อยู่ในระดับใด หากดัชนีมีค่าสูงแสดงว่า มีปริมาณของรังสี UV มาก
     ดัชนีรังสี UV 1 ถึง 2 แสดงว่า ยังมีความเข้มของรังสีต่ำ ควรสวมแว่นกันแดด และสวมเสื้อผ้าแบบป้องกันรังสี UV
     ดัชนีรังสี UV 3 ถึง 5 แสดงว่า มีความเข้มของรังสีปานกลาง นอกจากแว่นกันแดดและเสื้อผ้าป้องกันรังสี UV แล้ว ควรสวมหมวกเพิ่มด้วย
     ดัชนีรังสี UV 6 ถึง 7 แสดงว่า มีความเข้มของรังสีสูง ในระดับนี้ควรถือหรือใช้ร่มป้องกันร่วมกับแว่นกันแดด, เสื้อผ้าป้องกันรังสี UV และการสวมหมวก
     ดัชนีรังสี UV 8 ถึง 10 แสดงว่า มีความเข้มของรังสีสูงมาก ต้องป้องกันเหมือนกับดัชนีรังสี UV ในระดับ 6 และ 7
     ดัชนีรังสี UV 11 ขึ้นไป แสดงว่า ความเข้มของรังสีสูงจัด ควรอยู่ในร่ม และป้องกันในแบบเดียวกับเมื่อค่าดัชนีรังสี UV เป็น 8 ถึง 10 มักพบในช่วงเวลา 10 นาฬิกาถึง 16 นาฬิกา (สี่โมงเย็น)

UniconProject05-fig24-[Converted]
รูปที่ 3 ผลการทำงานของแผงวงจรตรวจจับรังสีอัลตร้าไวโอเล็ต ZX-UV ที่แสดงทั้งข้อมูลดิบที่ได้จากตัวตรวจจับและค่าดัชนีรังสี UV ผ่านทางบอร์ด Unicon

CMPS10 Compass Sensor with UNICON

รู้ทิศและความเอียงด้วย CMPS10 โมดูลเข็มทิศอิเล็กทรอนิกส์

รูปหัวเรื่อง
<อ้างอิงจากวารสาร The Prototype Electronics ฉบับที่ 40>

เบื้องต้นกับ CMPS10 

  CMPS10 เป็นโมดูลเข็มทิศและวัดความเอียงผลงานของ Devantech ภายในตัวโมดูลประกอบไปด้วยตัวตรวจจับแม่เหล็กขั้วโลก 3 แกนกับตัวตรวจจับความเร่ง 3 แกนที่ทำงานร่วมกับชิปประมวลผลขนาด 16 บิต เพื่อวัดทิศทางได้ว่า โมดูลหันไปในทิศใด รวมถึงวัดความเอียงได้ด้วย
รูปที่ 1
รูปที่ 1 หน้าตา, การจัดขา และการกำหนดทิศอ้างอิงของโมดูลเข็มทิศ CMPS10

    โมดูล CMPS10 มีหน้าตา, การจัดขา และการกำหนดทิศทางหลักจากผู้ผลิตแสดงในรูปที่ 1 โดยตำแหน่งดังกล่าวจะอ้างอิงกับขั้วของแม่เหล็กโลกหรือเป็นทิศเหนือ อย่างไรก็ตาม ผู้ใช้งานสามารถกำหนดทิศอ้างอิงใหม่ได้ โดยไม่จำเป็นต้องเป็นทิศเหนือเสมอไป ด้วยกระบวนการทางซอฟต์แวร์และขั้นตอนทางฮาร์ดแวร์เล็กน้อย   

รูปที่ 2
รูปที่ 2 แสดงที่มาของค่าที่อ่านได้จากโมดูลเข็มทิศ CMPS10

    CMPS10 ใช้ไฟเลี้ยงในช่วง +3.6 ถึง +5V การเชื่อมต่อกับ CMPS10 ทำได้ 3 วิธีคือ โหมดบัส I2C, โหมดอนุกรมหรือ Serial และโหมด PWM ค่าที่ได้เลือกได้ทั้งแบบ Bearing, Pitch และ Roll โดย Bearing เป็นค่าทิศทางรอบตัวในแนวแกนนอน มีค่าระหว่าง 0 ถึง 359.9 องศา ส่วน Pitch เป็นมุมยกมีค่าระหว่าง -85 ถึง 85 องศาเทียบกับแนวระนาบ และ Roll เป็นมุมเอียงมีค่าระหว่าง -85 ถึง 85 องศาเทียบกับแนวระนาบ ดูรูปที่ 2 ประกอบ


การติดต่อในโหมดบัส I2C

    ในมินิโปรเจ็กต์นี้เลือกติดต่อกับโมดูล CMPS10 ผ่านทางบัส I2C เนื่องจากช่วยลดจำนวนพอร์ตที่ใช้งานได้ เพราะด้วยการใช้บัส I2C ผู้ใช้งานสามารถต่อพ่วงขาพอร์ต SDA และ SCL ของบอร์ด Unicon เพียง 2 ขากับตัวตรวจจับที่ใช้บัส I2C ได้หลายตัวร่วมบนบัสเดียวกัน นอกจากนั้น จากการทดสอบพบว่า การติดต่อกับโมดูล CMPS10 ในโหมดบัส I2C สะดวกกว่าแบบอนุกรมและแบบ PWM Mode
    สำหรับ CMPS10 มีแอดเดรสสำหรับเชื่อมต่อผ่านระบบบัส I2C อยู่ที่ 0x60 มีรีจิสเตอร์เก็บค่าต่างๆ รวม 22 ตัว ดังแสดงในตารางที่ 1

ตารางที่ 1 
ตารางที่ 1 รายละเอียดของรีจิสเตอร์ทั้งหมดของโมดูลเข็มทิศ CMPS10

 หากส่งข้อมูลคำสั่งเป็น 0x00 จะเป็นการอ่านค่าเวอร์ชันเฟิร์มแวร์ของโมดูล CMPS10
    หากส่งข้อมูลคำสั่งเป็น 0x02 จะเป็นการอ่านข้อมูล โดย CMPS10 จะส่งข้อมูลกลับมา 4 ไบต์ ไบต์แรกเป็นไบต์สูงของค่ามุมทิศ (bearing), ไบต์ที่สองเป็นไบต์ต่ำของค่ามุมทิศ, ไบต์ที่สามจะเป็นค่ามุมยก (pitch) และไบต์สุดท้ายจะเป็นค่ามุมเอียง (roll) โดยค่ามุมทิศที่อ่านได้มีค่าระหว่าง 0 ถึง 3599 (16 บิต) จึงต้องหารด้วย 10 เพื่อให้ได้ค่ามุมทิศที่มีค่าระหว่าง 0 ถึง  359.9 องศา

การต่อวงจรเพื่อใช้งานกับบอร์ด Unicon

    เตรียมอุปกรณ์ทั้งหมดดังรูปที่ 3 ใช้สาย JST3AC-8 จำนวน 2 เส้นต่อระหว่างบอร์ด Unicon และโมดูล CMPS10 ดังรูปที่ 4 โดยปลายสายด้านหัวต่อ IDC ตัวเมียของสาย JST3AC-8 เส้นที่ 1 ต่อกับคอนเน็กเตอร์ของ CMPS10 ที่ขาไฟเลี้ยง (+V), กราวด์ (GND)และ SDA ส่วนเส้นที่ 2 ให้ต่อสายสัญญาณ (สีขาว เส้นกลาง) กับขา SCL ส่วนหัวต่อ IDC ตัวเมียของสายสีแดงและดำที่เหลือให้ปล่อยลอยไว้ ส่วนปลายสายด้านที่เป็นหัวต่อ JST ให้นำไปเสียบจุดต่อพอร์ต SDA และ SCL บนบอร์ด Unicon

รูปที่ 3 อุปกรณ์ทั้งหมดที่ต้องใช้ในการใช้งานโมดูลเข็มทิศ CMPS10 กับบอร์ด Unicon

UniconProject04-fig19_CO-[Converted]

รูปที่ 4 วงจรเชื่อมต่อเพื่อใช้งานโมดูลเข็มทิศ CMPS10 กับบอร์ด Unicon


    หากต้องการติดตั้งโมดูลเข็มทิศ CMPS10 เข้ากับแท่นหรือฐานยึดใดๆ จะต้องใช้สกรูและนอตพลาสติกในการติดตั้งเพื่อลดผลกระทบจากโลหะที่อาจมีต่อการตรวจจับแม่เหล็กขั้วโลกของตัวตรวจจับภายใน CMPS10 (ในชุดอุปกรณ์ของ CMPS10 มีเตรียมไว้ให้แล้ว - ดูได้จากรูปที่ 3)
UniconProject04-Program04
โปรแกรมที่ 1 ไฟล์ Unicon_CMPS10_Button.ino สำหรับอ่านค่าจากโมดูลเข็มทิศ CMPS10 ของบอร์ด Unicon


เขียนโค้ด

    โค้ดตัวอย่างสำหรับอ่านค่าของโมดูลเข็มทิศ CMPS10 แสดงในโปรแกรมที่ 1 จากนั้นนำค่าที่ได้มาแสดงผลที่จอ GLCD-XT ที่ติดตั้งบนบอร์ด Unicon
    ฟังก์ชั่นหลักๆ ของโปรแกรมมี 3 ตัวคือ measurement();, display_data(); และ calibration(); โดยฟังก์ชั่นแรกเป็นฟังก์ชั่นติดต่อเพื่ออ่านค่าจาก CMPS10 ผ่านรูปแบบการสื่อสารข้อมูลระบบบัส I2C ค่าที่ได้มี 3 ค่าคือ bearing, pitch และ roll จากนั้นนำค่าทั้งหมดมาแสดงผลที่ GLCD-XT ด้วยฟังก์ชั่น display_data();
    ส่วนฟังก์ชั่น calibrate(); ใช้ปรับเทียบทิศอ้างอิงให้แก่โมดูล CMPS10 โดยทำการเขียนค่า 0xF0 ไปยังรีจิสเตอร์ 22 ของโมดูล CMPS10 เพื่อเริ่มต้นการปรับเทียบ จากนั้นเมื่อกำหนดทิศอ้างอิงเริ่มต้นได้ ให้เขียนข้อมูล 0xF5 ไปยังรีจิส
เตอร์ 22 ของโมดูล CMPS10 โดยในการเขียนแต่ละครั้งจะเกิดขึ้นเมื่อมีการกดสวิตช์ที่ต่อกับขาพอร์ต 30 ในการปรับแต่งต้องทำทั้งสิ้น 4 ครั้งตามทิศหลัก แต่ละทิศจะมีมุมต่างกัน 90 องศา 

ทดสอบวัดทิศทาง

    หลังจากอัปโหลดโปรแกรมไปยังบอร์ด Unicon ระบบจะทำงานทันที Unicon จะติดต่อกับโมดูล CMPS10 เพื่ออ่านค่าและแสดงผลดังรูปที่ 5 หากไม่มีการกำหนดทิศทางอ้างอิงเป็นอย่างอื่น ตำแหน่ง 0 องศาจะหมายถึง ทิศเหนือ ซึ่งจะอ้างอิงกับขั้วแม่เหล็กโลก โดยทิศอ้างอิงหลักที่กำหนดมาจากโรงงานของโมดูล CMPS10 แสดงในรูปที่ 2
    หากมีการหมุนหรือบิดตัวโมดูลไปมา ค่าของมุมยก (pitch) และมุมเอียง (roll) จะเปลี่ยนแปลง เป็นการแสดงให้เห็นว่า
โมดูล CMPS10 สามารถวัดความเอียงได้ด้วย
UniconProject04-fig20-[Converted]
รูปที่ 5 ผลการทำงานของโมดูล CMPS10 ที่แสดงค่ามุมของทิศ (Bearing), มุมยก (Pitch) และมุมเอียง (Roll) ผ่านทางบอร์ด Unicon
 

การปรับแต่งทิศอ้างอิง

    อย่างไรก็ตาม ในการใช้งานจริง ควรมีการปรับแต่งทิศอ้างอิงให้ถูกต้องเพื่อขจัดหรือลดผลจากสนามแม่เหล็กที่อาจค่างอยู่ภายในตัวตรวจจับสนามแม่เหล็กของโมดูล CMPS10 มีขั้นตอนโดยสรุปดังนี้
    (1) เริ่มต้นด้วยการกดสวิตช์ที่ต่อกับพอร์ต 30 เพื่อเข้าสู่โหมดปรับทิศอ้างอิง จอแสดงผล GLCD-XT แสดงข้อความ Calibrate Start ตามด้วยข้อความ Turn module to North. ทำการหมุนตัวโมดูล CMPS10 ไปยังทิศที่กำหนดให้เป็นทิศเหนือ (อาจเป็นทิศเหนือจริงๆ หรือทิศใดๆ ที่ต้องการอ้างอิงก็ได้) แล้วกดสวิตช์ที่ต่อกับพอร์ต 30 เพื่อกำหนดทิศอ้างอิงครั้งที่ 1 จะเห็น LED ที่โมดูล CMPS10 ติดสว่าง
    (2) ที่จอแสดงผล GLCD-XT แสดงข้อความ Turn module to East. หมุนตัวโมดูล CMPS10 ไปทางขวาในทิศทางตามเข็มนาฬิกา 90 องศา แล้วกดสวิตช์ครั้งที่ 2 อันการกำหนดทิศตะวันออก
    (3) จอแสดงผล GLCD-XT แสดงข้อความ Turn module to South. หมุนตัวโมดูล CMPS10 ไปทางขวาในทิศทางตามเข็มนาฬิกาไปอีก 90 องศา แล้วกดสวิตช์ครั้งที่ 3 เพื่อกำหนดเป็นทิศใต้
    (4) จอแสดงผล GLCD-XT แสดงข้อความ Turn module to West. จากนั้นหมุนโมดูลไปทางขวาในทิศทางตามเข็มนาฬิกาอีก 90 องศา แล้วกดสวิตช์ครั้งที่ 4 เป็นครั้งสุดท้าย LED ของโมดูล CMPS10 จะดับลง เป็นอันสิ้นสุดการปรับแต่งทิศอ้างอิงของโมดูล CMPS10
    ในรูปที่ 6 แสดงขั้นตอนการปรับแต่งทิศอ้างอิงของโมดูล CMPS10

UniconProject04-fig21_CO-[Converted]
รูปที่ 6 การปรับแต่งทิศอ้างอิงของโมดูล CMPS10

 


แก้โค้ดลดอุปกรณ์

    จากโปรแกรมที่ 1 เป็นตัวอย่างที่นำไปใช้กับบอร์ด Arduino ได้ทุกแบบ โดยอาจแก้โค้ดเพื่อเปลี่ยนอุปกรณ์แสดงผลเป็น
โมดูล LCD 16 ตัวอักษร 2 บรรทัด หรือ LED รวมถึงแสดงผ่าน Serial Monitor ของ Arduino IDE สำหรับผู้ใช้งานบอร์ด Unicon และใช้การแสดงผลผ่านจอ GLCD-XT สามารถใช้สวิตช์ OK ในการเข้าสู่โหมดปรับเทียบทิศอ้างอิงแทนการใช้สวิตช์ภายนอกได้ โดยดูตัวอย่างโค้ดในโปรแกรมที่ 2
UniconProject04-Program05
โปรแกรมที่ 2 ไฟล์ Unicon_CMPS10_SW_OK.ino สำหรับอ่านค่าจากโมดูลเข็มทิศ CMPS10 ของบอร์ด Unicon และใช้สวิตช์ OK บนบอร์ดแสดงผล GLCD-XT ในการปรับแต่งทิศอ้างอิง