Because HC-SR04 ultrasonic ranging modules typically need to look sideways, you can buy mounting brackets for them For just testing I wanted to directly use Arduino Uno pins instead, see photo below. So I had to define VCC0/1 and GND0/1, configure all as OUTPUT and set them to HIGH/LOW. Uno spec says that digital pins can deliver 20mA, HC-SR04 spec says it draws 2mA. So for me that sounds safe to do. Is it safe? Are there reasons for not doing so?
This is sample sketch:
#define VCC0 2
#define trigPin0 3
#define echoPin0 4
#define GND0 5
#define VCC1 A0
#define trigPin1 A1
#define echoPin1 A2
#define GND1 A3
void setup() {
Serial.begin (9600);
pinMode(VCC0, OUTPUT); digitalWrite(VCC0, HIGH);
pinMode(trigPin0, OUTPUT);
pinMode(echoPin0, INPUT);
pinMode(GND0, OUTPUT); digitalWrite(GND0, LOW);
pinMode(VCC1, OUTPUT); digitalWrite(VCC1, HIGH);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(GND1, OUTPUT); digitalWrite(GND1, LOW);
}
void loop() {
long duration, distance;
distance = distdur(trigPin0, echoPin0, duration);
out(distance, duration);
distance = distdur(trigPin1, echoPin1, duration);
out(distance, duration);
Serial.println();
}
void out(long distance, long duration) {
Serial.print(distance);
Serial.print(" cm (");
Serial.print(duration);
Serial.print(") ");
}
long distdur(int trigPin, int echoPin, long &duration) {
long distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
return (distance>400) ? 400 : distance;
}
This is the output generated:
8 cm (497) 27 cm (1610)
8 cm (503) 57 cm (3347)
8 cm (496) 25 cm (1465)
8 cm (503) 23 cm (1348)
8 cm (497) 20 cm (1216)
8 cm (503) 19 cm (1153)
8 cm (499) 58 cm (3409)
8 cm (496) 58 cm (3418)
8 cm (503) 57 cm (3371)
8 cm (497) 20 cm (1169)
8 cm (503) 19 cm (1156)
8 cm (497) 20 cm (1165)