#define BLYNK_TEMPLATE_ID "TMPL6rVOxTd48"
#define BLYNK_TEMPLATE_NAME "MINI PROJECT FINAL"
#define BLYNK_AUTH_TOKEN "piuEvABUW8NF4QG6nV_59cDRyZHLyEtH"
#define Blynk_PRINT Serial
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Ultrasonic.h>
#include <Adafruit_MPU6050.h>
#include <Ticker.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h> // Adjust for ESP8266/ESP32 as needed
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define TRIGGER_PIN 5 // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN 4 // Arduino pin tied to echo pin on the ultrasonic sensor.
#define SERVO_PIN 18 // GPIO pin connected to the servo signal pin
Adafruit_MPU6050 mpu;
Ticker servoTicker;
volatile int servoPos = 90; // Initial position
Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);
void setup() {
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
// Set up the ticker to control the servo
servoTicker.attach_ms(20, servoControl);
// Define Blynk virtual pins
Blynk.virtualWrite(V0, "Initial message"); // Example initial message
Blynk.virtualWrite(V1, servoPos); // Initialize servo position on Blynk app
Blynk.virtualWrite(V2, "Initial temperature"); // Example initial temperature
}
void loop() {
Blynk.run();
display.clearDisplay();
display.setCursor(0, 0);
// Simulate sensor readings for Wokwi
int cm = random(10, 100); // Simulate distance in cm
float temperature = random(200, 300) / 10.0; // Simulate temperature in °C
display.print("Distance: ");
display.print(cm);
display.println(" cm");
display.print("Gyro X: ");
display.print(random(-1000, 1000) / 100.0); // Simulate gyro X in rad/s
display.println(" rad/s");
display.print("Gyro Y: ");
display.print(random(-1000, 1000) / 100.0); // Simulate gyro Y in rad/s
display.println(" rad/s");
display.print("Gyro Z: ");
display.print(random(-1000, 1000) / 100.0); // Simulate gyro Z in rad/s
display.println(" rad/s");
display.print("Temperature: ");
display.print(temperature);
display.println(" C");
// Update Blynk app with simulated sensor data
Blynk.virtualWrite(V0, cm);
Blynk.virtualWrite(V2, temperature);
delay(2000);
display.display();
}
void servoControl() {
// Simulate accelerometer data for servo control
int accelX = random(-17000, 17000); // Simulate accelerometer X
servoPos = map(accelX, -17000, 17000, 0, 180);
servoPos = constrain(servoPos, 0, 180);
// Update virtual pin for servo position in Blynk
Blynk.virtualWrite(V1, servoPos);
}