TechnicalEngineer
Published © GPL3+

Angle and Distance Measurement Device Using Arduino

Project demonstrates the interfacing of an accelerometer (ADXL335) with Arduino and calibrating it to measure angles from a reference plane.

IntermediateFull instructions provided6,100
Angle and Distance Measurement Device Using Arduino

Story

Read more

Schematics

Angle and Distance Measurement Device using Arduino

Code

Angle and Distance Measurement Device using Arduino

C Header File
/*    -----------------------------------------------------------------------------
                Connections:
                 RS pin of LCD to PIN 12
                 EN pin of LCD to PIN 11
                 RW pin to GND
                 X pin of accelerometer to AP1
                 Y pin of accelerometer to AP2
                 Z pin of accelerometer to AP3
                 Switch to P1 (Digital Pin)
                 AREF(on Board) to 5V
                 ECHO pin of HCSR04 to P7 (Digital)
                 TRIG pin of HCSR04 to P6 (Digital)
-----------------------------------------------------------------------------     */             


#include <LiquidCrystal.h>
#define ADC_ref 5              // ADC reference Voltage
#define zero_x 1.799          
#define zero_y 1.799
#define zero_z 1.799
#define echoPin 7
#define trigPin 6               
#define selectSwitch 1
#define sensitivity_x 0.4
#define sensitivity_y 0.4
#define sensitivity_z 0.4
unsigned int value_x;
unsigned int value_y;
unsigned int value_z;
float xv;
float yv;
float zv;
float angle;
LiquidCrystal lcd(12,11,5,4,3,2);
void setup()  
      {
        analogReference(ADC_ref);
        pinMode(selectSwitch,INPUT);
        pinMode(trigPin,OUTPUT);
        pinMode(echoPin,INPUT);
        lcd.clear();
        lcd.begin(16,2);
        lcd.print("Tilt & Distance");
        delay(1000);
        lcd.setCursor(0,2);
        lcd.print("  Measurement  ");
        delay(2000);
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(" ADXL335,HCSR04 ");
        delay(1000);
        lcd.setCursor(0,1);
        lcd.print(" & Freeduino 1.1");
        delay(2000);
        lcd.clear();
        lcd.setCursor(0,1);
        lcd.print("      ...deepesh");
        delay(2000);
        lcd.clear();
      }
void loop()
  {
      int distance,duration;
      value_x = analogRead(1);
      value_y = analogRead(2);
      value_z = analogRead(3);
      xv=(value_x/1024.0*ADC_ref-zero_x)/sensitivity_x;
      yv=(value_y/1024.0*ADC_ref-zero_y)/sensitivity_y;
      zv=(value_z/1024.0*ADC_ref-zero_z)/sensitivity_z;
      angle =atan2(-yv,-zv)*57.2957795+180;
      if(digitalRead(selectSwitch)==HIGH)
    {
        lcd.setCursor(0,0);
        lcd.print("Tilt: ");
        lcd.print(angle);
        lcd.print(" deg");
        digitalWrite(trigPin, HIGH);
        delayMicroseconds(1000);
        digitalWrite(trigPin, LOW);
        duration = pulseIn(echoPin, HIGH);
        distance = (duration/2) / 29.1;
        if (distance >= 300 || distance <= 0)
         { 
          lcd.setCursor(0,1);
          lcd.print("Out of Range");
          }
          else
          {
          lcd.setCursor(0,1);
          lcd.print("Distance: ");
          lcd.print(distance);
          lcd.print(" cm   ");
          }
        delay(1000);
        lcd.clear(); 
    }
  else 
    {
        lcd.setCursor(0,0);
        lcd.print("X=");
        lcd.print(xv);
        lcd.print(" Y=");
        lcd.print(yv);
        lcd.setCursor(0,1);
        lcd.print("   Z= ");
        lcd.print(zv);
        delay(1000);
     }
}

Credits

TechnicalEngineer
4 projects • 51 followers
Contact

Comments

Please log in or sign up to comment.