Pada kesempatan yang berbahagia kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang fungsinya adalah untuk menunjukkan arah kiblat bagi tuna netra, jadi alat ini dilengkapi dengan dua buah sensor yaitu sensor jarak dan sensor magneto / compass, fungsi dari sensor compass adalah untuk menentukan arah kiblat yang telah disetting, kemudian fungsi dari sensor jarak / SRF04 yaitu untuk mendeteksi jarak benda yang ada didepannya, jadi si tuna netra juga tahu apakah didepannya ada benda ataukah tidak. Alat ini memberikan indikator berupa bunyi jadi jika bunyi buzzernya dua kali mengindikasikan bahwa didepan ada benda dengan jarak kurang dari 1,5 meter, kemudian jika bunyi buzzer hanya sekali dan panjang, berarti itu merupakan arah kiblat. untuk lebih jelasnya berikut adalah skema dan programnya.
a. Arduino Uno
b. Sensor Jarak SRF04
c. Sensor Compass / Magneto HMC5883L
d. Buzzer
e. Program Arduino IDE
#include <Wire.h>
#include <HMC5883L.h>
#define trigPin 2
#define echoPin 3
#include <HMC5883L.h>
#define trigPin 2
#define echoPin 3
HMC5883L compass;
void setup(){
pinMode(8,OUTPUT);
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Initialize Initialize HMC5883L
Serial.println("Initialize HMC5883L");
while (!compass.begin())
{
Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
delay(500);
}
// Set measurement range
compass.setRange(HMC5883L_RANGE_1_3GA);
// Set measurement mode
compass.setMeasurementMode(HMC5883L_CONTINOUS);
// Set data rate
compass.setDataRate(HMC5883L_DATARATE_30HZ);
// Set number of samples averaged
compass.setSamples(HMC5883L_SAMPLES_8);
// Set calibration offset. See HMC5883L_calibration.ino
compass.setOffset(0, 0);
}
void loop(){
Vector norm = compass.readNormalize();
// Calculate heading
float heading = atan2(norm.YAxis, norm.XAxis);
float declinationAngle = (4.0 + (26.0 / 60.0)) / (180 / M_PI);
heading += declinationAngle;
// Correct for heading < 0deg and heading > 360deg
if (heading < 0)
{
heading += 2 * PI;
}
if (heading > 2 * PI)
{
heading -= 2 * PI;
}
// Convert to degrees
float headingDegrees = heading * 180/M_PI;
Serial.print(" Degress = ");
Serial.print(headingDegrees);
Serial.println();
long duration, distance;
digitalWrite(trigPin, LOW); // Added this line
delayMicroseconds(2); // Added this line
digitalWrite(trigPin, HIGH);
// delayMicroseconds(1000); - Removed this line
delayMicroseconds(10); // Added this line
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
Serial.print(distance);
Serial.println(" cm");
if((headingDegrees >= 140.0)&&(headingDegrees <= 160.0)){
digitalWrite(8,LOW);
}
else{
digitalWrite(8,HIGH);
}
if(distance < 150){
digitalWrite(8,LOW);
delay(200);
digitalWrite(8,HIGH);
delay(200);
digitalWrite(8,LOW);
delay(200);
digitalWrite(8,HIGH);
delay(200);
}
delay(200);
}
f. VIDEO HASILNYA
No comments:
Post a Comment