James Carton
Published

Ardi-32 with Digital Distance Meter

"Imagine having the power of a 32-bit microcontroller at your fingertips, combined with the accuracy of a digital distance meter.

IntermediateFull instructions provided2 hours114
Ardi-32 with Digital Distance Meter

Things used in this project

Hardware components

ArdiPi - Uno R3 Alternative Board Based on Pico W
SB Components ArdiPi - Uno R3 Alternative Board Based on Pico W
×1
SB Components 0.91” OLED Breakout
×1
Ultrasonic Sensor - HC-SR04 (3.3V Compatible)
×1
Breadboard
×1
Jumper Wires
×1
USB A to USB type-C
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

Digital Distance Meter Code

Arduino
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
const int trigPin = 14;
const int echoPin = 47;
int measuredDist;
unsigned long duration,distance;

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  // put your setup code here, to run once:
  pinMode(trigPin,OUTPUT);
  pinMode(echoPin,INPUT);
  Serial.begin(9600);
  
  // To change default I2C pin, Ardi-32 ESP OLED connected on IO38/SDA, IO39/SCL
  Wire.begin(38, 39); // Wire.begin(SDA, SCL)

  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
}
int Dist()
{
  digitalWrite(trigPin,LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin,HIGH);
  delayMicroseconds(5);
  digitalWrite(trigPin,LOW);
  duration = pulseIn(echoPin,HIGH);
  //distance = (340*100*(duration/2))/1000000;
  distance = duration*0.017;
  return distance;
}

void loop(){
  //main code to run repeatedly:
  measuredDist = Dist();
  String distStr = String(measuredDist); 
  distStr = "Distance: " + distStr + "cm";
  Serial.println(measuredDist);
  display.clearDisplay();
  display.setTextSize(1); // Draw 2X-scale text
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);
  display.println(distStr);
  display.display();      // Show initial text
  delay(1000);
}

Credits

James Carton
6 projects • 3 followers
Making time for the fun projects at home
Contact

Comments

Please log in or sign up to comment.