HC-SR04 and 1602

Simple ultrasonic sensor module HC-SR04 and 1602 LCD display were combined into useable digital yardstick.

Two versions of the sensor module from different suppliers worked similar way. The right one sometimes (name printed in the middle) had sometimes tendency to keep once entered “out of range” state forever. Simple transistor to switch on/off VCC did the trick – if the “out of range” state was longer than 1 second the module was switched off and switched on back.

HC-SR04_2types

The sensor is ooperated by standard Arduino commands, and  the display is controlled by the object from LiquidCrystal_I2C library https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/LiquidCrystal_V1.2.1.zip

1602_HC-SR04

The code:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

int Trig = 2;   // Numer pinu wyzwolenia
int Echo = 3;   // Numer pinu odpowiedzi
 
long EchoTime;  // Czas trwania sygnału ECHO 
long OldEcho;   // Poprzedni wynik pomiaru
int  Distance;  // Odległość w centymetrach
int  MaximumRange = 300; // Maksymalna odległość (teoretycznie 400)
int  MinimumRange = 2;   // Minimalna odległość 
 
void setup() {
  OldEcho = 0; 
  lcd.init();
  lcd.backlight();
  pinMode(Trig, OUTPUT);
  pinMode(Echo, INPUT);
}

void loop() {
  delay(100);
  digitalWrite(Trig, LOW); // co najmniej dwie us stanu LOW powinny poprzedzać start pomiaru
  delayMicroseconds(2);
  digitalWrite(Trig, HIGH); // a teraz 10us wysokiego
  delayMicroseconds(10);
  digitalWrite(Trig, LOW); // i znowu niski - rozpoczyna się pomiar
  EchoTime = pulseIn(Echo, HIGH); // czas trwania stanu wysokiego na Echo
  Distance = EchoTime / 58; // przeliczona na cm
  if (Distance >= MaximumRange || Distance <= MinimumRange)  {
    lcd.setCursor(0,0); 
    lcd.print("Poza zakresem !");  
    lcd.setCursor(0,1);
    lcd.print("------:");
    lcd.print(EchoTime,DEC);
    OldEcho = 0;
  } else {
    if (EchoTime > OldEcho + 25 || EchoTime < OldEcho - 25) {
      if (OldEcho == 0) lcd.clear(); // tylko gdy poprzedni niedobry, żeby nie migać
      OldEcho = EchoTime;
      lcd.setCursor(0,0);
      lcd.print("Odleglosc:   ");
      lcd.setCursor(0,1);
      lcd.print(Distance, DEC);
      lcd.print(" cm    ");
    } 
  }
}

One thought on “HC-SR04 and 1602”

Leave a Reply