Untitled
unknown
plain_text
a year ago
3.8 kB
4
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