โมดูลเข็มทิศแบบดิจิตอล เป็นเข็มทิศอิเล็กทรอนิกส์ที่ใช้เชื่อมต่อกับไมโครคอนโทรลเลอร์ เพื่อใช้ระบุตำแหน่งทิศทางได้อย่างถูกต้องแม่นยำ เหมาะอย่างยิงกับการประยุกต์ใช้งานกับหุนยนต์ หรืออุปกรณ์ควบคุมต่างๆ ที่ต้องมีการเคลื่อนที่
อุปกรณ์ที่ใช้ในการหาทิศทางขั้วแม่เหล็กโลก นั้นคือเข็มทิศ ซึ่งเป็นอุปกรณ์ที่มีประโยชน์อย่างมากในการเดินทางเอาไว้หาทิศทาง ซึ่งเข็มทิศนั้นจะต้องชี้บอกตำแหน่งทางทิศเหนืออยู่เสมอ
พอมาถึงยุคดิจิตอลที่อะไรๆ มันก็เล็กลงเล็กลงทุกที เข็มทิศก็มีการพัฒนาจนมากลายเป็นโมดูลขนาดเล็กๆ เพียง 6mm.x 6mm. เท่านั้นเอง ซึ่งเล็กมากๆ สามารถนำเข้าไปติดตั้งที่อุปกรณ์เช่นมือถือหรือว่าในรถในเรือได้ทันที เจ้าโมดูลตัวจิ๋วนี้มีรหัสว่า Compass Module ใช้การเชื่อมต่อข้อมูล แบบ I2C 2 wire serial interface ใช้ไฟได้ตั้งแต่ 2.7V-5V ซึ่งสะดวกมากในการนำไปพัฒนา
โมดูล HMC6352 นี้จะใช้การบอกทิศทางแบบอะซิมุท (Azimuth) ซึ่งการบอกแบบนี้จะเป็นวิธีการที่คิดขึ้นมาเพื่อใช้ในการบอกทิศทาง คือวัดขนาดของมุมทางราบที่ วัดจากแนวทิศเหนือหลักเวียนตามเข็มนาฬิกามาบรรจบกับแนวเป้าหมาย ที่ต้องการมุมทิศอะซิมุทนี้จะมีค่าตั้งแต่ 0-360 องศา และเมื่อวัดมุมจากเส้นฐานทิศเหนือหลักชนิดใดก็เรียกทิศเหนือตามหลักนั้น
ทำการทดลองกันเลย
เตรียมอุปกรณ์กันก่อน
1. HMC6352 ซึ่งปัจจุบันโมดูลตัวนี้มีหลายแบบครับใช้งานได้เหมือนกันรุ่นใหม่ๆจะเล็กลง มา
เตรียมอุปกรณ์กันก่อน
1. HMC6352 ซึ่งปัจจุบันโมดูลตัวนี้มีหลายแบบครับใช้งานได้เหมือนกันรุ่นใหม่ๆจะเล็กลง มา
2. บอร์ดตัวเก่งของ เรา Arduino นั่นเอง ซึ่งก็ต้องมาพร้อมกับโปรแกรมภาษา C++ ที่สามารถหาโหลดมาใช้ทำให้การเขียนโปรแกรมติดต่ออุปกรณ์ต่างๆ นั้นเป็นเรื่องง่ายๆ
ให้ต่อไฟ GND และ SDA SDL ซึ่งเหตุผลที่ใช้ Analog 4 และ 5 ของ Arduino ก็เพราะว่า ฟังชั่น wire.h ของโปรแกรม Arduino นั้น ได้เขียนไว้โดยกำหนดไว้แล้ว เราก็ดึง wire.h มาใช้เลยก็เลยต้องต่อที่พอร์ตนี้จ้า
เริ่มต่อกันเลย
ต่อสายเพียงแค่ 2 เส้นเท่านั้นเอง
ต่อมาก็ทำการโปรแกรมให้กับ Arduino อ่านค่าออกมาโดยให้โปรแกรมดังนี้
CODE
#include <Wire.h> int HMC6352Address = 0x42; //address ของ HMC6352 ที่ทางโรงงานนั้นกำหนดมาคือ 0x42 int slaveAddress; int ledPin = 13; boolean ledState = false; byte headingData[2]; int i, headingValue; void setup() {// Shift the device's documented slave address (0x42) 1 bit right // This compensates for how the TWI library only wants the // 7 most significant bits (with the high bit padded with 0) slaveAddress = HMC6352Address >> 1; // This results in 0x21 as the address to pass to TWI Serial.begin(9600); pinMode(ledPin, OUTPUT); // Set the LED pin as output Wire.begin(); } void loop() { // Flash the LED on pin 13 just to show that something is happening // Also serves as an indication that we're not "stuck" waiting for TWI data ledState = !ledState; if (ledState) { digitalWrite(ledPin,HIGH); } else { digitalWrite(ledPin,LOW); } // Send a "A" command to the HMC6352 // This requests the current heading data Wire.beginTransmission(slaveAddress); Wire.send("A"); // The "Get Data" command Wire.endTransmission(); delay(10); // The HMC6352 needs at least a 70us (microsecond) delay // หลังจากที่ได้ส่ง A ซึ่งเป็นคำสั่งให้โมดูลส่ง Output ออกมาเราจะก็จะทำการอ่านค่า Output โดยใช้ Heading Mode ของตัวไอซี // ตัวอย่าง เราจะอ่านค่าออกมาเป็น 1345 ค่าองศาอซิมุสจะเท่ากับ 134.5 degrees Wire.requestFrom(slaveAddress, 2); // Request the 2 byte heading (MSB comes first) i = 0; while(Wire.available() && i < 2) { headingData[i] = Wire.receive(); i++; } headingValue = headingData[0]*256 + headingData[1]; // Put the MSB and LSB together Serial.print("Current heading: "); Serial.print(int (headingValue / 10)); // The whole number part of the heading Serial.print("."); Serial.print(int (headingValue % 10)); // The fractional part of the heading Serial.println(" degrees"); delay(500); } |
เมื่อพิมพ์โปรแกรมเสร็จเรียบร้อยแล้วจากนั้นทำการกด Upload ลงสู่ Arduino
ลองหันไปทางทิศตะวันออก ดูบ้าง หรือ 90 องศา Azimuth
ลองอีกซักมุมสองมุมอย่างอันนี้ไม่รู้ว่ามุมเท่าไรแต่ไปทาง ตะวันออกเฉียงใต้
ลองหันทางนี้บ้าง
HMC6352 Modulehttp://www.warf.com/index.php?action=productreview&productitems=360
Datasheet
http://www.sparkfun.com/datasheets/Components/HMC6352.pdfArduino Decimal USB
http://www.warf.com/index.php?action=productreview&productitems=132ข้อมูล Arduino
http://www.wara.com/modules.php?name=News&file=article&sid=711
ไม่มีความคิดเห็น:
แสดงความคิดเห็น