Hi - newbie here. I have set up my SainSmart HC-SR04 from Amazon using the NewPing library and the simple example sketch that came with it (thanks Tim Eckel!). I am having trouble with the output, though. At distances greater than 6cm or 7cm the serial monitor shows a steady 6cm. If I move an object 6cm or closer it will read the distance accurately. As I point the sensor at different spots around my workspace (e.g., the wall and ceiling, the output occasionally (once or twice a minute maybe?) will spike to what seems to be a correct distance, but only for one or two echos.
Anyone have a suggestion as to what might be wrong and how I can get it running right? Thanks!
What is the supply voltage to the HCSR04? Post your code, please.
Thanks for the quick response!
VCC is connected to the 5v on the Uno. The Uno is powered via USB - only the HC-SR04 is hooked up.
Code is as follows (from http://playground.arduino.cc/Code/NewPing):
// ---------------------------------------------------------------------------
// Example NewPing library sketch that does a ping about 20 times per second.
// ---------------------------------------------------------------------------
#include <NewPing.h>
#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
void setup() {
Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
}
void loop() {
delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
Serial.print("Ping: ");
Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range)
Serial.println("cm");
}