Translate

Membuat Alat Penunjuk Arah Kiblat Dengan Arduino, SRF04 sensor jarak, dan magnetometer / compass sensor hmc5883l

Membuat Alat Penunjuk Arah Kiblat Dengan Arduino, SRF04 sensor jarak, dan magnetometer / compass sensor hmc5883l


           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

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