Робот для полива растений - Своими руками
Своими руками

Робот для полива растений

В этой статье мы вместе с мастером-самодельщиком рассмотрим изготовление робота для полива растений.
Мозгом робота является Ардуино и работает он следующим образом
Первоначально он двигается вперед по прямой линии. Когда он обнаружит цветочный горшок с помощью ультразвукового датчика, он останавливается.

После этого рука робота начнет двигаться вниз, пока не упирается в почву почву в цветочном горшке.
В этот момент датчик влажности начинает работать и передает данные о влажности почвы на Arduino.
Если в почве недостаточно влаги – он начинает поливать почву водой до тех пор, пока уровень влажности не достигнет оптимального уровня.
Если в почве достаточно влаги – робот проигнорирует этот цветочный горшок и начнет проверять другой горшок.
В конце статьи можно будет посмотреть демонстрационный ролик с работой такого устройства.
Инструменты и материалы:
-Arduino UNO;
-Мотор-редуктор 2-100 об / мин;
-Колеса;
-Винты;
-Зажимы;
-Деталь из акрила (длинный и узкий прямоугольник);
-Держатель батареи;
-Драйвер мотора L293D;-Серводвигатели SG90;-Насос;
-Ультразвуковые датчики;
-Зарядный модуль TP4056;
-Датчик влажности;
-Перемычки;
-Li-on батарея;
-Деревянный ящик;
-Пластиковый контейнер;
Робот для полива растенийРобот для полива растенийРобот для полива растенийРобот для полива растенийРобот для полива растенийШаг первый: установка колес
К небольшому деревянному ящику мастер прикручивает четыре кронштейна. К кронштейнам прикручивает моторедукторы и устанавливает на их оси колеса.
Робот для полива растенийРобот для полива растенийРобот для полива растенийРобот для полива растенийРобот для полива растенийРобот для полива растенийШаг второй: ультразвуковые датчики
Закрепляет на корпусе ультразвуковой датчик.
Робот для полива растенийРобот для полива растенийЗакрепляет батарейный отсек.
Робот для полива растенийШаг третий: рычаг
Теперь нужно сделать рычаг или руку. Ее мастер сделал из узкой пластинки из акрила. На конце пластинки крепиться датчик влажности и ультразвуковой датчик. Второй конец пластинки крепится на концах двух серводвигателей.
Робот для полива растенийСервоприводы крепятся к верхней части корпуса.
Робот для полива растенийРобот для полива растенийНа выход насоса устанавливает трубку. Второй конец трубки закрепляет на конце рычага.
Робот для полива растенийРобот для полива растенийРобот для полива растенийШаг четвертый: электромонтаж
Теперь нужно смонтировать электрическую часть. Схема подключения ниже.
Робот для полива растенийК контактам моторедукторов припаивает провода.
Робот для полива растенийРобот для полива растенийПлату L293D размещает между батарейными отсеками.
Робот для полива растенийВ верхней части корпуса сверлит отверстие для проводов серводвигателя, датчика влажности и ультразвукового датчика. Подключает провода к плате.
Робот для полива растенийУстанавливает модуль зарядки и переключатель.
Робот для полива растенийРобот для полива растенийРобот для полива растенийРобот для полива растенийШаг пятый: код
После сборки устройства нужно загрузить код. Скачать его нужно ниже.
Робот для полива растений Показать / Скрыть текст// ********CODE BY KHURAFATI BABA (SARTHAK MISHRA)**********

// ********CODE BY KHURAFATI BABA (SARTHAK MISHRA)**********

#include //For adding the library of shield #include //For adding the library of servo motor Servo m1; //Variable of servo motor 1 Servo m2; //variable of servo motor 2 int pos; //Variable that will define the postion of servos const int trigPin = A0; //Defines the trig pin of ultrasonic sensor 1st const int echoPin = A1; //Defines the echo pin of ultrasonic sensor 1st const int trigPin1=A2; //Defines the trig pin of ultrasonic sensor 2nd const int echoPin1=A3; //Defines the echo pin of ultrasonic sensor 2nd int mpin = A4; //Defines the pin of moisture sensor pin int mout; //Variable to store the value given by moisture sensor long duration, duration1; //Variable that stores the duration value given by ultrasonic sensor int distance, distance1; //Variable that stores the distance value calculated by the formaula

AF_DCMotor motor1(1, MOTOR12_1KHZ); //Defines the frequency which will be given to motor 1 AF_DCMotor motor2(2, MOTOR12_1KHZ); //Defines the frequency which will be given to motor 2 AF_DCMotor motor4(4, MOTOR12_1KHZ);

void setup() { Serial.begin(9600); //starts serial communication with the arduino and PC pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(trigPin1, OUTPUT); pinMode(echoPin1, INPUT); m1.attach(10); //Define the attached pin for servo motor 1 m2.attach(9); //Define the attached pin for servo motor 1

m1.write(0); m2.write(120); motor1.setSpeed(255); //To set the particular speed of motor 1 motor2.setSpeed(255); //To set the particular speed of motor 2 }

void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance= duration*0.034/2; digitalWrite(trigPin1, LOW); delayMicroseconds(2); digitalWrite(trigPin1, HIGH); delayMicroseconds(10); digitalWrite(trigPin1, LOW); duration1 = pulseIn(echoPin1, HIGH); distance1= duration1*0.034/2;

if (distance>=15) { Forward(); delay(100); }

else if(distance<15)

{ Stop(); delay(70); digitalWrite(trigPin1, LOW); delayMicroseconds(2); digitalWrite(trigPin1, HIGH); delayMicroseconds(10); digitalWrite(trigPin1, LOW); duration1 = pulseIn(echoPin1, HIGH); distance1= duration1*0.034/2;

if(distance1>=6) { servoF(); delay(100); } } mout=analogRead(mpin); if(distance1<6 && mout<=500) { servoB(); delay(100);

Forward(); delay(1000); }

if(distance1<6 && mout>500) { while(mout>500) { motor4.run(FORWARD);

mout=analogRead(mpin);

if(mout<=500) { motor4.run(RELEASE); delay(100); break; } } } } void Stop()

{

motor1.run(RELEASE); motor2.run(RELEASE); }

void Forward()

{

motor1.run(FORWARD); motor2.run(FORWARD); } void servoF() { Serial.println("servo forward is fine"); delay(100); for (pos=0;pos<=120;pos+=1)

{ digitalWrite(trigPin1, LOW); delayMicroseconds(2); digitalWrite(trigPin1, HIGH); delayMicroseconds(10); digitalWrite(trigPin1, LOW); duration1 = pulseIn(echoPin1, HIGH); distance1= duration1*0.034/2;

if(distance1>6) { m1.write(pos); m2.write(120-pos); }

}

}

void servoB() { Serial.println("Servo back is fine"); delay(100); for(pos=120;pos>=0;pos-=1) { { m1.write(pos); m2.write(120-pos); } delay(30); } }
Корпус робота-поливальщика можно покрасить в любой цвет. И конечно, нужно установить емкость с водой и поместить туда насос.
Робот для полива растенийРобот для полива растенийРобот для полива растенийРобот для полива растенийВсе готово, а на видео можно посмотреть процесс сборки и демонстрацию его работы.

SitesReady

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного. - Альберт Эйнштейн

Follow us

Don't be shy, get in touch. We love meeting interesting people and making new friends.