Рубріки: Новости

Сеньор SoftServe собрал smart-подставку для цветов. Вот пошаговая инструкция

Ігор Шелудченко

Senior Software Engineer из компании SoftServe Александр Ветер собрал «smart подставку для цветов», которая может вращать горшок с растением оптимальным образом.

Своей мотивацией и пошаговой инструкцией он поделился на форуме DOU.

Аппаратное обеспечение

Эту обширную задачу он разделил на несколько подзадач, условно разделенных на 2 группы:

Аппаратное обеспечение:

  • собственно сама подставка, которая может вращаться и при этом выдерживать вес горшка с растением;
  • двигатель, чтобы вращать подставку на нужный угол;
  • контроллер, чтобы управлять двигателем.

Программное обеспечение:

  • логика для передачи команд от контроллера к двигателю;
  • логика для определения нужного времени для вращения (в разные дни солнце восходит и заходит в разное время, а ночью вообще нет смысла вращать растение);
  • математическая логика для определения оптимальных углов поворота подставки, учитывая такие факторы как: время восхода и заката; часть света, на которую выходит окно, на подоконнике которого стоит подставка с растением; окружающая архитектура, дома, блокирующие солнечный свет в то или иное время.

Хардверная часть была закрыта следующим образом: в качестве подставки разработчик использовал старый кулер от стационарного компьютера в сочетании с некоторыми элементами конструктора Lego. За движение отвечал сервопривод MG996R, а в качестве контроллера использовался мини-компьютер Raspberry Pi 4, на котором когда-то запускались Telegram-боты.

Относительно первого пункта из раздела Software, все было довольно несложно, потому что и Raspberry Pi, и выбранная модель сервопривода довольно популярны у DIY (do it yourself) комьюнити, так что найти инструкцию по настройке не составило проблем.

 

С двумя другими софтверными пунктами пришлось немного вспомнить геометрию и астрономию, потому что эти знания не использовались практически со школьных лет.

Код решения и комментарии

 

import time
import json
import pytz
import lgpio
import requests
from dateutil import tz
from datetime import datetime, tzinfo

 

PIN = 17 # RPi pin id where servo is connected
FREQ = 50 # default for our purpose
LAT, LNG = 46.4769954, 30.7302463 # where your device is located
endpoint = f'https://api.sunrise-sunset.org/json?lat={lat}&lng={lng}&formatted=0'
h = lgpio.gpiochip_open(0)

 

while True:
response = requests.get(endpoint)
response = json.loads(response.text)
sunrise = datetime.fromisoformat(response['results']['sunrise'])
sunset = datetime.fromisoformat(response['results']['sunset'])
sunrise = sunrise.astimezone(pytz.timezone("Europe/Kyiv"))
sunset = sunset.astimezone(pytz.timezone("Europe/Kyiv"))
now = datetime.now()

if now.hour == sunrise.hour and now.minute == sunrise.minute:
lgpio.tx_pwm(h, PIN, FREQ, 4.5) # go to initial position
delta = sunset - sunrise
light_day = delta.total_seconds()
time.sleep(int(light_day / 4)) # wait until sun will be in the right place

for i in range(100):
lgpio.tx_pwm(h, PIN, FREQ, 4.5+((i+1)*0.05))
time.sleep(int(light_day / 200))
else:
time.sleep(60
)

Также разработчик дал некоторые комментарии:

  1. Вы можете использовать и другой пин, не обязательно 17, но тогда нужно будет точно знать его ID и изменить это значение в коде, иначе сервопривод не будет реагировать на команды вашего кода.
  2. Для максимально точного результата нужно будет ввести географические координаты того места, где будет находиться устройство – от этого будет зависеть точное время восхода и заката, которое вернет сервис api.sunrise-sunset.org, а на этом базируются все дальнейшие расчеты.
  3. Если вы находитесь в другом часовом поясе, значение Europe/Kyiv также нужно будет изменить, так как сервис возвращает время восхода и заката исключительно в UTC, поэтому его нужно конвертировать в местное время.
  4. У разработчика устройство стоит у окна, выходящего на юг, при чем окружающие дома закрывают часть неба слева и справа, так что первые и последние 45 градусов движения солнца выпадают. На этом базируются расчеты стартовой позиции и того, сколько поворотов нужно будет совершить и как часто. В зависимости от того, куда выходят ваши окна и какая часть неба открыта, эти параметры могут изменяться. У разработчика подставка вращается от 45° до 135°, что соответствует передаче значений от 4,5 до 9,5 сервопривода. Там немного нелинейная зависимость, потому что параметр 2 соответствует углу 0 °, а 12 – 180 °. Все остальные значения между ними – это углы, на которые может вращаться сервопривод, и для них нужно подбирать соответствующие значения.

Читайте также:

Львовские разработчики создали приложение для оплаты штрафов за парковку

Украинский разработчик из Vacuumlabs создал приложение для детей с особенностями развития

Python-программист с 9 годами опыта «выгорел» и начал производить столы

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023