0% found this document useful (0 votes)
3 views

Text 4

Uploaded by

gyanjoshnews94
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Text 4

Uploaded by

gyanjoshnews94
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

#include <ESP8266WiFi.

h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
#include <SimpleTimer.h>
#include <ThingSpeak.h>
#include <TinyGPS++.h>
#include <SoftwareSerial.h>

// WiFi credentials
char ssid[] = "YourNetworkSSID";
char pass[] = "YourNetworkPassword";

// Blynk credentials
char auth1[] = "YourAuthToken1";
char auth2[] = "YourAuthToken2";
char blynkTemplateId1[] = "YourBlynkTemplateID1";
char blynkTemplateId2[] = "YourBlynkTemplateID2";

// ThingSpeak credentials
char writeAPIKey[] = "YourThingSpeakWriteAPIKey";
char thingSpeakChannelName[] = "YourThingSpeakChannelName";

// Pin definitions
#define MOTOR_PIN_FORWARD D1
#define MOTOR_PIN_BACKWARD D2
#define MOTOR_PIN_LEFT D3
#define MOTOR_PIN_RIGHT D4
#define BUZZER_PIN D5
#define LED_PIN D6
#define ULTRASOUND_TRIG_PIN D7
#define ULTRASOUND_ECHO_PIN D8
#define BATTERY_PIN A0
#define PAN_SERVO_PIN D9
#define TILT_SERVO_PIN D10

Servo panServo;
Servo tiltServo;
TinyGPSPlus gps;
SoftwareSerial ss(4, 5); // RX, TX for GPS module
SimpleTimer timer;

long previousMillis = 0;
float speedKmH = 0;
float previousLatitude = 0;
float previousLongitude = 0;

void setup() {
Serial.begin(115200);
ss.begin(9600);
Blynk.begin(auth1, ssid, pass);
Blynk.begin(auth2, ssid, pass);
ThingSpeak.begin(client);

pinMode(MOTOR_PIN_FORWARD, OUTPUT);
pinMode(MOTOR_PIN_BACKWARD, OUTPUT);
pinMode(MOTOR_PIN_LEFT, OUTPUT);
pinMode(MOTOR_PIN_RIGHT, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(ULTRASOUND_TRIG_PIN, OUTPUT);
pinMode(ULTRASOUND_ECHO_PIN, INPUT);

panServo.attach(PAN_SERVO_PIN);
tiltServo.attach(TILT_SERVO_PIN);

timer.setInterval(10000L, updateSensorData); // Update sensor data every 10


seconds
timer.setInterval(1000L, calculateSpeed); // Calculate speed every second
}

void loop() {
Blynk.run();
timer.run();
while (ss.available() > 0) {
gps.encode(ss.read());
}
}

void updateSensorData() {
// Read sensor data
float distance = readUltrasoundSensor();
float batteryPercentage = readBatteryPercentage();
float latitude = gps.location.lat();
float longitude = gps.location.lng();

// Update Blynk virtual pins


Blynk.virtualWrite(V0, speedKmH); // Speed in km/h
Blynk.virtualWrite(V1, distance); // Update ultrasound sensor data
Blynk.virtualWrite(V2, batteryPercentage); // Update battery percentage
Blynk.virtualWrite(V3, latitude); // Update GPS latitude
Blynk.virtualWrite(V4, longitude); // Update GPS longitude

// Update ThingSpeak channel with GPS data


ThingSpeak.setField(1, latitude);
ThingSpeak.setField(2, longitude);
ThingSpeak.writeFields(writeAPIKey);
}

float readUltrasoundSensor() {
digitalWrite(ULTRASOUND_TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(ULTRASOUND_TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(ULTRASOUND_TRIG_PIN, LOW);
long duration = pulseIn(ULTRASOUND_ECHO_PIN, HIGH);
float distance = (duration * 0.0343) / 2;
return distance;
}

float readBatteryPercentage() {
int sensorValue = analogRead(BATTERY_PIN);
float voltage = sensorValue * (3.3 / 1023.0);
float batteryPercentage = (voltage / 4.2) * 100; // Assuming 4.2V max for LiPo
battery
return batteryPercentage;
}

void calculateSpeed() {
if (gps.location.isUpdated()) {
float currentLatitude = gps.location.lat();
float currentLongitude = gps.location.lng();
float distance = TinyGPSPlus::distanceBetween(previousLatitude,
previousLongitude, currentLatitude, currentLongitude);
speedKmH = (distance / 1000.0) * 3600.0; // Convert m/s to km/h
previousLatitude = currentLatitude;
previousLongitude = currentLongitude;
}
}

// Motor control functions


BLYNK_WRITE(V5) { // Forward motor speed control
int speed = param.asInt();
analogWrite(MOTOR_PIN_FORWARD, speed);
digitalWrite(MOTOR_PIN_BACKWARD, LOW);
}

BLYNK_WRITE(V6) { // Backward motor speed control


int speed = param.asInt();
analogWrite(MOTOR_PIN_BACKWARD, speed);
digitalWrite(MOTOR_PIN_FORWARD, LOW);
}

BLYNK_WRITE(V7) { // Left motor control


int state = param.asInt();
digitalWrite(MOTOR_PIN_LEFT, state);
}

BLYNK_WRITE(V8) { // Right motor control


int state = param.asInt();
digitalWrite(MOTOR_PIN_RIGHT, state);
}

// Buzzer and LED control functions


BLYNK_WRITE(V9) { // Buzzer control
int state = param.asInt();
digitalWrite(BUZZER_PIN, state);
}

BLYNK_WRITE(V10) { // LED control


int state = param.asInt();
digitalWrite(LED_PIN, state);
}

// Pan and tilt control functions


BLYNK_WRITE(V11) { // Pan control
int panAngle = param.asInt();
panServo.write(panAngle);
}

BLYNK_WRITE(V12) { // Tilt control


int tiltAngle = param.asInt();
tiltServo.write(tiltAngle);
}

You might also like