Project 2 - Measuring the distance of an object using ultrasonic sensor and also smoothen the sensor data using moving average filter
tinker cadd link : https://www.tinkercad.com/things/gZ1qgRnPa24-mighty-amur-allis/editel?sharecode=_6X6DUnhyWUzx3hxvd7zzn-J8V6NEyeZOfs--GMX034
code:
master code:
#include <Wire.h>
#include<LiquidCrystal.h>
LiquidCrystal lcd(2,3,8,9,10,11);
void setup()
{
Wire.begin();
lcd.begin(16,2);
Serial.begin(9600);
}
void loop()
{
Wire.begin(); // serial communication
lcd.begin(16,2); // lcd display
Serial.begin(9600); // start serial for output
lcd.setCursor(0,0);
lcd.print(" Distance ");
lcd.setCursor(0,1);
lcd.print ("Distance:");
Wire.requestFrom(8,1);
while (Wire.available())
{
long c = Wire.read();
Serial.print(c);
Serial.print("\n");
lcd.print(c);
lcd.print(" in ");
}
delay(500);
}
slave code:
#define WINDOW_SIZE 1 // for moving average filter
#include <Wire.h> // series communication
int pig_pin = 7;
long distance,inches;
int INDEX = 0;
int VALUE = 0;
int SUM = 0;
int READINGS[WINDOW_SIZE];
int AVERAGED = 0;
void setup()
{
Serial.begin(9600);
Serial.println("Initialize System");
Wire.begin(8); // join i2c bus with address #8
Wire.onRequest(requestEvent);
}
void loop()
{
pinMode(pig_pin,OUTPUT); // triggring the ping
digitalWrite(pig_pin, LOW);
delay(5);
digitalWrite(pig_pin, HIGH);
delay(20);
digitalWrite(pig_pin, LOW);
pinMode(pig_pin,INPUT);
distance = pulseIn(pig_pin, HIGH); // getting data form the sensor
SUM = SUM - READINGS[INDEX] ; // moving average filter calculation
VALUE = distance;
READINGS[INDEX] = VALUE;
SUM = SUM + VALUE;
INDEX = (INDEX+1) % WINDOW_SIZE;
AVERAGED = SUM / WINDOW_SIZE;
inches = AVERAGED /148 ; // converting the sensor data to inches
Serial.println("value is :");
Serial.println(inches);
delay(1000);
}
void requestEvent() {
Wire.write(inches);
}