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 роками досвіду «вигорів» і почав виготовляти столи
Популярна криптобіржа EXMO.com підняла річні ставки на ETH, USDT та USDC у програмі Earn. Отримуйте…
Українська компанія MacPaw випустила новий маркетплейс Setapp Mobile. Доступний він в бета-версії та лише за…
Одна з команд вінницьких розробників FPV створила плату автономного польоту та спеціальний застосунок. Це дозволило…
Електронний кабінет військовозобов’язаного запрацює вже 18 травня. Але поки в експериментальному режимі — через те,…
Презентація Apple, де компанія анонсує нові продукти та розповідає про оновлення айфонів, – завжди очікувана…
Розробники ГО «Аналітичний центр Інформаційних ресурсів» планують створити альтернативу Telegram та іншим месенджерам — «Дія.…