Оглавление:
- Шаг 1. Что делает это особенным?
- Шаг 2: разделка TFT
- Шаг 3: Установка / пайка датчика
- Шаг 4. Тестирование и первое использование
- Шаг 5. Использование инструмента и часто задаваемых вопросов
- Шаг 6: Компиляция из исходного кода
- Шаг 7: сделайте это по-своему
- Шаг 8: Взломать
- Шаг 9. Дополнительные пожертвования
Видео: Горячие продукты: 9 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:47
Стремясь стать лучшим маленьким графическим термогигрометром, доступным для Arduino Uno.
Приложения включают:
- Монитор температуры для новорожденных / яслей
- Монитор температуры в пристройке
- Монитор теплицы
- Внешний атмосферный контроль
- Проверка и мониторинг HVAC для дома / офиса
- Монитор / контроль инкубатора
ПРИМЕЧАНИЕ: Это не медицинский прибор и не заменяет правильного планирования и условий работы!
- Функции
- Совершенно бесплатно для некоммерческого использования.
- Поставляется со сверхбыстрым 7-сегментным смоделированным шрифтом "Rose Digital" и 16-сегментным шрифтом с полной альфа-версией "Astro Nerd" (ограничения на эту часть программного обеспечения см. В лицензировании, мы обещаем, что это по уважительной причине)
- Почти полностью бесплатные обновления (1)
- График автоматического выбора диапазона, охватывающий весь диапазон датчиков DHT11 и DHT22
- Использует DHT11 (в крайнем случае, мы не пробовали) или DHT22 для измерения температуры и относительной влажности.
- Отображает относительную влажность и температуру в градусах Фаренгейта или Цельсия.
- Отображает точки росы (конденсации) И инея (конденсации льда) в текущих единицах измерения.
- Мигающие графические предупреждения о влажном и сухом воздухе.
- Настраиваемые пользователем шрифты пропорционального отображения (опция)
- Основной диапазон отображения -9 -> 99 F или -9 -> 80C (предупреждение о превышении диапазона)
- Относительная влажность от 0% до 99%.
- Записывает максимальную и минимальную температуру и влажность с момента сброса
- Включает расчеты Стедмана и предупреждает о неудобных или опасных условиях работы
- Требуется минимум деталей Uno, экран TFT 3,5 дюйма
- Опционально переключаемый F / C
- Программируемое управление нагревателем (для инкубаторов и т. Д.)
- Просто построить
- Модульный код
- Мы сказали, что это бесплатно?
(1) Ограничения буферизации для UNO означают, что диаграмма кратковременно мигает во время обновлений.
Запасы:
Arduino Uno R3 (или китайский клон)
- 1 монитор температуры и влажности DHT22 (eBay / Amazon)
- 1 экран TFT 3.5 "с резистивным сенсорным экраном и слотом для SD-карты (см. Текст).
- Ползунковый переключатель SPST (опция).
- ПК с USB - для загрузки программы.
- Источник питания 9-12В.
- Бокорезы хорошего качества
- Паяльник и припой. Пинцет для радиатора. Провода перемычки.
- По желанию, чехол (в корпусах Arduino Uno недостаточно места для экрана дисплея).
- Трубка тонкая термоусадочная (для одевания и изоляции паяных мест).
Шаг 1. Что делает это особенным?
Но подождите, вы видели фотографии, а это всего лишь еще один измеритель температуры и влажности, верно? Вы можете приобрести их на eBay примерно по той же цене, что и экран Arduino TFT, который мы использовали для этого проекта.
Ну не совсем… позвольте мне объяснить.
Коронавирус, Covid-19, SARS-Cov-2 … все это довольно пугающие вещи. Одно из лучших действий, которые мы можем сделать прямо сейчас, - это заботиться о наших легких, и это легче сделать дома. Если мы работаем в современном офисе, в нем должна быть хорошая система отопления, вентиляции и кондиционирования, а в большинстве современных автомобилей есть отличные фильтры, которые забирают большую часть крупных частиц из наружного воздуха, прежде чем они попадут в кабину. Это оставляет дом … единственное место, где вы чувствуете себя в безопасности, и именно там таятся самые распространенные неприятности. Хотя от грязной насадки для душа можно заразиться болезнью легионеров (да, действительно!), К счастью, это довольно необычно.
Но есть нечто гораздо более распространенное, о чем большинство из нас даже не задумывается, потому что мы прожили с этим всю свою жизнь.
Форма.
Точнее, споры плесени. Думайте о них как о микроскопических семенах, которые производятся крошечными блуждающими ростками, которые скрывают темноту и свободно разлетаются в воздух - часто без необходимости беспокоить - и могут заполнить наши дома всем, от этих неприятных черных пятен во влажных углах до сухая гниль и прочее.
Плесень не повреждает вашу собственность (что достаточно плохо), она может вызвать раздражение всех дыхательных путей - от нашего носа и носовых пазух прямо сейчас до самых альвеол, миллионов маленьких мешочков, выстилающих наши легкие - они настолько малы, что растянувшись, они примерно покрыли бы теннисный корт. Это много места для микроскопического организма, который может проникнуть внутрь, спрятаться и причинить всевозможные разрушения.
И еще …
С другой стороны, сухой воздух тоже может нанести ущерб. Поверхность наших легких покрыта очень тонкой пленкой водянистой слизи - она помогает избавиться от неприятностей и неплохо справляется со своей задачей, но если воздух слишком сухой, эта слизь тоже начинает сохнуть и это затрудняет дыхание.
И даже больше…
Люди естественным образом сохраняют прохладу за счет испарения - мы потеем (в сухой жаркий день это незаметно), но по мере увеличения влажности люди обнаруживают, что вода просто «стоит» на их коже, и они начинают нагреваться. Очень горячо.
В некоторых частях мира (Австралия и тропики) это такая проблема, что работники должны знать об «эффективной рабочей температуре» - погодные каналы часто называют это температурой «ощущаемой», потому что как жара / влажность увеличивается, вероятность теплового удара и даже смерти становится очень реальной.
Для обоснования и дальнейшего чтения обратитесь к Википедии или погрузитесь в нее!
en.wikipedia.org/wiki/Heat_index
Если вы думаете: «Со мной этого никогда не случится», примите во внимание, что с изменением климата это становится очень реальной возможностью на широтах за пределами Сиэтла, и работая в жаркий «душный» день, вы можете рисковать своим здоровьем, даже не осознавая этого.
Тепловое истощение крайне неприятно, а тепловой удар требует серьезной медицинской помощи.
Таким образом, это устройство - не просто причудливый графический термометр / гигрометр, оно имеет встроенную сигнализацию для предупреждения об условиях теплового удара, поможет вам решить, насколько хорошо вентилируется ваш дом, и даже выглядит довольно умным (если мы говорим сами).
С учетом всего вышесказанного, это устройство не предназначено для медицинских целей и не должно использоваться там, где может быть поставлено под угрозу здоровье и безопасность работников. Даже если бы мы могли сертифицировать наш код (а мы не можем), само оборудование не несет такой гарантии. Это должно остановить всю эту грязную юридическую чушь, но это должно дать вам представление о том, насколько здоров ваш дом!
Сборка настолько проста, насколько это возможно, хотя вам нужно будет «разделать» экран TFT, потому что мы собираемся использовать его так, как никогда не думали дизайнеры.
ПРИМЕЧАНИЕ. Поскольку кто-то поднял эту проблему, стоит отметить, что датчики DHT22 имеют заявленную точность ± 0,5 ° C и относительную влажность ± 1%, что достаточно для многих приложений, но не для случаев, когда температура / влажность являются критическими. Позже мы планируем добавить калибровку после сборки. DHT11 имеет немного менее точное измерение температуры, равное ± 1,0 ° C, но в целом должно хорошо отражать нашу среду.
Шаг 2: разделка TFT
Это единственная действительно сложная часть, и это то, что вам нужно исправить, потому что, если вы немного не владеете паяльником … ну, чем меньше об этом говорить, тем лучше.
Этот проект * должен * работать со многими экранами этого разрешения и типа - и программное обеспечение будет работать с любым ATMega 328 или выше (программное обеспечение очень плотно, приближается к 99% из 28K, доступных на момент написания этой статьи), и мы сжали столько функций, сколько позволяет пространство.
Убедитесь, что все работает, прежде чем начинать отрубать биты
- Проверьте установку дисплея на Arduino - слот для USB находится в конце, куда входят порты питания и USB. Подсветка включается при включении питания, но в противном случае она ничего не сделает.
- Обратите внимание на метки контактов для доступа к карте USB. Они нам не понадобятся, поэтому мы сделаем доску очень короткой стрижкой.
- На нашей плате целевые контакты помечены как SD_SS, SD_DI, SD_DO и SD_SCK в конце J1.
- Вы можете оставить или удалить два последних штифта - те, которые мы вырезаем из нашей доски.
- Больше ничего не режьте, иначе ЖК-дисплей не будет работать! Например, LCD_D0 (одна из линий данных) находится очень близко, поэтому здесь нужно проявлять особую осторожность.
- Дважды проверьте, один раз отрежьте или надейтесь, что сможете впаять новый заголовок!
Примечание: возможно, можно будет использовать «мультиплексирование» контактов SPI, которые мы здесь использовали, и хранить данные на SD-карте, но это мы оставим другим разработчикам.
Шаг 3: Установка / пайка датчика
Хотя в этом нет строгой необходимости, пайка соединений - лучший способ превратить этот проект во что-то, что вы можете смонтировать и забыть.
Паять DHT22 должен только человек, обладающий достаточными навыками пайки. Датчик очень чувствителен к изменениям температуры и влажности. Безымянный человек немного перегрел паяльные контакты на нашем (кашель, кашель) и отправил датчик так далеко из калибровки, что он отказывался работать, пока мы не "приготовили" его в соответствии с инструкциями производителя, чтобы он не производил считывание. ошибки. Для большинства людей лучшим вариантом будет использование предварительно смонтированного DHT11 / 22 с разъемом, предназначенным для соединительных проводов.
DHT22 используют последовательный однопроводной последовательный канал для связи с MCU - с потенциальным диапазоном более 10 м (> 32 футов) без преобразования сигнала, поэтому детектор можно разместить на некотором расстоянии от Arduino.
После изучения схем выяснилось, что 6-контактный разъем внутрисхемного последовательного программатора (ICSP) на конце платы подключен к контактам SPI, которые использовались экраном для чтения / записи SD-карты. Использование этих контактов не повлияет на вашу способность программировать плату через USB в будущем, поскольку они в основном используются для отладки и программирования Uno с помощью последовательного программатора (FDTI). В качестве примечания, мы благодарны Стиву Вуду из AudioSpectrum Analyzers в Великобритании за то, что он предоставил нам запасной, когда наш растворился в огромной куче битов Марка.
Если у вас есть плоскогубцы хорошего качества, можно согнуть провода так, чтобы они могли подключиться к разъему DuPont, но пайка является предпочтительным методом. С осторожностью (и твердой рукой) вполне возможно припаять DHT22 непосредственно к разъему.
Подключение почти так же просто, как и есть, но важно соблюдать полярность, потому что подключение устройства в обратном направлении может мгновенно вывести его из строя. Хотя DHT22 имеет четыре контакта, контакт 3 не подключен. Установленные датчики обычно имеют только три контакта, которые красиво совпадают с заголовком. Когда датчик лежит на спине (показан), вы можете видеть, что контакты питания и данных выровнены правильно.
Шаг 4. Тестирование и первое использование
Осталось только аккуратно подключить модуль DHT22 к Arduino и настроить программное обеспечение. Большая часть умных вещей выполняется с помощью программного обеспечения, что стало возможным благодаря графической библиотеке от Adafruit, драйверу дисплея MCUFriend Дэвида Прентиса и столь же умным вещам из расчетов «эффективного тепла» Роберта Стедмана.
Единственное, что вам нужно настроить в этой базовой конфигурации, - это указать программному обеспечению, какие три контакта используются.
Если вы предпочитаете подключать датчик по-другому, следующие строки в CONSTANTS. H сообщают Uno, как настроить себя.
#define DHT22_DATA 11
DH22 использует очень консервативный 1–1,5 мА при считывании показаний, которые намного меньше типичного максимума в 20 мА, поэтому он ничего не повредит. (Конечно, короткое замыкание любого контакта почти наверняка приведет к разрушению устройства, поэтому мы предлагаем использовать термоусадку, если вы поместите датчик на сменную плату Heath Robinson.) Если все пойдет хорошо, HotStuff загрузится примерно через 5 секунд. При обнаружении ошибки экран станет черным и отобразится короткое сообщение об ошибке. На это можно в значительной степени не обращать внимания, поскольку это просто означает, что датчик либо не подключен к питанию, либо подключен неправильно.
Шаг 5. Использование инструмента и часто задаваемых вопросов
В: Я вижу на экране финтовые следы неосвещенных цифр. Разве это не ошибка?
О: Нет, это сделано намеренно, хотя и не высечено в камне. Идея заключалась в том, чтобы имитировать внешний вид «настоящего» ЖК-дисплея (по сравнению с TFT с высоким разрешением). В таких дисплеях используются большие заранее спроектированные блоки, которые можно включать и выключать, как пиксели, но в отличие от пикселей они могут занимать большие части экрана. В результате всегда остается видимый след материала, который здесь имитируется.
В: Как я могу переключаться между градусами Цельсия и Фаренгейта?
A: Функция не была полностью протестирована во время «нажатия» (потому что кто-то забыл, а вы…). Тем не менее, мы проверили, и эта функция работает (при желании), но прикрепив небольшой ползунковый переключатель SPST с одной клеммой к контакту 12, а другой к удобному заземлению. Самый быстрый способ сделать это - припаять или использовать модифицированный разъем DuPont для подключения к земле, а другой - либо напрямую к контакту 12 (некоторые клоны имеют дополнительный набор сквозных отверстий для такого рода вещей), либо в оригинальных конструкциях, чтобы вывод MOSI на заголовке ICSP, который находится над питанием 5 В. Если этот переключатель находится в разомкнутом положении, устройство загружается по Цельсию, но в закрытом положении он опускает штифт 12 на низкий уровень, и перезагрузка возвращает его обратно по Фаренгейту. Нет необходимости в резисторе для защиты вывода, поскольку имеется внутренний резистор.
В: Могу ли я использовать другой датчик?
Ответ: Да. Но вам нужно либо найти подходящую библиотеку, либо написать свою собственную. Мы выбрали DHT22 из-за его однопроводного интерфейса и из-за того, что он был сзади, на деталях, собирающих пыль. Конструкции однопроводного интерфейса предпочтительнее, потому что мы можем использовать другие «свободные» цифровые выводы для других функций. I2C недоступен, так как он занят экраном дисплея. Однако SPI подходит, если вы готовы потерять такие функции, как переключение масштаба и т. Д.
В: Могу ли я продать коммерческую версию?
A: Конечно, вы можете при условии, что вы соблюдаете условия лицензирования программного обеспечения (по сути, это лицензия BSD с двумя пунктами, которая очень разрешительна, но имейте в виду, что другие лицензии могут применяться к включенным библиотекам.) Также обратите внимание, что это устройство не является (и никогда не может быть) сертифицирован для использования в критических условиях, он предназначен для использования дома / любителями, хотя может найти применение в домах престарелых, офисах и других рабочих местах. Просто имейте в виду, что это только самое слабое звено … Механизм шрифтов, разработанный для этого проекта, лицензирован для некоммерческого использования, если вы не сделаете пожертвование в пользу рака GoFundMe нашего коллеги.
В: Мои минимальные / максимальные показания не записываются на график.
A: Это сделано специально. Инструмент использует «скользящую среднюю» (статистическое среднее), которая сбрасывается каждый час. Это помогает сгладить график и дать более разумный взгляд на измерения, предотвращая странные всплески (например, некоторые, э-э, "человек", дышащий на датчик, не сводят его с ума.
В: Почему вы не используете в своем коде ярлыки C ++ (например, ++ и т. Д.)? Почему все так … многословно!
О: Один из авторов - опытный программист 8-битных игр, а другой - из Python. Мы использовали несколько ярлыков, их использование довольно однозначно, но C (язык, лежащий в основе C ++) старый, а компиляторы в целом были немного тупыми, когда Керниган и Ричи написали первый компилятор, не говоря уже о компьютерах, которые были медленными, а на клавиатурах были ключи. что вы чувствовали, что должны ударить молотком. Все это (и многое другое) привело к тому, что C стал очень кратким языком с несколькими ярлыками для достижения одного и того же. Многие из них несут (и остаются) ответственными за некоторые очень хитрые ошибки: и даже не заставляют нас начинать с сбоев кучи / стека.
Очевидно, необходима некоторая оптимизация (например, семафоры), потому что мы пытаемся втиснуть кварту в чайную чашку, но, где это возможно, мы этого избегали.
Между прочим, если у вас нет начитанной копии K&R C… остановитесь прямо сейчас и закажите ее. Есть много очень больших книг по C, но K&R остается, вероятно, лучшей, и, поскольку C лежит в основе C ++, вы также лучше поймете особенности этого языка.
В: Я думаю, что обнаружил ошибку, что мне делать!
A: Ошибки? Здесь нет ошибок, только функции … просто некоторые функции не работают так, как мы ожидали. Оставьте нам заметку на GitHub, и мы попробуем изменить эту функцию, чтобы она больше соответствовала дизайну. На самом деле код все время реорганизуется в несколько разных проектов, поэтому местами он довольно беспорядочный, и за это Марка будет бить мокрой пикшей, пока он не закричит: «Хватит!» - Дэн
Шаг 6: Компиляция из исходного кода
Проект размещен на GitHub (просто слишком много кода, чтобы вставить Instructable, люди будут квадратными глазами, пытаясь разобраться во всем этом), но, хотя предварительно запрограммированный ATMegas будет доступен на eBay, вы, возможно, захотите скомпилировать свой собственный из источник.
Исходный код, который должен компилироваться под Visual Studio с платформой ввода-вывода - он стал немного громоздким для редактора Arduino, а Visual Studio позволяет нам писать лучший код с меньшим количеством ошибок благодаря некоторой «пуховой» выборке, которую он имеет.
github.com/marcdraco/HotStuff
platformio.org/
visualstudio.microsoft.com/downloads/ Вам понадобится пара библиотек для этого щита. Adfruit GFX (которому также понадобится библиотека Wire).
MCUFriend_kbv Дэвида Прентиса v2.9. Дэвид выпустил более поздние версии, но их работа не гарантируется.
Шаг 7: сделайте это по-своему
Нет ничего лучше красивого проекта, который вы можете показать другим, и заставить их задыхаться от трепета, когда он начинается с вашего имени в свете огней. Итак, мы настроили программное обеспечение так, чтобы практически любой мог вносить изменения, не зная C / C ++.
Найдите в своем любимом текстовом редакторе файл "constants.h" и найдите следующие строки:
constexpr uint16_t defaultPaper = ЧЕРНЫЙ;
constexpr uint16_t defaultInk = CYAN;
Вы можете видеть названия цветов на простом английском языке - Дэвид Прентис любезно предоставил загрузку определений, которые появляются ранее в файле, и все, что вам нужно сделать, это изменить свой передний план (и фон) на что-то по вашему выбору, прежде чем загружать на доску. Цвета «следа» для графика здесь немного глубже и выглядят следующим образом:
constexpr uint16_t HUMIDITY_TRACE {AZURE}; constexpr uint16_t TEMP_TRACE {ЖЕЛТЫЙ};
Хотя эти TFT не известны своей контрастностью (и ограничены 5-6-5 RGB, 16-битным цветом), мы предоставили пример параметра компиляции «NIGHT_MODE», который закомментирован по умолчанию, но устанавливает отображение
Аналогичным образом можно настроить другие цвета. Хотите, чтобы он прочитал по-имперски, когда он загорится? Без проблем! Найдите и закомментируйте ("//") или удалите следующую строку, и когда вы загрузите обратно на доску…
Вопросы, комментарии и улучшения следует размещать на GitHub.
Еще более подробная документация по взлому проекта находится в сопроводительном файле README. MD.
Шаг 8: Взломать
Этот проект был создан с использованием принципала KISS, и он готов как есть.
Он может составлять основу чего-то, основанного на другом датчике - возможно, более точном или быстром, при условии, что для его библиотеки достаточно места. Как видите, дела и без того довольно напряженные.
Когда вы хорошо знаете код, легко что-то кардинально изменить, но даже без большого опыта программирования многие значения констант в "constants.h" объясняют, как что-то изменить. Более продвинутые программисты заметят, что относительно легко (мы надеемся!) Вытащить нужные вам части для дальнейшего использования. Например, мы заменили графическое отображение полнофункциональными часами реального времени менее чем за час. Однако для часов требуется способ установки времени, поэтому он бесполезен как есть; мы выпустим функциональную версию этого позже (вы можете найти код разработки на GitHub в разделе HotStuff Chrono).
Но в этих дисплеях есть что-то, что не сразу бросается в глаза, пока вы не начнете программировать, - этот сенсорный экран.
Проблема с резистивными сенсорными экранами этого типа заключается в том, что им нужна калибровка, которая усложняет работу, и, честно говоря, нет места со всеми другими функциями, которые мы втиснули, чтобы сломать другую библиотеку. Это было бы возможно с Arduino Mega, у которой гораздо больше места для флеш-памяти, но где в этом веселье?
Загляните под плату, и вы увидите, что кроме цифровых входов / выходов для управления ЖК-дисплеем и SD-картой нет выходов для АЦП для определения измерения сопротивления.
Странно, правда?
Умники эти дизайнеры. У дисплея есть собственный буфер кадра: это область ОЗУ, которая удерживает экран в том виде, в каком он есть, пока питание остается подключенным, что означает, что вы можете (программно) отключить несколько контактов устройства, когда оно включено, и использовать их для других задач - при условии, что вы потом вернете их обратно!
Для получения информации о том, как это делается, мы предлагаем прочитать библиотеку резистивных сенсорных экранов Лимора «Леди Ада» Фрид.
А если у вас получится что-то крутое, обязательно отправьте Pull Request!
Шаг 9. Дополнительные пожертвования
А теперь необязательный момент, давайте представим женщину, которая дала жизнь и имя шрифтам, используемым в этом проекте, и остается источником вдохновения для всех нас, особенно когда мы получаем новости о том, что она заболела раком и … большинство из нас знает, как страшно это конкретное призрак. Ее полная биография находится на ее веб-сайте https://www.rosedf.net/, и вы можете найти ее в обычных каналах социальных сетей. Она говорит о себе:
«Если я не тренируюсь, чтобы попытаться попасть в космос, не говорю людям смотреть на наше прекрасное ночное небо, не провожу время с теми, кого я люблю, или просто не являюсь ботаником, мне нравится сосредотачивать свое внимание на доступе к образованию и равенстве. работать над защитой интересов жертв домашнего / сексуального насилия и бездомности, как и я, и мне нравится повышать осведомленность о важности психического здоровья в повседневной жизни и в академических кругах ».
Если вы хотите подбросить ей несколько долларов (или другую валюту в вашей стране), мы все будем очень признательны. Много любви было вложено в разработку HotStuff, даже если это было задумано как обучающее упражнение, и большая часть этой работы может быть повторно использована для будущих проектов, которые имеют «медленный» процессор, но нуждаются в быстром, четком и, прежде всего, БОЛЬШОМ буквенно-цифровом шрифт на TFT-дисплее. Пожертвуйте здесь (спасибо):
paypal.me/FirstGenSci
Рекомендуемые:
Дизайн игры в Flick за 5 шагов: 5 шагов
Дизайн игры в Flick за 5 шагов: Flick - это действительно простой способ создания игры, особенно чего-то вроде головоломки, визуального романа или приключенческой игры
Linux: горячие клавиши для пасьянса !!: 6 шагов
Linux: Сочетания клавиш для пасьянса !!: Вот несколько полезных сочетаний клавиш для пасьянса на Linux. Пожалуйста, подпишитесь на мой канал Спасибо
Счетчик шагов - Micro: Bit: 12 шагов (с изображениями)
Счетчик шагов - Микро: Бит: Этот проект будет счетчиком шагов. Мы будем использовать датчик акселерометра, встроенный в Micro: Bit, для измерения наших шагов. Каждый раз, когда Micro: Bit трясется, мы добавляем 2 к счетчику и отображаем его на экране
Играйте в Doom на своем IPod за 5 простых шагов !: 5 шагов
Играйте в Doom на своем IPod за 5 простых шагов!: Пошаговое руководство по двойной загрузке Rockbox на iPod, чтобы играть в Doom и десятки других игр. Это действительно легко сделать, но многие люди до сих пор удивляются, когда видят, как я играю дум на своем iPod, и путаются с инструкциями
Горячие булочки с корочкой: 5 шагов
Hot Crust Buns: Хотите новый увлекательный способ проигрывать простые песни на макетной плате? Узнайте, как играть классические песни, например, у Мэри был барашек или горячие булочки с корочкой. В этом уроке вы узнаете, как настроить и запрограммировать музыкальный инструмент с 4 нотами. Немного кодирования