Вітер
Senior Software Engineer у компанії SoftServe Олександр Вітер створив smart-підставку для квітів. Розповідаємо, що це за штука і навіщо вона потрібна.
Senior Software Engineer у компанії SoftServe Олександр Вітер створив smart-підставку для квітів. Розповідаємо, що це за штука і навіщо вона потрібна.
Senior Software Engineer у компанії SoftServe Олександр Вітер створив smart-підставку для квітів. Розповідаємо, що це за штука і навіщо вона потрібна.
«Я почав вирощувати квіти, щоб на якомусь абстрактно-психологічному рівні компенсувати оточуючі смерть і руйнування. Як казав пан Зеленський: „Життя переможе смерть“. Звісно, коли айтішник за щось береться, воно не може бути „як у всіх нормальних людей“ — треба обов’язково додати якусь автоматизацію і перетворити всю ідею у цирк на дроті зі скрам-покером й тестувальницями. З чого все почалося та до чого дійшло і піде мова у цій статті», — розповідає Олександр на форумі DOU.
Коли айтівець тільки почав саджати перші кісточки від авокадо та спостерігати за тим, як йде ріст, то помітив, що ця рослина не така жвава, як, наприклад, соняшник, що обертається за сонцем протягом дня.
Враховуючи обраний варіант дій та той набір речей, які вже давно валялися на поличках від минулих незавершених проєктів, Олександр вирішив, що можна зібрати «smart підставку для квітів», яка буде вдень обертати горщик з рослиною оптимальним чином. «Прикладом подібної поведінки можуть слугувати розумні сонячні панелі, які не закріплені стаціонарно, а можуть обертатися таким чином, щоб максимально ефективно поглинати сонячне світло (зазвичай, займаючи положення, перпендикулярне падінню сонячних променів)», — поясниює він.
Цю велику задачу розробник розділив на декілька підзадач, умовно поділених на 2 групи:
Hardware:
Software:
У якості підставки він використав старий кулер від стаціонарного комп’ютера у поєднанні з деякими елементами конструктора 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)