Senior Software Engineer з компанії SoftServe Олександр Вітер зібрав «smart підставку для квітів», яка може обертати горщик з рослиною оптимальним чином.
Своєю мотивацією та покроковою інструкцією він поділився на форумі DOU.
Цю велику задачу він розділив на декілька підзадач, умовно поділених на 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
Також розробник надав деякі коментарі:
Читайте також:
Львівські розробники створили застосунок для оплати штрафів за паркування
Український розробник з Vacuumlabs створив застосунок для дітей з особливостями розвитку
Python-програміст з 9 роками досвіду «вигорів» і почав виготовляти столи
Google розширює доступ до своїх передових інструментів редагування на базі штучного інтелекту в застосунку Google…
Компанія Meta розпочала внутрішнє тестування нової моделі монетизації для свого месенджера — платної підписки під…
Розробники інструменту Codex представили функцію Chronicle, яка покликана змінити підхід до взаємодії штучного інтелекту з…
Сервіс GitHub оголосив про значні зміни в тарифних планах Copilot для індивідуальних користувачів. Вони включають…
Стрімінговий сервіс Deezer оприлюднив приголомшливі дані за квітень 2026 року: майже половина всього нового музичного…
Міністерство оборони України опублікувало перелік вакансій для Defense AI Center «A1». Під цією назвою відкрито…