Malam ini saya akan menjelaskan mengenai bagaimana cara mengakses sensor magnetometer dan servo menggunakan arduino, alat yang akan dibuat ini aplikasinya yaitu untuk penunjukan arah mata angin utara dan selatan, jadi alat ini akan memberikan arah posisi utara dan selatan dimanapun berada sehingga akan memudahkan orang dalam melangkah. Alat ini bagus dipakai untuk nelayan atau orang yang lagi berada di hutan, sehingga jika ingin melihat arah utara hanya perlu melihat alat dan mengikuti petunjuknya, alat penunjuk menggunakan motor servo dan sensor untuk menentukan arah utara dan selatan adalah sensor HMC5883L. Untuk lebih jelasnya berikut penjelasan program dan skemanya.
1. Arduino Uno
b. Sensor HMC5883L
c. Motor Servo
d. Program Arduino
#include <Wire.h> //I2C Arduino Library
#include <Servo.h>
#define addr 0x1E //I2C Address for The HMC5883
Servo servo1; Servo servo2;
void setup(){
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(addr); //start talking
Wire.write(0x02); // Set the Register
Wire.write(0x00); // Tell the HMC5883 to Continuously Measure
Wire.endTransmission();
pinMode(13,OUTPUT);
servo1.attach(14); //analog pin 0
servo2.attach(15); //analog pin 1
}
void loop(){
int x,y,z; //triple axis data
//Tell the HMC what regist to begin writing data into
Wire.beginTransmission(addr);
Wire.write(0x03); //start with register 3.
Wire.endTransmission();
//Read the data.. 2 bytes for each axis.. 6 total bytes
Wire.requestFrom(addr, 6);
if(6<=Wire.available()){
x = Wire.read()<<8; //MSB x
x |= Wire.read(); //LSB x
z = Wire.read()<<8; //MSB z
z |= Wire.read(); //LSB z
y = Wire.read()<<8; //MSB y
y |= Wire.read(); //LSB y
}
// Show Values
Serial.print("X Value: ");
Serial.println(x);
Serial.print("Y Value: ");
Serial.println(y);
Serial.print("Z Value: ");
Serial.println(z);
Serial.println();
delay(500);
if ((y >= 400) && (y <= 600)) {
servo1.write(85);
servo2.write(85);
digitalWrite(13, HIGH);
}
else if ((y >= -550) && (y <= -400)) {
servo1.write(85);
servo2.write(85);
digitalWrite(13, LOW);
}
else
{
servo1.write(200);
servo2.write(200);
digitalWrite(13, HIGH);
}
}
#include <Servo.h>
#define addr 0x1E //I2C Address for The HMC5883
Servo servo1; Servo servo2;
void setup(){
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(addr); //start talking
Wire.write(0x02); // Set the Register
Wire.write(0x00); // Tell the HMC5883 to Continuously Measure
Wire.endTransmission();
pinMode(13,OUTPUT);
servo1.attach(14); //analog pin 0
servo2.attach(15); //analog pin 1
}
void loop(){
int x,y,z; //triple axis data
//Tell the HMC what regist to begin writing data into
Wire.beginTransmission(addr);
Wire.write(0x03); //start with register 3.
Wire.endTransmission();
//Read the data.. 2 bytes for each axis.. 6 total bytes
Wire.requestFrom(addr, 6);
if(6<=Wire.available()){
x = Wire.read()<<8; //MSB x
x |= Wire.read(); //LSB x
z = Wire.read()<<8; //MSB z
z |= Wire.read(); //LSB z
y = Wire.read()<<8; //MSB y
y |= Wire.read(); //LSB y
}
// Show Values
Serial.print("X Value: ");
Serial.println(x);
Serial.print("Y Value: ");
Serial.println(y);
Serial.print("Z Value: ");
Serial.println(z);
Serial.println();
delay(500);
if ((y >= 400) && (y <= 600)) {
servo1.write(85);
servo2.write(85);
digitalWrite(13, HIGH);
}
else if ((y >= -550) && (y <= -400)) {
servo1.write(85);
servo2.write(85);
digitalWrite(13, LOW);
}
else
{
servo1.write(200);
servo2.write(200);
digitalWrite(13, HIGH);
}
}
e. Cara Penggunaan Alat
Hubungkan alat dengan supply adaptor 12 volt, kemudian untuk supply servo 5 volt menggunakan UBEC 3A sehingga jalannya lebih stabil dan tidak panas, kemudian baca nilai output dari sensor HMC5883L, jika sudah ditentukan nilai untuk utara dan selatan maka upload program arduino dan uji coba menggunakan motor servo. jika diarahkan ke utara harusnya dia akan menghadap keutara, kemudian hadapkan sensor ke barat, harusnya servo tetap akan menunjuk arah utara, begitu seterunya, dan jika sensor menunjuk arah selatan maka led arduino akan hidup.
hmc5883lnya di hubungkan ke pin mna gan???
ReplyDelete