Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO Bluetooth-Controlled Solar Panel Cleaning Robot

View and Edit Project In Cirkit DesignerImage of Arduino UNO Bluetooth-Controlled Solar Panel Cleaning Robot

Solar Panel Cleaning Robot Circuit Documentation

Summary

This document provides a detailed overview of the Solar Panel Cleaning Robot circuit. The robot is controlled by an Arduino UNO and includes two motors for movement, a water pump for cleaning, and a Bluetooth module for remote control. The robot can move forward, backward, turn left, turn right, and stop based on commands received via Bluetooth.

Component List

  1. Arduino UNO

    • Description: Microcontroller board based on the ATmega328P.
    • Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0, A1, A2, A3, A4, A5, SCL, SDA, AREF, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0
  2. 9V Battery

    • Description: Power source for the circuit.
    • Pins: -, +
  3. Power Jack

    • Description: Connector for the 9V battery.
    • Pins: POSITIF, NEGATIF
  4. Motor with Reducer (x2)

    • Description: Motor with a gear reducer for movement.
    • Pins: 3 - 6 VCC, GND
  5. L298N DC Motor Driver (x2)

    • Description: Dual H-Bridge motor driver for controlling the motors.
    • Pins: OUT1, OUT2, 12V, GND, 5V, OUT3, OUT4, 5V-ENA-JMP-I, 5V-ENA-JMP-O, +5V-J1, +5V-J2, ENA, IN1, IN2, IN3, IN4, ENB
  6. HC-05 Bluetooth Module

    • Description: Bluetooth module for remote control.
    • Pins: Key, VCC, TXD, RXD, State, GND
  7. Water Pump

    • Description: Pump for cleaning the solar panel.
    • Pins: VCC, GND
  8. 1 Channel Relay 5V

    • Description: Relay module for controlling the water pump.
    • Pins: VCC, GND, IN, NC, COM, NO
  9. 3.7V Battery

    • Description: Power source for the water pump.
    • Pins: +, -

Wiring Details

Arduino UNO

9V Battery

Power Jack

Motor with Reducer (1)

Motor with Reducer (2)

L298N DC Motor Driver

HC-05 Bluetooth Module

Water Pump

1 Channel Relay 5V

3.7V Battery

Documented Code

/*
 * Arduino Sketch for Solar Panel Cleaning Robot
 * This code controls a solar panel cleaning robot using an Arduino UNO. The robot
 * is equipped with two motors for movement, a water pump for cleaning, and a
 * Bluetooth module for remote control. The robot can move forward, backward,
 * turn left, turn right, and stop based on commands received via Bluetooth.
 */

#include <SoftwareSerial.h>

// Bluetooth module connected to pins 2 (RX) and 3 (TX)
SoftwareSerial mySerial(2, 3);

// Motor driver pins
int Rightmotor1 = 4;
int Rightmotor2 = 5;
int leftmotor1 = 6;
int leftmotor2 = 7;
int en1 = 9;
int en2 = 10;

// Relay pin for water pump
int relayPin = 11;

// String to hold incoming Bluetooth data
String command = "";

void setup() {
  // Initialize motor pins
  pinMode(Rightmotor1, OUTPUT);
  pinMode(Rightmotor2, OUTPUT);
  pinMode(leftmotor1, OUTPUT);
  pinMode(leftmotor2, OUTPUT);
  pinMode(en1, OUTPUT);
  pinMode(en2, OUTPUT);
  pinMode(relayPin, OUTPUT);

  // Start serial communication for debugging and Bluetooth
  Serial.begin(9600);
  mySerial.begin(9600);

  Serial.println("Bluetooth Car Ready!");
}

void loop() {
  if (mySerial.available()) {
    char received = mySerial.read(); // Read the single character command
    if (received == 'F') {
      moveForward(); // Move forward
    } else if (received == 'B') {
      moveBackward(); // Move backward
    } else if (received == 'L') {
      turnLeft(); // Turn left
    } else if (received == 'R') {
      turnRight(); // Turn right
    } else if (received == 'S') {
      stopMotors(); // Stop
    } else if (received == 'P') {
      startPump(); // Start water pump
    } else if (received == 'O') {
      stopPump(); // Stop water pump
    }
  }
}

// Movement functions
void moveForward() {
  digitalWrite(Rightmotor1, HIGH);
  digitalWrite(Rightmotor2, LOW);
  digitalWrite(leftmotor1, HIGH);
  digitalWrite(leftmotor2, LOW);
  analogWrite(en1, 200);  // Adjust speed as needed (0-255)
  analogWrite(en2, 200);
  Serial.println("Moving Forward");
}

void moveBackward() {
  digitalWrite(Rightmotor1, LOW);
  digitalWrite(Rightmotor2, HIGH);
  digitalWrite(leftmotor1, LOW);
  digitalWrite(leftmotor2, HIGH);
  analogWrite(en1, 200);
  analogWrite(en2, 200);
  Serial.println("Moving Backward");
}

void turnLeft() {
  digitalWrite(Rightmotor1, HIGH);
  digitalWrite(Rightmotor2, LOW);
  digitalWrite(leftmotor1, LOW);
  digitalWrite(leftmotor2, HIGH);
  analogWrite