currently creating a device that measures velocity through the ultrasonic sensor then outputs to a LED light depending on the range of velocity.
it was working before but the sensor suddenly didn't output correct values. it was either 0 or 1k cm
(Grove base shield, Grove LED RGB stick, ultrasonic sensor)
#include "Adafruit_NeoPixel.h"
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN_LED 7
#define NUMPIXELS 10
const int trigPin = 2;
const int echoPin = 3;
long duration;
int distance1=0;
int distance2=0;
double speed=0;
double velocity=0;
int distance=0;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN_LED, NEO_GRB + NEO_KHZ800);
int delayval = 500;
void setup()
{
pixels.setBrightness(25);
pixels.begin();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop(){
pixels.clear();
distance1 = ultrasonicRead(); //calls ultrasoninicRead() function below
delay(2000);//giving a time gap of 2 sec
distance2 = ultrasonicRead(); //calls ultrasoninicRead() function below
//formula change in distance divided by change in time
velocity = (distance2 - distance1)/2.0;
speed = abs(velocity);
//Displaying speed
Serial.print("Velocity in cm/s : ");
Serial.println(speed);
Serial.println("_______");
if (speed >0 && speed <4){
pixels.setPixelColor(0, pixels.Color(0,255,0));
pixels.show();
delay(50);
}
else if (speed >= 4 && speed < 8 ){
for(int i=0;i<2;i++){
pixels.setPixelColor(i, pixels.Color(0,255,0));
pixels.show();
delay(50);
}
}
else if (speed >= 8 && speed < 16){
for(int i=0;i<3;i++){
pixels.setPixelColor(i, pixels.Color(100,150,0));
pixels.show();
delay(50);
}
}
else if (speed >= 16 && speed < 20){
for(int i=0;i<4;i++){
pixels.setPixelColor(i, pixels.Color(100,150,0));
pixels.show();
delay(50);
}
}
else if (speed >= 20 && speed < 24){
for(int i=0;i<5;i++){
pixels.setPixelColor(i, pixels.Color(255, 165, 0));
pixels.show();
delay(50);
}
}
else if (speed >= 24 && speed < 28){
for(int i=0;i<6;i++){
pixels.setPixelColor(i, pixels.Color(255, 165, 0));
pixels.show();
delay(50);
}
}
else if (speed >= 28 && speed < 32){
for(int i=0;i<7;i++){
pixels.setPixelColor(i, pixels.Color(255,80,0));
pixels.show();
delay(50);
}
}
else if (speed >= 32 && speed < 36){
for(int i=0;i<8;i++){
pixels.setPixelColor(i, pixels.Color(255,80,0));
pixels.show();
delay(50);
}
}
else if (speed >= 36 && speed < 40){
for(int i=0;i<9;i++){
pixels.setPixelColor(i, pixels.Color(255,0,0));
pixels.show();
delay(50);
}
}
else if (speed >= 40){
for(int i=0;i<NUMPIXELS;i++){
pixels.setPixelColor(i, pixels.Color(255,0,0));
pixels.show();
delay(50);
}
}
}
float ultrasonicRead (){
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
//calculating distance
distance= duration*0.034/2;
// Prints the distance on the Serial Monitor
Serial.print("Distance in cm : ");
Serial.println(distance);
return distance;
}
im suspecting the problem lies with the sensor itself
