/* This is a online simulation based prototype of an Autonomous - Obstacle Avoidance Robot with Telematics data
with app based monitoring of Humidity and Temperature */
#define BLYNK_TEMPLATE_ID "TMPL3q3ZizQM3"
#define BLYNK_TEMPLATE_NAME "Harshal"
#define BLYNK_AUTH_TOKEN "fwur0EqeiQalplB2sqlaWxAKO-cNlUrH"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#define BLYNK_PRINT Serial
char auth[] = "fwur0EqeiQalplB2sqlaWxAKO-cNlUrH";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#include <DHT.h>
int dirPin[] = {5, 12, 18, 33};
int stepPin[] = {4, 13, 19, 32};
#define pin_trig1 22
#define pin_echo1 23
#define pin_echo2 27
#define pin_trig2 26
#define DHTPIN 21
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
int distance1; // Front distance
int duration1;
int distance2; // Back distance
int duration2;
int stepPerRevolution = 200;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
// DHT22
Serial.println(F("DHTxx test!"));
dht.begin();
// Ultrasonic sensor
pinMode(pin_trig1, OUTPUT);
pinMode(pin_echo1, INPUT);
pinMode(pin_echo2, INPUT);
pinMode(pin_trig2, OUTPUT);
for (int i = 0; i < 4; i++)
{
pinMode(stepPin[i], OUTPUT);
pinMode(dirPin[i], OUTPUT);
}
Blynk.begin(auth, ssid, pass);
}
void loop()
{
Blynk.run();
// Front ultrasonic sensor
digitalWrite(pin_trig1, LOW);
delayMicroseconds(2);
digitalWrite(pin_trig1, HIGH);
delayMicroseconds(10);
digitalWrite(pin_trig1, LOW);
duration1 = pulseIn(pin_echo1, HIGH);
distance1 = duration1 *0.034/2;
Serial.print("FRONT-DISTANCE = ");
Serial.print(distance1);
delay(10); // this speeds up the simulation
// Second ultrasonic sensor
digitalWrite(pin_trig2, LOW);
delayMicroseconds(2);
digitalWrite(pin_trig2, HIGH);
delayMicroseconds(10);
digitalWrite(pin_trig2, LOW);
duration2 = pulseIn(pin_echo2, HIGH);
distance2 = duration2 *0.034/2;
Serial.print(" BACK-DISTANCE = ");
Serial.println(distance2);
delay(100);
// DHT22 temperature and humidity reading
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
Serial.print(F("Humidity: "));
Serial.print(humidity);
Serial.print(F("% Temperature: "));
Serial.print(temperature);
Serial.println(F("°C "));
delay(2000);
// if in front the distance of ultrasonic sensor and obstacle is less than 20cm
if (distance1 <= 5 )
{
for (int i = 1; i < 4; i += 2) // upside motors
{
digitalWrite(dirPin[i], LOW);
}
for (int i = 1; i < 4; i += 2)
{
digitalWrite(stepPin[i], HIGH);
}
delayMicroseconds(1000);
for (int i = 1; i < 4; i += 2)
{
digitalWrite(stepPin[i], LOW);
}
delayMicroseconds(1000);
for (int i = 0; i < 4; i += 2) // downside motors
{
digitalWrite(dirPin[i], HIGH);
}
for (int i = 0; i < 4; i += 2 )
{
digitalWrite(stepPin[i], HIGH);
}
delayMicroseconds(1000);
for (int i = 0; i < 4; i += 2 )
{
digitalWrite(stepPin[i], LOW);
}
delayMicroseconds(1000);
/*if (distance1 <= 20)
{
for (int i = 1; i < 4; i += 2)
{
digitalWrite(stepPin[i], LOW);
}
for (int i = 0; i < 4; i += 2) // downside motors
{
digitalWrite(stepPin[i], LOW);
}
}*/
}
// if the front distance between ultrasonic sensor and obstacle is greater than 20 cm
else {
for (int i = 1; i < 4; i += 2) // upwardside motors
{
digitalWrite(dirPin[i], HIGH);
}
for (int i = 1; i < 4; i += 2)
{
digitalWrite(stepPin[i], HIGH);
}
delayMicroseconds(1000);
for (int i = 1; i < 4; i += 2)
{
digitalWrite(stepPin[i], LOW);
}
delayMicroseconds(1000);
for (int i = 0; i < 4; i += 2 ) // downside motors
{
digitalWrite(dirPin[i], LOW);
}
for (int i = 0; i < 4; i += 2 )
{
digitalWrite(stepPin[i], HIGH);
}
delayMicroseconds(1000);
for (int i = 0; i < 4; i += 2 )
{
digitalWrite(stepPin[i], LOW);
}
delayMicroseconds(1000);
}
int t = dht.readTemperature();
Blynk.virtualWrite(V0, t); // Send data to Virtual Pin V0
delay(1000);
int h = dht.readHumidity(); // Read from GPIO
Blynk.virtualWrite(V1, h); // Send data to Virtual Pin V1
delay(1000); // Update every second
}