Дрон для высаживания семян

CopterHack-2021, команда MINIONS.

Вы когда-нибудь задумывались, как будет выглядеть мир без деревьев? Закройте глаза и попробуйте представить себе безлюдную Землю. Деревья являются решающим фактором нашего существования не только потому, что они производят бумагу, пиломатериалы и жевательную резинку, но и потому, что они играют важную роль в углеродном цикле.

Со времени промышленной революции 1760–1840 годов мир пребывает в нескончаемом углеродном хаосе. Деревья и планктон - наши единственные спасители с точки зрения решения этой проблемы, и мы можем контролировать только одно из них - деревья.

Нам нужно спасать деревья, защищая их от разрушительной деятельности человека, такой как вырубка лесов, вырубка лесов в целях урбанизации и т. д. Деревья - легкие для земли. Это важная часть природной экосистемы. Они уравновешивают состав почвы, а также служат барьером для ветра и шторма. Таким образом, они обеспечивают различное использование экосистемы. По этим причинам крайне важно спасать деревья.

Поскольку существует множество опасных и труднодоступных участков для посадки людей, наиболее жизнеспособной альтернативой является использование дронов для посадки в этих регионах.

Как следует из названия, дроны, стреляющие семенами, будут стрелять семенами в плодородную почву, чтобы позволить миллионам деревьев вырасти снова после вырубки для промышленного использования. Если скорость посадки превышает скорость вырубки, в конечном итоге мы восстановим деревья, которые когда-то срубили.

Наша цель

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

Видео с YouTube:

Нам удалось выполнить небольшие посевные миссии, но мы столкнулись с некоторыми проблемами, связанными с автономным полетом с GPS.

Мы покрыли нашу батарею, чтобы защитить ее от холода, посевные работы нужно начинать зимой, так как семена яблони должны оставаться в холодном месте в течение некоторого времени, чтобы акклиматизироваться.

Файлы

Ссылка на все файлы, используемые в этом проекте: https://github.com/Sahinysf/TreeSeedQuadopen in new window.

Капсулы с семенами

Техника Фукуока

На юге Японии японский фермер и философ Масанобу Фукуока изобрел технику посадки семенных шариков. Этот метод считается естественной техникой земледелия, не требующей машин, химикатов и очень небольшого количества прополки. При использовании семенных шариков земля обрабатывается без какой-либо подготовки почвы.

Преимущества семенных шариков

  • Делать шарики с семенами проще и проще без использования машин.
  • Легче для лесовосстановления и посадки на труднопроходимой местности
  • Способствовать защите почвы, окружающей среды и средств к существованию
  • Это органический метод, без использования каких-либо химикатов.
  • Это недорогой метод по сравнению с традиционными методами облесения / лесовозобновления.
  • Требует низких эксплуатационных расходов.

Какие семена можно использовать?

Любое семя, которое растет в вашем районе (у нас это семя яблока).

Размер и вес семенной капсулы:

Размер и вес семенных коробочек очень важны для этого проекта. После некоторых экспериментов мы решили, что лучший размер - диаметр 16-18 мм, а максимальный вес - 10 грамм.

Необходимые материалы для изготовления семенных шариков:

  1. 1 ведро глины;
  2. 1 ведро органической темной почвы / компоста;
  3. 1 ведро воды (количество воды может варьироваться в зависимости от типа почвы);
  4. ¼ ведро семян.

Шаги по изготовлению семенных шариков:

  1. Соберите одинаковое количество глины и органической почвы. Например, если вы используете одно ведро глины, вам следует смешать его с одним ведром органической почвы.
  2. Убедитесь, что глина и органические частицы почвы мелкие.
  3. Текстура глины и органической почвы должна быть влажной, но не липкой.
  4. Возьмите немного смеси и скатайте ее в шарики. Проверьте мяч, бросив его на плоскую поверхность. Если мяч не ломается легко, значит, у него хорошее сцепление.
  5. Шарики с семенами должны быть идеально круглой формы, иначе они застрянут при броске квадрокоптером.
  6. Вставьте семена (от 1 до 2 семян на семенной шарик для постоянных деревьев, таких как красное дерево, сандал, апельсин, моринга…) (± 5 семян на семенной шарик для овощей, цветов, трав, клевера…)
  7. Сушите семенные шарики в течение одного-двух дней в затененном месте, если высохнуть должным образом, семенные шарики будут защищены от внешних хищников, таких как птицы, грызуны…

