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
Также разработчик дал некоторые комментарии:
Читайте также:
Львовские разработчики создали приложение для оплаты штрафов за парковку
Украинский разработчик из Vacuumlabs создал приложение для детей с особенностями развития
Python-программист с 9 годами опыта «выгорел» и начал производить столы
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…