Рубріки: Новини

Сеньйор SoftServe зібрав smart-підставку для квітів. Ось покрокова інструкція

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

Senior Software Engineer з компанії SoftServe Олександр Вітер зібрав «smart підставку для квітів», яка може обертати горщик з рослиною оптимальним чином.

Своєю мотивацією та покроковою інструкцією він поділився на форумі DOU.

Hardware & Software

Цю велику задачу він розділив на декілька підзадач, умовно поділених на 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
)

Також розробник надав деякі коментарі:

  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 роками досвіду «вигорів» і почав виготовляти столи

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

EXMO.com збільшила ставки для ETH, USDT та USDC: заробляйте до 5% і 9% на рік з найпопулярніших альткоїнів!

Популярна криптобіржа EXMO.com підняла річні ставки на ETH, USDT та USDC у програмі Earn. Отримуйте…

15.05.2024

MacPaw запустила бету маркетплейса Setapp Mobile для iOS в ЄС

Українська компанія MacPaw випустила новий маркетплейс Setapp Mobile. Доступний він в бета-версії та лише за…

15.05.2024

Вінницькі розробники створили автономний рій FPV, який знищує цілі без участі операторів

Одна з команд вінницьких розробників FPV створила плату автономного польоту та спеціальний застосунок. Це дозволило…

15.05.2024

В експериментальному режимі: е-кабінет військовозобов’язаного запрацює вже через пару днів

Електронний кабінет військовозобов’язаного запрацює вже 18 травня. Але поки в експериментальному режимі — через те,…

14.05.2024

Чип Neural Engine, штучний інтелект, покращена камера: чого чекати від iPhone 16

Презентація Apple, де компанія анонсує нові продукти та розповідає про оновлення айфонів, – завжди очікувана…

13.05.2024

Розробники хочуть створити «Дія. Канали» — альтернативу Telegram та іншим месенджерам

Розробники ГО «Аналітичний центр Інформаційних ресурсів» планують створити альтернативу Telegram та іншим месенджерам — «Дія.…

13.05.2024