Вторая техника - бумажные капсулы с семенами.

На этот метод повлияла корейская газета, в которой были семена, которые можно было посадить на улице после прочтения. Бумажные капсулы с семенами:

Необходимые материалы:

  1. любая бумага;
  2. вода;
  3. блендер;
  4. семена.

Шаги по изготовлению шариков из бумаги:

  1. Измельчение всей вашей бумаги,
  2. Положите бумагу в блендер и добавьте воды, через 2 минуты перемешайте.
  3. Выдавить всю воду бумагой,
  4. Добавьте семена и придайте круглую форму.
  5. Дайте высохнуть на ночь.

Преимущества бумажных шаров:

  • легко найти материалы;
  • экологически чистый.

Как собрать высевной механизм для Clover 4.2

  1. Установите нижние держатели бака на крепление верхней палубы и закрепите винтами M3x8.

  2. Установите нейлоновую стойку (40 мм) с 4 сторон крепления для деки.

  3. Установите поручень и закрепите винтами M3x8.

  4. Установите верхние держатели бака на верхнее захватное крепление и закрепите винтами M3x8.

  5. Осторожно подсоедините резервуары к держателям резервуаров.

  6. Подсоедините серводвигатели SG90 к резервуару с помощью стяжки.

Окончательный вид сеялки дрона:

Модуль GPS

Мы установили модуль GPS наверх, используя 2 нейлоновые стойки (40 мм).

Мы покрыли аккумулятор, чтобы защитить его от холода.

Как управлять механизмом высева

Электронная часть механизма высева семян состоит из:

  • Raspberry Pi 4 B из COEX Clover 4.
  • 2 микро-серводвигателя SG90.
  • PDB (блок распределения питания) COEX Clover 4.

Сигнальные контакты серводвигателя подключены к контактам 32 и 33 аппаратной ШИМ Raspberry Pi, а питание снимается с платы распределения питания (5 В).

Пояснение кода для управления серводвигателями

Сервомоторы управляются с помощью сигнала ШИМ (широтно-импульсной модуляции) от Raspberry Pi. ШИМ контролирует количество времени, когда сигнал ВЫСОКИЙ или НИЗКИЙ в течение определенного периода времени. Рабочий цикл - процент времени, когда сигнал ВЫСОКИЙ.

В таблице ниже представлен рабочий цикл серводвигателя SG90 для каждого угла серводвигателя. Чтобы использовать рабочий цикл в коде, нам нужно преобразовать время в проценты, разделив время рабочего цикла на общий период ШИМ.

Что мы получаем:

  • Угол поворота -90° или рабочий цикл 2 мс => 1/20 * 100% = рабочий цикл 5%.
  • Угол поворота 90° или рабочий цикл 2 мс => 2/20 * 100% = рабочий цикл 10%.
  • Угол поворота 0° или рабочий цикл 1,5 мс => 1,5 / 20 * 100% = 7,5% рабочий цикл.

Мы сделаем это с помощью библиотеки RPi.GPIO и написания кода Python на Raspberry Pi.

Сначала импортируйте библиотеку RPi.GPIO и функцию сна:

import RPi.GPIO as GPIO
from time import sleep

Затем установите режим GPIO как BOARD:

servo = 33
GPIO.setmode(GPIO.BOARD)
GPIO.setup(servo, GPIO.OUT)

Далее создайте переменную для сервопривода ШИМ. Затем отправьте сигнал ШИМ 50 Гц на этот вывод GPIO с помощью функции GPIO.PWM(). Начните сигнал с 0.

