Untitled

 avatar
unknown
plain_text
5 months ago
3.8 kB
2
Indexable
#include <Servo.h>

int Motor1 = 255; // Speed for Motor A
int Motor2 = 255; // Speed for Motor B
int moistureSensorPin = A0; // Pin for the soil moisture sensor
int solarSensorPin = A1;    // Pin for the solar sensor
int triggerPin = 4;         // Pin for ultrasonic trigger
int echoPin = 5;            // Pin for ultrasonic echo
int moistureThreshold = 450; // Set an appropriate threshold
int moisture_data = 0; // Variable to hold moisture readings
int solar_data = 0; // Variable to hold solar readings
int sensorDistance = 0; // Variable to hold distance readings

Servo servo_2;

long readUltrasonicDistance() {
    pinMode(triggerPin, OUTPUT);  // Clear the trigger
    digitalWrite(triggerPin, LOW);
    delayMicroseconds(2);
    digitalWrite(triggerPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(triggerPin, LOW);
    pinMode(echoPin, INPUT);
    return pulseIn(echoPin, HIGH);
}

void setup() {
    Serial.begin(9600); // Initialize serial communication at 9600 bps
    servo_2.attach(2, 500, 2500); // Attach servo to pin 2
    pinMode(3, OUTPUT);  // Motor B
    pinMode(6, OUTPUT);  // Direction for Motor B
    pinMode(7, OUTPUT);  // Direction for Motor B (reverse)
    pinMode(11, OUTPUT); // Motor A
    pinMode(10, OUTPUT); // Direction for Motor A (reverse)
    pinMode(8, OUTPUT);  // Direction for Motor A
}

void loop() {
    // Read ultrasonic sensor
    sensorDistance = 0.01723 * readUltrasonicDistance();
    Serial.print("Distance: ");
    Serial.println(sensorDistance);

    // Stop motors if an object is detected within 80 cm
    if (sensorDistance <= 80) {
        Serial.println("Object detected. Stopping motors.");
        digitalWrite(6, LOW); // Stop Motor B
        digitalWrite(7, LOW); // Stop Motor B
        analogWrite(3, 0); // Turn off Motor B
        digitalWrite(8, LOW); // Stop Motor A
        digitalWrite(10, LOW); // Stop Motor A
        analogWrite(11, 0); // Turn off Motor A
        servo_2.write(90); // Optionally, you can move the servo to 90 degrees
        delay(1000); // Wait for 1 second
        return; // Exit loop to avoid running motors
    } else {
        servo_2.write(0); // Set servo to 0 degrees if no object detected
    }

    // Read Soil Moisture
    moisture_data = analogRead(moistureSensorPin);
    Serial.print("Moisture Level: ");
    Serial.println(moisture_data); // Print the moisture level for debugging

    // Check moisture level and print status
    if (moisture_data < moistureThreshold) {
        Serial.println("Soil is dry. Consider watering.");
    } else {
        Serial.println("Soil moisture is adequate.");
    }

    // Read Solar Level
    solar_data = analogRead(solarSensorPin);
    Serial.print("Solar Level: ");
    Serial.println(solar_data); // Print the solar level for debugging

    // Check solar level and print status
    if (solar_data < 300) {
        Serial.println("Battery low. Returning to charging dock");
    } else {
        Serial.println("Battery adequate");
    }

    // Activate Motors
    digitalWrite(6, HIGH); // Motor B forward
    digitalWrite(7, LOW);  // Motor B reverse off
    analogWrite(3, Motor2); // Set speed for Motor B

    digitalWrite(8, HIGH); // Motor A forward
    digitalWrite(10, LOW); // Motor A reverse off
    analogWrite(11, Motor1); // Set speed for Motor A

    delay(2000); // Run motors for 2 seconds

    // Stop Motors
    digitalWrite(6, LOW); // Stop Motor B
    digitalWrite(7, LOW); // Stop Motor B
    analogWrite(3, 0); // Turn off Motor B

    digitalWrite(8, LOW); // Stop Motor A
    digitalWrite(10, LOW); // Stop Motor A
    analogWrite(11, 0); // Turn off Motor A

    delay(1000); // Wait a second before the next cycle
}
Editor is loading...
Leave a Comment