pwm=GPIO.PWM(servo, 50)
pwm.start(0)

Используйте функцию ChangeDutyCycle(), чтобы записать проценты рабочего цикла в серводвигатель.

pwm.ChangeDutyCycle(5) # left -90 deg position
sleep(1)
pwm.ChangeDutyCycle(7.5) # neutral position
sleep(1)
pwm.ChangeDutyCycle(10) # right +90 deg position
sleep(1)

Программирование

Чтобы миссия была достигнута наилучшим образом и в пределах нашей досягаемости, от нас требовалось использовать многопоточность в Python.

Простой код миссии.

import threading
import time
import rospy
from clover import srv
from std_srvs.srv import Trigger
import RPi.GPIO as GPIO

rospy.init_node('flight')

get_telemetry = rospy.ServiceProxy('get_telemetry', srv.GetTelemetry)
navigate = rospy.ServiceProxy('navigate', srv.Navigate)
navigate_global = rospy.ServiceProxy('navigate_global', srv.NavigateGlobal)
set_position = rospy.ServiceProxy('set_position', srv.SetPosition)
set_velocity = rospy.ServiceProxy('set_velocity', srv.SetVelocity)
set_attitude = rospy.ServiceProxy('set_attitude', srv.SetAttitude)
set_rates = rospy.ServiceProxy('set_rates', srv.SetRates)
land = rospy.ServiceProxy('land', Trigger)

servo1 = 33        # PWM pins
servo2 = 32

GPIO.setmode(GPIO.BOARD)    #set pin numbering system

GPIO.setup(servo1,GPIO.OUT)
GPIO.setup(servo2,GPIO.OUT)

pwm1 = GPIO.PWM(servo1,50)    #create PWM instance with frequency
pwm2 = GPIO.PWM(servo2,50)

pwm1.start(0)        #start PWM of required Duty Cycle
pwm2.start(0)  


def servo_drop(seconds):   #function to drop seed capsules from 2 tanks
    print("Dropping")

    i = 1                           #variable to choose which tank
    for num in range(seconds/2):
        if(i == 1):                 #first tank
            pwm1.ChangeDutyCycle(10) # release one seed capsule
            time.sleep(0.5)
            pwm1.ChangeDutyCycle(5) # push then drop the capsule
            time.sleep(0.5)
            i = 2                   #changing the variable for to use the second tank in next dropping

        elif(i == 2):               #first tank
            pwm2.ChangeDutyCycle(10) # release one seed capsule
            time.sleep(0.5)
            pwm2.ChangeDutyCycle(5) # push then drop the capsule
            time.sleep(0.5)
            i = 1                   #changing the variable for to use the first tank in next dropping

        print(num)
        time.sleep(2)


if name == "main":
    # Take off and drone 10m above the ground
    navigate(x=0, y=0, z=10, frame_id='body', auto_arm=True)

    # rospy waits for 10 seconds to take off
    rospy.sleep(10)

    # Dropping starts simultaneuously with flying forwards 5 meters
    d = threading.Thread(target=servo_drop, args=(18,))  # 18 is the sum of all the time that the drone hovers after take off
    d.start()

    navigate(x=5, y=0, z=0, frame_id='body')

    #rospy waits for 8 seconds to fly foward
    rospy.sleep(8)

    # Fly right 1 m
    navigate(x=0, y=1, z=0, frame_id='body')

    #rospy waits for 2 seconds to fly right
    rospy.sleep(2)

    # Fly backward 5 m
    navigate(x=-5, y=0, z=0, frame_id='body')

    #rospy waits for 8 seconds to fly backward
    rospy.sleep(8)

    # Perform landing
    land()

pwm1.stop()
pwm2.stop()
GPIO.cleanup()

Литература

Разработано командой MINIONS

Особая благодарность Международному университету Ала-Тоо за финансирование наборов Clover 4.