# АрдуинАрсенал — полный указатель контента > Бесплатный интерактивный самоучитель Arduino и C++: 19 разделов, более 1200 уроков, симулятор 6 плат и MicroPython в браузере без регистрации. Пишите скетчи и сразу видите результат на виртуальной макетке. Обновлено: 2026-11-03. Уроков: 1212. Гайдов: 199. ## Основы Arduino и C++ (https://arduin-arsenal.ru/section/osnovy/) Стартовый курс: от первого мигания светодиодом до уверенной работы с переменными, условиями, циклами и аналоговыми входами. Всё — на виртуальной плате в браузере. Уровень: beginner. Уроков: 68. Обновлён: 2026-09-22. - [Переменные и типы данных: int, float, bool, String](https://arduin-arsenal.ru/lesson/osnovy/peremennye-tipy/): Типы данных Arduino: int, float, bool и String. Область видимости, переполнение int на 32767, точность float, const и unsigned — с примерами в симуляторе. - [Условия if/else: плата принимает решения](https://arduin-arsenal.ru/lesson/osnovy/usloviya-if-else/): Учим Arduino принимать решения: if, else, else if, сравнения и логика && и ||. Кнопка-светильник с ночным режимом и ловушка = вместо == — всё в симуляторе. - [Циклы for и while: автоматизация повторов](https://arduin-arsenal.ru/lesson/osnovy/cikly-for-while/): Циклы for и while в Arduino: счётчик цикла, перебор массива из трёх светодиодов, ожидание через millis без delay, do-while и опасность бесконечного цикла. - [Аналоговые входы: analogRead и потенциометр](https://arduin-arsenal.ru/lesson/osnovy/analogread-potenciometr/): Читаем потенциометр через analogRead: АЦП 10 бит и диапазон 0–1023, входы A0–A5, перевод шкалы в 0–255 через map, ШИМ-диммер, фоторезистор LDR и борьба с шумом. - [switch/case: устройства с несколькими режимами](https://arduin-arsenal.ru/lesson/osnovy/switch-case-rezhimy/): Лестница if/else на четыре режима разваливается от одной пропущенной else. Переводим ночник на switch: case, break, default и три честные грабли. - [Конечный автомат: светофор без delay()](https://arduin-arsenal.ru/lesson/osnovy/konechnyi-avtomat-svetofor/): Светофор на delay() не видит кнопку пешехода 11 секунд из 12. Переводим его на конечный автомат: состояния, millis-таймер, запрос без блокировки loop. - [Аналоговый джойстик: две оси и кнопка](https://arduin-arsenal.ru/lesson/osnovy/analogovyi-dzhoistik-dve-osi/): Модуль KY-023: оси на A0 и A1, кнопка на D2 с INPUT_PULLUP. Калибровка центра, мёртвая зона, перевод значений в направления и живой прогон в симуляторе. - [Класс String: текст, конкатенация и сравнение](https://arduin-arsenal.ru/lesson/osnovy/string-konkatenaciya-sravnenie/): Собираем имя устройства из кусочков, сравниваем команды через ==, режем строку по символам и считаем, во сколько String обходится двум килобайтам SRAM. - [Матричная клавиатура 4x4: сканируем строки и столбцы](https://arduin-arsenal.ru/lesson/osnovy/matrichnaya-klaviatura-4x4/): Шестнадцать кнопок на восьми пинах: принцип матрицы, сканер без библиотеки в двадцать строк, INPUT_PULLUP на столбцах и призраки при трёх нажатых кнопках. - [Датчик движения PIR: свет включается сам](https://arduin-arsenal.ru/lesson/osnovy/pir-svetilnik-hc-sr501/): HC-SR501 в прихожей: три провода, подстроечники чувствительности и времени, прогрев с ложными тревогами и светильник с millis-удержанием вместо delay. - [Ультразвуковой HC-SR04: измеряем расстояние сантиметрами](https://arduin-arsenal.ru/lesson/osnovy/hcsr04-pulsein-rasstoyanie/): Подключаем HC-SR04 к Arduino: триг-импульс 10 мкс, эхо через pulseIn, таймаут 30 мс, арифметика 58 мкс на сантиметр и три ловушки первого вечера. - [Парктроник на HC-SR04 и зуммере: ближе — чаще писк](https://arduin-arsenal.ru/lesson/osnovy/parktronik-hcsr04-zummer/): Парктроник на HC-SR04 и зуммере: зоны сигнала через map и constrain, millis-гейт вместо delay и защита от воя при включении. Классика на датчике расстояния. - [Реле и Arduino: управляем мощной нагрузкой](https://arduin-arsenal.ru/lesson/osnovy/rele-modul-220v-nagruzka/): Управляем лампой 220 В через модуль реле: катушка 70 мА, клеммы NO/NC/COM, LOW-активный вход, щелчок при загрузке и правила сетевой стороны. - [DC-мотор через транзистор: включение и реверс](https://arduin-arsenal.ru/lesson/osnovy/osnovy-dc-motor-tranzistor-revers/): Транзистор как рычаг: 4 мА с пина превращаются в 400 мА на моторе, диод гасит выброс обмотки, а реверс собирается на H-мосте из четырёх ключей. - [random() и randomSeed: случайные числа по-настоящему](https://arduin-arsenal.ru/lesson/osnovy/osnovy-random-randomseed-sluchainye-chisla/): random(min,max) не выдаёт верхнюю границу, серия после сброса повторяется, а сид с плавающего A0 каждый запуск новый. Ловим генератор за руку. - [Игра на реакцию: замеряем скорость отклика](https://arduin-arsenal.ru/lesson/osnovy/osnovy-igra-na-reakciyu-millis/): Светодиод вспыхивает после случайной паузы, кнопка ловит нажатие, Serial печатает реакцию в миллисекундах. Фальстарт, рекорд и ориентиры 150-350 мс. - [Электронный кубик: random и светодиодная шкала](https://arduin-arsenal.ru/lesson/osnovy/osnovy-elektronnyi-kubik-random/): Электронный кубик на Arduino: кнопка, шесть светодиодов и random(1,7). Ловим серию без randomSeed, добавляем встряску и проверяем честность бросков. - [Кнопочное меню: выбираем режимы устройства](https://arduin-arsenal.ru/lesson/osnovy/osnovy-menu-dve-knopki/): Кнопочное меню на Arduino: две кнопки листают пункты и подтверждают выбор, светодиод показывает режим. Фронты кнопок, два состояния и дребезг на живой плате. - [Стробоскоп: регулируем частоту вспышек потенциометром](https://arduin-arsenal.ru/lesson/osnovy/osnovy-stroboskop-potenciometr/): Стробоскоп на Arduino: потенциометр задаёт 1–15 вспышек в секунду, millis-таймер мигает без delay. Полупериод вместо периода, слияние вспышек и безопасность. - [Кодовый замок: клавиатура 4x4 и светодиоды](https://arduin-arsenal.ru/lesson/osnovy/kodovyi-zamok-4x4-trevoga/): Доводим сканер матрицы до замка: буфер набора, сравнение с эталоном 2580, зелёный на успех и три тревожных гудка зуммером, таймаут ввода и память фронтов. - [Итоговый проект: ночник с датчиком света и меню](https://arduin-arsenal.ru/lesson/osnovy/itogovyi-nochnik-rezhimy-pamyat/): Финал раздела: ночник, светящий плавно по темноте через ШИМ, меню из трёх режимов на двух кнопках и память режима в EEPROM — пять уроков в одном скетче. - [Подключение пьезозуммера к Arduino: tone(), noTone() и электрика пина](https://arduin-arsenal.ru/lesson/osnovy/osnovy-buzzer-podklyuchenie-tone/): Схема включения зуммера: активный против пассивного, резистор 100 Ом на D8, ток пина 20-30 мА, когда нужен транзистор и потолок tone() 65535 Гц. - [Мелодия на tone(): массивы нот, темп и живой цикл без delay](https://arduin-arsenal.ru/lesson/osnovy/osnovy-melodiya-tone-massiv/): Мелодия на зуммере: массивы частот и длительностей, темп одной константой, щель 20-30 мс между нотами и millis-планировщик, при котором кнопка жива. - [Звуковая сигнализация: порог, сирена и кнопка сброса тревоги](https://arduin-arsenal.ru/lesson/osnovy/osnovy-zvukovaya-signalizaciya/): Сигнализация на зуммере: порог по фоторезистору с гистерезисом, сирена 400-1200 Гц, дежурный бип на millis и кнопка подтверждения тревоги на D2. - [Семисегментный индикатор: подключаем и зажигаем цифры](https://arduin-arsenal.ru/lesson/osnovy/osnovy-seg7-podklyuchenie/): Подключаем семисегментный индикатор к Arduino: сегменты a-g, резистор 220-330 Ом на каждый, общий анод против катода и инверсия, зажигаем 0 и 1. - [Счётчик на семисегментнике: цифры из массива паттернов](https://arduin-arsenal.ru/lesson/osnovy/osnovy-seg7-schetchik-cifr/): Счётчик 0-9 на индикаторе: массив из 10 байт-паттернов, функция showDigit со сдвигом и маской, кнопки плюс/минус с антидребезгом millis и кольцом. - [Таймер обратного отсчёта: сегментник, зуммер и кнопки](https://arduin-arsenal.ru/lesson/osnovy/osnovy-seg7-tajmer-otschet/): Таймер 9-0 на millis: тик раз в секунду без delay, кнопка старт/стоп, длинное нажатие 900 мс сбрасывает, финальный сигнал tone 1000 Гц на 600 мс. - [Кнопка на Arduino: digitalRead и INPUT_PULLUP](https://arduin-arsenal.ru/lesson/osnovy/knopka-digitalread/): Тактовая кнопка на Arduino без внешнего резистора: INPUT_PULLUP, инвертированная логика, debounce по-простому и почему кнопка «срабатывает сама». - [Датчик наклона KY-002: ловим встряску](https://arduin-arsenal.ru/lesson/osnovy/osnovy-tilt-datchik-naklona/): Датчик наклона KY-002 на Arduino: шарик замыкает контакты, ловим фронт digitalRead с гейтом 25 мс, счётчик встряхиваний в Serial и LED-вспышка без delay. - [Геркон и магнит: дверь под контролем](https://arduin-arsenal.ru/lesson/osnovy/osnovy-reed-gerkon-magnit/): Геркон на двери с Arduino: NO и NC контакты, магнит на створке, зазор 10-20 мм, подтяжка пина, метка millis и отсчёт секунд, сколько открыта дверь. - [Охранная система: наклон, дверь и зуммер](https://arduin-arsenal.ru/lesson/osnovy/osnovy-ohrana-tilt-reed-zummer/): Охранная система на Arduino: автомат состояний switch, постановка кнопкой с задержкой 5 с, сирена tone 400-1200 Гц и мигание LED, геркон плюс датчик наклона. - [Лазерный модуль KY-008: включаем и мигаем](https://arduin-arsenal.ru/lesson/osnovy/osnovy-lazer-ky008-podklyuchenie/): Подключение KY-008 к Arduino: роль средней ножки, ток 30 мА на пределе пина, лазер 650 нм и 5 мВт, правила для глаз и мигалка S.O.S. на массиве пар. - [Лазерная шторка: пересечение луча и счётчик](https://arduin-arsenal.ru/lesson/osnovy/osnovy-lazer-ldr-luch-schet/): Лазер на D12 напротив фоторезистора на A0: analogRead падает при перекрытии, два порога 300 и 400 против дрожи, счёт по фронту пересечения, вывод в Serial. - [Охранный периметр: луч, тревога и сброс](https://arduin-arsenal.ru/lesson/osnovy/osnovy-trevozhest-perimetr-lazer/): Охрана периметра на лазерном луче: автомат охрана-тревога, фильтр 100 мс против пыли, сирена 1500 и 2200 Гц на millis, мигающий LED, кнопка сброса на D2. - [Двоичная система: как плата видит числа](https://arduin-arsenal.ru/lesson/osnovy/osnovy-dvoichnaya-sistema-bity/): Степени двойки и байт 0-255: bitRead() и сдвиг (x >> i) & 1, число с потенциометра A0 через map на шкалу из восьми светодиодов, разбор 0, 5, 127 и 255 по битам. - [Побитовые операции: И, ИЛИ, сдвиги и флаги](https://arduin-arsenal.ru/lesson/osnovy/osnovy-bitwise-and-or-sdvigi/): Шесть операторов над битами на практике: |= ставит флаг, &= ~ сбрасывает, ^= переключает, << сдвигает единицу; байт флагов устройства и бегущий огонёк 1 << i. - [Двоичные часы: время на восьми светодиодах](https://arduin-arsenal.ru/lesson/osnovy/osnovy-binarnye-chasy-8-led/): Двоичные часы на шкале: часы пятью битами, минуты пятёрками, кнопка листает показ, тик на millis(), завод времени через Serial.parseInt и разговор про RTC. - [Калькулятор: клавиатура 4x4 и LCD](https://arduin-arsenal.ru/lesson/osnovy/osnovy-kalkulyator-4x4-lcd/): Калькулятор на клавиатуре 4x4: цифры складываются в число, A-D задают операцию, итог и деление с остатком на LCD 16x2 по I2C, защита от деления на ноль. - [Терминал выбора: меню товаров и сумма](https://arduin-arsenal.ru/lesson/osnovy/osnovy-terminal-tovarov-4x4/): Касса на клавиатуре 4x4: таблица товаров в массиве, номер добавляет позицию, решётка печатает чек в Serial, итог и светодиод оплачено на D12. - [Ввод PIN: звёздочки на экране и смена кода](https://arduin-arsenal.ru/lesson/osnovy/osnovy-pin-vvod-zvezdochki/): PIN с клавиатуры 4x4: звёздочки на LCD, код в EEPROM с маркером первого запуска, три попытки и блокировка 30 секунд, смена кода с подтверждением. - [Функции-модули: прототипы, static и читаемый loop](https://arduin-arsenal.ru/lesson/osnovy/osnovy-funkcii-prototipy-static/): Зачем Arduino IDE сама дописывает прототипы функций, что помнит static внутри функции и почему loop из трёх вызовов читается как оглавление большого скетча. - [Пульт из Serial: switch по букве и число в придачу](https://arduin-arsenal.ru/lesson/osnovy/osnovy-serial-pult-switch/): Однобуквенные команды через Serial.read и switch по символу: фильтр переводов строки, число после буквы добирает parseInt, зажим constrain держит границы. - [Среднее против выбросов: сумма в long и медиана из трёх](https://arduin-arsenal.ru/lesson/osnovy/osnovy-shum-vybrosy-mediana/): Дрожь АЦП лечится в три приёма: сумма в long против переполнения, усечённое среднее из десяти чтений и медиана из трёх, через которую выброс пролетает мимо. - [Тернарный оператор и флаги: выбор в одну строку](https://arduin-arsenal.ru/lesson/osnovy/osnovy-ternarnyi-operator-flagi/): Тернарный оператор ?: выбирает значение одной строкой: ночник на флагах, инверсия режима кнопкой, связки и или не. Где тернарник уместен, а где вернуть if/else. - [Обмен значений: амперсанд и звёздочка без страшных слов](https://arduin-arsenal.ru/lesson/osnovy/osnovy-obmen-znacheniy-ssylki/): Почему функция без амперсанда молча не меняет переменные: обмен через ссылку и указатель, третья переменная, арифметический трюк и его граница переполнения. - [break и continue: выходим раньше, пропускаем лишнее](https://arduin-arsenal.ru/lesson/osnovy/osnovy-break-continue-cikly/): break выходит из цикла на первом совпадении, continue отбрасывает мусорный виток: поиск порога в журнале, фильтр пустых ячеек и честный выход из вечного while. - [int, long и unsigned: переполнение millis через 49 дней](https://arduin-arsenal.ru/lesson/osnovy/osnovy-int-long-unsigned-perepolnenie/): byte, int, long и unsigned long на Uno: сколько вмещает каждый тип, почему millis сворачивается через 49,7 дня и какой таймер переживёт переход через ноль. - [#define, const и enum: три способа завести константу](https://arduin-arsenal.ru/lesson/osnovy/osnovy-define-const-enum/): #define подставляет текст, const проверяет тип, enum строит список состояний. Разбираем на скетче ночника, что делает препроцессор, а что компилятор. - [Приведение типов и map(): куда девается дробная часть](https://arduin-arsenal.ru/lesson/osnovy/osnovy-prividenie-tipov-map-celochislennoe/): Целочисленное деление выбрасывает дробный хвост: почему raw*5/1023 прижимается к нулю, как map режет ступени и когда спасает приведение к float. - [Функции: параметры, возврат, свои команды](https://arduin-arsenal.ru/lesson/osnovy/funkcii-parametry-vozvrat/): Своя функция с параметрами blink(n, ms) и возвратом readAverage(pin): локальные переменные, прототипы до setup и почему определение ниже loop обычно прощается. - [Строки: char-массивы против String](https://arduin-arsenal.ru/lesson/osnovy/stroki-char-vs-string/): "текст" — char-массив с нулём в конце, String — класс с методами: где фрагментация кучи валит долгоживущий скетч на Uno и когда String допустим. - [switch и тернарный оператор: много веток без каши](https://arduin-arsenal.ru/lesson/osnovy/switch-ternarnyj-vetki/): switch по числу и символу с case, break и default, тернарный оператор cond ? a : b: выбираем ветку читабельно и не наступаем на забытый break. - [Таблицы значений: массивы данных вместо формул](https://arduin-arsenal.ru/lesson/osnovy/tablichnye-znacheniya/): Таблица сырых кодов АЦП в градусы вместо формулы: линейная интерполяция по 10 точкам, кривая свечи без sin и честный счёт байтов ОЗУ под int-таблицу. - [Битовые операции: &, |, <<, >> на живых примерах](https://arduin-arsenal.ru/lesson/osnovy/bitovye-operacii-start/): Маски на живых примерах: чтение val & (1 << n), установка и сброс битов, сдвиг как умножение на 2, упаковка двух байтов в int и ловушка знака 1 << 15. - [const против #define и стиль кода](https://arduin-arsenal.ru/lesson/osnovy/const-makrosy-stil/): #define подставляет текст до компиляции, const несёт тип и область видимости: ловушка 2*SUM без скобок, CAPS и camelCase, комментарии «почему» и Ctrl+T. - [Дребезг кнопки: надёжный антидребезг на millis()](https://arduin-arsenal.ru/lesson/osnovy/debounce-knopki/): Почему кнопка дребезжит 5–20 мс и насчитывает лишние нажатия: неблокирующий антидребезг на millis(), lastDebounceTime, интервал 20–50 мс и разбор тупиков. - [Переключатель на кнопке: toggle и счётчик нажатий](https://arduin-arsenal.ru/lesson/osnovy/knopka-toggle/): Выключатель на кнопке: toggle по фронту нажатия, переменная ledState, счётчик кликов и антидребезг на millis, без которого переключатель работает через раз. - [analogWrite и ШИМ: меняем яркость светодиода](https://arduin-arsenal.ru/lesson/osnovy/analogwrite-shim-yarkost/): ШИМ на Arduino: analogWrite и duty cycle на пальцах — плавная яркость светодиода, ШИМ-пины 3, 5, 6, 9, 10, 11, частота 490 Гц и разбор тупиков. - [RGB-светодиод на Arduino: смешиваем цвета из трёх каналов](https://arduin-arsenal.ru/lesson/osnovy/rgb-svetodiod-tsveta/): RGB-светодиод на Arduino: подключение общего анода и общего катода, три пина ШИМ 9/10/11, смешивание цветов analogWrite и разбор анодного тупика. - [Светодиодная шкала: бегущие огни на восьми светодиодах](https://arduin-arsenal.ru/lesson/osnovy/svetodiodnaya-shkala-begushchie-ogni/): Светодиодная шкала на Arduino: бегущие огни на восьми светодиодах через массив пинов int leds[8] и цикл for — индикатор уровня без копипасты и опечаток. - [Потенциометр: регулируем яркость светодиода поворотом ручки](https://arduin-arsenal.ru/lesson/osnovy/potenciometr-dimmer-map/): Потенциометр на Arduino: analogRead, map() из 0–1023 в 0–255 и плавный диммер светодиода через analogWrite — края ручки, constrain() и ШИМ-пины. - [Фоторезистор и делитель напряжения: автоматический ночник](https://arduin-arsenal.ru/lesson/osnovy/fotorezistor-nochnik/): Фоторезистор и делитель напряжения на Arduino: порог света, гистерезис против мигания и автоматический ночник на светодиоде — с расчётом плеч делителя. - [Термистор NTC: термометр на формуле Стейнхарта](https://arduin-arsenal.ru/lesson/osnovy/termistor-ntc-steinhart/): Термистор NTC на Arduino: из analogRead в омы, формула Стейнхарта с log() и настоящие градусы Цельсия в Serial — защита от обрыва и тупики float. - [Пьезозуммер: tone(), noTone() и звуковые сигналы](https://arduin-arsenal.ru/lesson/osnovy/piezozummer-tone/): Пьезозуммер на Arduino: beep через tone() и noTone(), сирена и двухтональная тревога, частоты от 31 Гц до писка парктроника и резистор 100 Ом на пине. - [Мелодии на зуммере: массивы нот и длительностей](https://arduin-arsenal.ru/lesson/osnovy/melodii-massivy-not/): Ноты для зуммера кодируем числами: массивы частот и длительностей, проигрыш мелодии циклом for, паузы нулевой нотой и разбор блокировки delay(). - [Массивы в Arduino: паттерны мигания и журнал показаний](https://arduin-arsenal.ru/lesson/osnovy/massivy-patterny-zhurnal/): Храним пять пинов в одном массиве, пишем паттерны мигания и журнал показаний со средним: индексация с нуля, обход for, грабли границ, сглаживание шума. - [Свои функции в скетче: раскладываем код по полочкам](https://arduin-arsenal.ru/lesson/osnovy/svoi-funkcii-v-sketche/): Копипаста трёх светодиодов ужимается в функцию blinkLed(pin, ms): анатомия функций, возвращаемые значения, локальные переменные и честные тупики. - [Первый скетч: мигаем светодиодом и понимаем setup()/loop()](https://arduin-arsenal.ru/lesson/osnovy/migaem-svetodiodom/): Зажигаем светодиод на Arduino Uno: разбираем setup() и loop() построчно, зачем нужен резистор 220 Ом, три грабли новичка и код сразу в симуляторе. ## Serial и отладка (https://arduin-arsenal.ru/section/serial/) Главный инструмент ардуинщика: выводим значения датчиков в Serial Monitor, читаем команды пользователя, отлаживаем логику без осциллографа. Уровень: beginner. Уроков: 65. Обновлён: 2026-09-22. - [Serial.parseInt и parseFloat: числа из монитора порта](https://arduin-arsenal.ru/lesson/serial/serial-parseint-chisla/): Serial.parseInt и parseFloat превращают цифры из монитора порта в числа: таймаут 1000 мс, неслучайные нули, минус внутри числа и диммер на analogWrite. - [Управление светодиодом из Serial Monitor](https://arduin-arsenal.ru/lesson/serial/upravlenie-svetodiodom-serial/): Управление светодиодом из Serial Monitor: команды on и off через readStringUntil, ветка else для опечаток, регистр букв и ловушка пустых команд. - [Связь двух Arduino по UART: команды и ответы](https://arduin-arsenal.ru/lesson/serial/svyaz-dvuh-arduino-uart/): Соединяем две Arduino крест-накрест: TX к RX и общий GND. Строим протокол ведущий-ведомый: команды, ответы OK и ERR, пинг и таймаут на ответ. - [Передача структур по UART: побайтовый обмен](https://arduin-arsenal.ru/lesson/serial/peredacha-struktur-uart/): Шлём struct целиком: Serial.write по адресу и sizeof, readBytes на приёме. Почему выравнивание, порядок полей и байт версии решают, доедут ли данные. - [Контрольная сумма: надёжный протокол поверх Serial](https://arduin-arsenal.ru/lesson/serial/kontrolnaya-summa-protokol/): Один перевёрнутый бит превращает pwm 64 в pwm 192 — и обе команды законны. Строим фрейм: заголовок, длина, контрольная сумма; ловим битые посылки. - [Разбор CSV-строк: strtok и atoi](https://arduin-arsenal.ru/lesson/serial/serial-strtok-atoi-csv/): Режем CSV-строку из порта: strtok с первым вызовом и NULL, почему он портит буфер, atoi и его молчаливый ноль. Код на char-массиве и модель резки в симуляторе. - [SerialEvent: асинхронная обработка входящих данных](https://arduin-arsenal.ru/lesson/serial/serial-serialevent-obrabotka-vhoda/): serialEvent зовётся ядром между итерациями loop — не прерывание. Как работает, почему delay глушит его, где не поддерживается и когда удобнее if в loop. - [Конфигуратор устройства: настройки через терминал](https://arduin-arsenal.ru/lesson/serial/serial-konfigurator-nastrojki-terminal/): Конфигуратор через терминал: глаголы set, show, save и defaulty, проверка диапазонов, эхо в журнале и сохранение настроек в EEPROM без перепрошивки платы. - [Почему UART глючит: провода, скорости и общий GND](https://arduin-arsenal.ru/lesson/serial/serial-uart-glitch-diagnostika/): Ловим битые байты в UART: общий GND, длина провода и скорость. Loopback-тест на SoftwareSerial, скрутка вместо хвостов и правило: длиннее полуметра — 9600 бод. - [Serial на ESP32 и Leonardo: отличия USB CDC](https://arduin-arsenal.ru/lesson/serial/serial-esp32-leonardo-usb-cdc/): Serial на Leonardo — это USB CDC, а UART зовут Serial1. У ESP32 три аппаратных порта: Serial2 на пинах 16 и 17. Скорости, автосброс, уровни 3,3 вольта. - [Итоговый проект: командный протокол для гирлянды](https://arduin-arsenal.ru/lesson/serial/serial-girlyanda-protokol-itog/): Итоговый проект: командный протокол для гирлянды. Словарь help, on, off, color N, status; ответы OK, ERR, UNKNOWN; кнопка как второй клиент протокола. - [Терминал с ANSI-кодами: цвета и экраны в Serial](https://arduin-arsenal.ru/lesson/serial/serial-ansi-cveta-ekrany/): Управляем терминалом с платы: ANSI-коды цветов, очистка экрана 2J и курсор домой H. Почему монитор Arduino IDE печатает коды текстом, а PuTTY красит. - [Кириллица в Serial: почему вместо букв кракозябры](https://arduin-arsenal.ru/lesson/serial/serial-kirillica-kodirovki/): Кириллица в serial: почему русская буква весит два байта в UTF-8, чем CP1251 отличается от KOI8-R и почему монитор порта превращает «Привет» в кракозябры. - [Arduino + Python: читаем данные порта на компьютере](https://arduin-arsenal.ru/lesson/serial/serial-python-pyserial/): Читаем данные порта Python-скриптом: pyserial, скорость как в Serial.begin, readline().decode() и split для CSV. Монитор держит порт — читатель один. - [MIDI через Serial: музыка на 31250 бод](https://arduin-arsenal.ru/lesson/serial/serial-midi-31250-bod/): MIDI — тот же UART, но на 31250 бод: Note On из трёх байт, ноты 0-127, middle C 60, DIN-5 через два резистора 220 Ом и оптопару 6N138, отладка в HEX. - [Двоичный протокол: маркеры, escaping и скорость](https://arduin-arsenal.ru/lesson/serial/serial-dvoichnyi-protokol/): Текст uroven=255 ест 11 байтов против одного 0xFF. Собираем пакет: маркер 0xAA 0x55, byte stuffing, контрольная сумма, таймаут ресинхронизации приёмника. - [Watchdog и Serial: последний лог перед перезагрузкой](https://arduin-arsenal.ru/lesson/serial/serial-watchdog-poslednij-log/): Watchdog сбросил зависшую плату, а лог пропал. Печать шага в Serial, флаг в EEPROM перед wdt_enable, причина после старта и грабля старого bootloader Nano. - [Лог в Excel: данные с порта в таблицу](https://arduin-arsenal.ru/lesson/serial/serial-excel-logger-port/): CSV-лог с Arduino в Excel: строка t,temp,hum раз в 2 секунды на millis, надстройка Data Streamer, разбор по разделителю и запятая против русской локали. - [Визуализация в Processing: график данных с платы](https://arduin-arsenal.ru/lesson/serial/serial-processing-vizualizaciya/): Протокол v:число и приёмник Processing на 20 строк: полоска уровня и график из потока платы, bufferUntil и readUntil, честная граница симулятора. - [Терминал minicom и screen: общение без IDE](https://arduin-arsenal.ru/lesson/serial/serial-minicom-screen-linux/): minicom и screen вместо IDE: apt install, скорость -b 9600, устройство /dev/ttyUSB0, выход Ctrl-A, группа dialout, занятый порт и меню прибора на Serial.read. - [Угадай число: игра в Serial Monitor](https://arduin-arsenal.ru/lesson/serial/serial-igra-ugadajka-chislo/): Игра «Угадай число» в мониторе порта: random(1,101), подсказки больше и меньше, счётчик попыток, лимит семь — 2 в седьмой степени больше ста, и мелодия победы. - [Калькулятор в Serial: два числа и операция](https://arduin-arsenal.ru/lesson/serial/serial-kalkulyator-dve-chisla/): Калькулятор в мониторе порта: строка 12 * 5 разбирается parseInt и read, switch по операции, защита от деления на ноль и живое переполнение 32767 + 1 = -32768. - [ШИМ-регулятор из Serial: команда set N](https://arduin-arsenal.ru/lesson/serial/serial-shim-regulyator-komand/): ШИМ-регулятор из Serial: протокол set 128 и stop, readStringUntil и parseInt, constrain 0-255, плавный разгон за 1,3 секунды и статус-эхо duty=128 (50%). - [Радиорозетки 433 МГц: RCSwitch включает свет из скетча](https://arduin-arsenal.ru/lesson/serial/serial-433mhz-rcswitch-rozetki/): Включаем радиорозетку из скетча: передатчик FS1000A на пин 10, RCSwitch и send(код, 24), сниффинг кода родного пульта и таблица дальности: 5 В, 12 В, антенна. - [Приёмник 433 МГц: ловим датчики погоды соседей](https://arduin-arsenal.ru/lesson/serial/serial-433mhz-datchiki-priem/): Приёмник XY-MK-5V на пин 2 и RCSwitch: отличаем сигнал от шума по длине битов, ловим чужие термометры и собираем температуру из трёх пакетов из пяти. - [Свой протокол: ретранслятор сигналов шлюза](https://arduin-arsenal.ru/lesson/serial/serial-433mhz-svoi-protokol-rett/): Свой протокол на 433 МГц: адрес, команда и XOR-чексумма в 32 бита, фильтр чужих адресов, три попытки передачи и честная граница канала без квитанций. - [Modbus RTU: опрос промышленного датчика](https://arduin-arsenal.ru/lesson/serial/serial-modbus-rtu-master/): Кадр Modbus RTU по байтам: запрос функции 0x03, регистр температуры 0x0000 с масштабом x0,1, CRC16 с полиномом 0xA001 младшим байтом вперёд и MAX485 с DE/RE. - [NMEA от GPS: разбираем $GPRMC без библиотеки](https://arduin-arsenal.ru/lesson/serial/serial-nmea-gps-parse/): Разбор $GPRMC без библиотеки: поля через запятую, статус A и V, перевод ddmm.mmmm в градусы, XOR-сумма после звёздочки и буфер UART против строки в 70 байт. - [DMX512: 512 каналов сценического света](https://arduin-arsenal.ru/lesson/serial/serial-dmx512-osveshchenie/): DMX512 на Arduino: 250000 бод и два стоп-бита, break 88 мкс, START-код, слоты каналов и дип-свитч адреса; пульт на потенциометре и честная оговорка про break. - [Протокол SET/GET: команды с параметром из монитора](https://arduin-arsenal.ru/lesson/serial/serial-set-get-slovar-komand/): Словарь команд для платы: SET задаёт порог числом из монитора, GET возвращает значение, незнакомый глагол получает отказ. Скетч, разбор строки и ловушки. - [Разделитель полей: led 1 on — три аргумента в одной строке](https://arduin-arsenal.ru/lesson/serial/serial-tri-polya-probel-razdelitel/): Одна строка монитора — три поля: устройство, канал, состояние. Режем по пробелам через indexOf и substring и смотрим, почему строка надёжнее parseInt. - [Эхо-протокол для отладки: ok и bad на каждую команду](https://arduin-arsenal.ru/lesson/serial/serial-eho-ok-bad-protokol/): Каждая команда получает ответ: ok с результатом или bad с причиной и эхо строки в скобках. Так различают непрошедшую команду, парсер и железо без второй платы. - [Serial Plotter: график показаний в реальном времени](https://arduin-arsenal.ru/lesson/serial/serial-plotter-grafik/): Serial Plotter рисует живой график показаний без железа: в симуляторе есть вкладка «Плоттер» — формат данных, два ряда и пауза для осмотра кривых. - [XOR и CRC8 руками: суммы, которые не обманешь](https://arduin-arsenal.ru/lesson/serial/serial-xor-crc8-rukami/): Считаем XOR-сумму по байтам пакета, находим слепое пятно из двух инверсий и закрываем его CRC8 на восьми сдвигах — той самой, что шлёт DS18B20 последним байтом. - [Binary против текста: считаем байты одной телеметрии](https://arduin-arsenal.ru/lesson/serial/serial-binary-vs-text-bajty/): Та же телеметрия текстом едет 13 байтами, кадром — шестью. Бухгалтерия при 9600 бод, Serial.write против print и разбор кадра по индексам без единой строки. - [Прошивка лога: CSV одной кнопкой](https://arduin-arsenal.ru/lesson/serial/serial-log-csv-knopka/): Лог-сессия одной кнопкой: флаг записи, метки millis, маркеры BEGIN и END отрезают блок для таблицы. Печатаем по ходу дела, не копим в RAM, разбираем в таблице. - [Две платы по Bluetooth: мастер и слейв без телефона](https://arduin-arsenal.ru/lesson/serial/serial-bluetooth-most-dve-platy/): Связка двух Uno по воздуху: роль AT+ROLE, фиксированный адрес AT+BIND, один пароль на обе платы, 9600 бод против 38400 в AT-режиме и враги канала рядом с Servo. - [DBG-макросы: отладка, которая исчезает в бою](https://arduin-arsenal.ru/lesson/serial/serial-dbg-makros-debug-sborka/): Печати за #ifdef DEBUG: в отладке — поток меток с millis, в бою — пустышка и ноль байтов. Флаг -D DBG_ON в PlatformIO и зелёная сборка перед выездом в поле. - [Чёрный ящик: кольцевой журнал и дамп после сбоя](https://arduin-arsenal.ru/lesson/serial/serial-chernyi-yashchik-ram-damp/): Кольцевой журнал на 16 записей в RAM с метками millis: события пишутся поверх старейших, дамп печатает последние минуты. Не EEPROM: ресурс 100 000 циклов. - [Свой Serial-протокол: фреймы с заголовком и CRC](https://arduin-arsenal.ru/lesson/serial/serial-frejmy-crc/): Кадр 0xAA-длина-груз-CRC8 и конечный автомат приёма без блокировок: полином 0x07 в десяти строках, потолок длины и ретрай, когда байт потерялся на 9600 бод. - [GPS через Serial: разбираем NMEA-строки](https://arduin-arsenal.ru/lesson/serial/serial-gps-nmea/): Разбор $GPGGA через indexOf и substring: перевод ddmm.mmmm в градусы, ловушка наивного parseFloat и построчное чтение против буфера на 64 байта при 9600 бод. - [SoftwareSerial: второй UART, ловушки и ограничения](https://arduin-arsenal.ru/lesson/serial/serial-softwareserial/): Что стоит за SoftwareSerial(2,3): байт глушит прерывания на миллисекунду, tone дёргается, millis отстаёт, listen() переключает порты, надёжный потолок — 19200. - [Свой логгер: уровни DEBUG/INFO/WARN и метки времени](https://arduin-arsenal.ru/lesson/serial/serial-urovni-logov/): Один вход LOG(level, msg) с меткой millis в начале строки: порог DEBUG и RELEASE, цена строки на 9600 бод и ловушка печати из прерывания — только флаги. - [Управление устройством из терминала: команды и аргументы](https://arduin-arsenal.ru/lesson/serial/serial-komandy-terminal/): Терминал как пульт устройства: парсер ON, OFF, SET 200 и STATUS, indexOf делит слово и число, atoi против parseInt и ловушка возврата каретки из режима NL+CR. - [Serial-плоттер: два сигнала на одном графике](https://arduin-arsenal.ru/lesson/serial/serial-plotter-signaly/): Два сигнала t и h в одной строке плоттера: подпись:значение через запятую, множители против разных масштабов, частота 20-50 Гц и залив графика от delay(1). - [Кракозябры в мониторе: скорости, биты и рассинхрон](https://arduin-arsenal.ru/lesson/serial/serial-baud-kodyaki/): Почему монитор порта показывает мусор: кадр 8N1 и бюджет такта ±2-3 %, ловушка кварца 8 против 16 МГц, таблица скоростей и дистанция проводов TTL. - [Serial.flush перед сном: почему хвост теряется](https://arduin-arsenal.ru/lesson/serial/serial-flush-pered-snom/): Сон сразу после println рвёт строку: передающий буфер 64 байта, время вылета на 9600 и 115200, flush перед deep sleep и чистка приёма до засыпания. - [Mega и второй порт: Serial1 для GPS, Serial для отладки](https://arduin-arsenal.ru/lesson/serial/serial-dva-porta-mega/): Четыре аппаратных UART Mega: пины Serial1 19/18, Serial2 17/16, Serial3 15/14; GPS на 9600 и отладка на 115200, ловушки перепутанных портов и имён. - [Serial.find и findUntil: дождаться подстроки в потоке](https://arduin-arsenal.ru/lesson/serial/serial-find-podstroka/): Serial.find и findUntil: ждём подстроку в потоке байтов. Что методы съедают из буфера, таймаут 1000 мс, ожидание OK от модуля и почему find блокирует loop. - [Float в Serial.print: точность, dtostrf и ловушка %f](https://arduin-arsenal.ru/lesson/serial/serial-float-dtostrf/): Float в Serial.print: сколько знаков после запятой оставлять, почему 2.675 печатается как 2.67, dtostrf для ровных колонок и молчаливая ловушка %f в sprintf. - [Serial.peek: подсмотреть байт и принять решение](https://arduin-arsenal.ru/lesson/serial/serial-peek-podglyadyvanie/): Serial.peek возвращает байт, не вынимая его из буфера: маршрутизация потока по первому байту, peek=-1 на пустом буфере и разница с read при разборе команд. - [Таблица данных: несколько переменных в одной строке](https://arduin-arsenal.ru/lesson/serial/serial-tablica-dannyh/): Собираем CSV-лог из нескольких переменных: разделители запятая и точка с запятой, локали Excel, шапка столбцов и живой график в Serial Plotter. - [readStringUntil: команды-строки от пользователя](https://arduin-arsenal.ru/lesson/serial/serial-readstringuntil-komandy/): Serial.readStringUntil читает строку до разделителя: таймаут 1000 мс, trim против невидимых символов, сравнение с эталоном и команды on, off, status. - [Текстовое меню в Serial: переключаем режимы](https://arduin-arsenal.ru/lesson/serial/serial-tekstovoe-menyu/): Печатаем меню в монитор порта, читаем выбор через readStringUntil и toInt и переключаем мигалку, дыхание и SOS прямо из консоли без перепрошивки платы. - [Буфер UART: почему данные теряются и что делать](https://arduin-arsenal.ru/lesson/serial/serial-bufer-uart/): Почему «on» с телефона превращалось в «o»: буфер приёма на 64 байта, переполнение из-за delay и три приёма надёжного чтения данных из монитора порта. - [Макрос F(): экономим RAM на строках](https://arduin-arsenal.ru/lesson/serial/makros-f-ekonomim-ram/): Длинные строки в кавычках копятся в двух килобайтах SRAM Uno и однажды ломают скетч. Оборачиваем литералы в F(), замеряем выигрыш в байтах и разбираем грабли. - [BIN, HEX, DEC: системы счисления в Serial.print](https://arduin-arsenal.ru/lesson/serial/bin-hex-dec-serial/): Второй аргумент Serial.print выводит байты в BIN, HEX, DEC и OCT. Битовые маски, ведущие нули, грабля 0x10 против 10 и цена String(x, BIN). Разбор байта 0xCA. - [Уровни логов: debug, info, warn и error](https://arduin-arsenal.ru/lesson/serial/urovni-logov/): Вводим в Serial-лог уровни debug, info, warn и error: единый формат с меткой millis(), двойное подтверждение для warn, фильтр уровней и цена спама на 9600 бод. - [Командный парсер: switch по строкам из порта](https://arduin-arsenal.ru/lesson/serial/komandnyi-parser-serial/): Пишем командный парсер для Serial: indexOf и substring режут строку, toInt достаёт параметр, switch разбирает коды команд. Ответы OK и ERR в терминал. - [SoftwareSerial: второй UART на любых пинах](https://arduin-arsenal.ru/lesson/serial/softwareserial-vtoroi-uart/): Второй UART на Uno через SoftwareSerial.h: RX и TX крест-накрест, честные скорости приёма до 38400, listen() и почему delay() в loop теряет байты порта. - [Bluetooth HC-05 через SoftwareSerial: беспроводной Serial](https://arduin-arsenal.ru/lesson/serial/hc-05-bluetooth-softwareserial/): HC-05 на SoftwareSerial: делитель 1 кОм и 2 кОм на RXD, пара с телефоном по PIN 1234, скорость 9600 и командный словарь из монитора — уже по воздуху. - [AT-команды HC-05: меняем имя, пин и скорость](https://arduin-arsenal.ru/lesson/serial/at-komandy-hc-05/): Режим AT у HC-05: KEY на 3,3 В и скорость 38400, хвост CR и LF, команды AT+NAME, AT+PSWD, AT+UART, сброс AT+ORGL — и конфигуратор настройки одним скетчем. - [Serial Monitor: первый разговор с платой](https://arduin-arsenal.ru/lesson/serial/serial-monitor-pervyj-razvon/): Разбираем Serial Monitor: зачем нужен Serial.begin, откуда берутся кракозябры при неверной скорости порта и как отправить первое сообщение с Arduino на экран. - [Читаем команды пользователя: Serial.available и Serial.read](https://arduin-arsenal.ru/lesson/serial/serial-available-i-read/): Serial.available и Serial.read пошагово: читаем байты, собираем команду ON/OFF, управляем светодиодом с клавиатуры и разбираем затыки, которые портят буфер. - [Форматированный вывод и отладка через Serial](https://arduin-arsenal.ru/lesson/serial/serial-otladka-logiki/): Форматированный вывод для отладки Arduino: печатаем переменные с метками millis(), приводим данные к таблице, находим место, где ломается логика скетча. ## Arduino IDE и первое подключение (https://arduin-arsenal.ru/section/ide/) Пошагово: скачать Arduino IDE, подключить Uno или Nano, залить первый скетч, разобраться с ошибками компиляции и библиотеками. Уровень: beginner. Уроков: 66. Обновлён: 2026-10-15. - [Arduino IDE 2: установка на Windows шаг за шагом](https://arduin-arsenal.ru/lesson/ide/arduino-ide-2-windows/): Пошаговая установка Arduino IDE 2 на Windows 10 и 11: официальный установщик, окно SmartScreen, три способа поставить среду, папка sketchbook и первый самотест. - [Arduino IDE на Linux: права на порт и правила udev](https://arduin-arsenal.ru/lesson/ide/arduino-ide-linux-dialout/): Ставим Arduino IDE на Linux без sudo: AppImage, Flatpak и пакет из репозитория, группа dialout против Permission denied, правила udev для ttyUSB0 и brltty. - [Драйвер CH340: плата Arduino не видна через USB](https://arduin-arsenal.ru/lesson/ide/driver-ch340-ne-vidna/): Клон Uno или Nano не появляется в портах: ставим CH341SER от WCH, разбираем диспетчер устройств, контрафактные чипы и ошибки avrdude при прошивке. - [Порт серого цвета: IDE не видит плату](https://arduin-arsenal.ru/lesson/ide/port-seryj-ide-ne-vidit-platu/): Почему в Arduino IDE серый пункт «Порт», когда вчера всё работало: диспетчер устройств, занятый COM-порт, экономия энергии USB и кабель — порядок проверки. - [Питаем Arduino без USB: батарейки и блоки питания](https://arduin-arsenal.ru/lesson/ide/pitanie-bez-usb-batarejki/): Питание Arduino без компьютера: крона 9 В и её просадка, батарейки AA в Vin и 5V, power bank с автоотключением, блок 9 В и арифметика нагрева стабилизатора. - [Чек-лист перед загрузкой: десять проверок новичка](https://arduin-arsenal.ru/lesson/ide/chek-list-pered-zagruzkoy/): Скетч не загружается или падает по sync: чек-лист из десяти проверок — плата, порт, компиляция, Serial-монитор, пины 0 и 1, имя папки и питание. - [Arduino Pro Mini: подключение через USB-TTL адаптер](https://arduin-arsenal.ru/lesson/ide/ide-pro-mini-usb-ttl-podklyuchenie/): Как прошить Arduino Pro Mini через USB-TTL адаптер: TX-RX крест-накрест, DTR для автосброса, выбор 5V/16MHz или 3.3V/8MHz и таблица против Nano и Uno. - [Голый ATmega328P на макетке: минимальная обвязка](https://arduin-arsenal.ru/lesson/ide/ide-golyj-atmega328-maketka/): Минимальная обвязка ATmega328P на макетке: кварц 16 МГц с конденсаторами 22 пФ, резистор 10 кОм на RESET, 100 нФ на питание и загрузчик через Arduino as ISP. - [Arduino CLI: компиляция и прошивка из терминала](https://arduin-arsenal.ru/lesson/ide/ide-arduino-cli-terminal-kompilyaciya/): Arduino CLI: установка, core install arduino:avr, compile --fqbn arduino:avr:uno, upload -p /dev/ttyUSB0 — прошивка из терминала и проверка всех скетчей циклом. - [Форматирование: Ctrl+T и правила читаемого скетча](https://arduin-arsenal.ru/lesson/ide/ide-formatirovanie-koda-stajl/): Автоформат Arduino IDE по Ctrl+T: отступы, имена в camelCase, константы заглавными, комментарии «почему». Скетч, читаемый и через полгода после написания. - [Методика отладки: симулятор → Serial → мультиметр](https://arduin-arsenal.ru/lesson/ide/ide-metodika-otladki-sim-serial/): Пирамида отладки: логика в симуляторе, Serial-метки, мультиметр на плате. Половинное деление кода, цена печати в миллисекундах и таблица «симптом → поиск». - [Своя библиотека: .h, .cpp и примеры за полчаса](https://arduin-arsenal.ru/lesson/ide/ide-svoya-biblioteka-shagi/): Мигалка без delay становится классом Lamp: заголовок с include guards, методы begin/on/off, keyword.txt с табами, папка examples и установка через ZIP. - [Монитор порта глубже: line ending и молчание parseInt](https://arduin-arsenal.ru/lesson/ide/ide-line-ending-parseint/): Дропдаун line ending решает, дойдёт ли число до parseInt: NL, CR, оба или ничего. Таймаут в 1000 мс, молчаливый ноль, кракозябры от скорости и эхо-протокол. - [Библиотека из .zip: папка libraries, версии и дубли](https://arduin-arsenal.ru/lesson/ide/ide-zip-biblioteka-versii-dubli/): Когда библиотеки нет в менеджере: архив в sketchbook, library.properties и версии, конфликт двух копий и предупреждение multiple libraries в логе компиляции. - [Резервная копия проекта: папка скетча и export binary](https://arduin-arsenal.ru/lesson/ide/ide-bekap-papka-export-binary/): Что входит в резервную копию ардуино-проекта: папка скетча, библиотеки из sketchbook, паспорт прошивки и export compiled binary для шитья без IDE. - [Отладчик IDE 2: точки останова и watch](https://arduin-arsenal.ru/lesson/ide/ide-debugger-breakpoints-watch/): Точки останова, панель VARIABLES и watch в Arduino IDE 2: почему Uno без внешнего щупа не отлаживается, когда отладчик сильнее печати в порт и где он врёт. - [Serial Plotter как осциллограф: скорость, масштаб, кривые](https://arduin-arsenal.ru/lesson/ide/ide-plotter-oscillograf-skorost-masshtab/): Плоттер как измерительный инструмент: бюджет кадров от скорости порта, autoscale и выбросы, три ряда в одном кадре и границы, где график перестаёт быть честным. - [Портативная IDE на флешке и версии плат](https://arduin-arsenal.ru/lesson/ide/ide-portable-flash-versions/): Переносим окружение: portable.txt у 1.8.x, ZIP-сборка 2.x и каталоги arduino-cli; понижаем ядро в карточке Boards Manager и фиксируем версию из терминала. - [Сторонние платы в IDE: URL пакета и менеджер плат](https://arduin-arsenal.ru/lesson/ide/ide-menedzher-plat-package-url/): Как IDE узнаёт о сторонних платах: URL пакета в настройках, менеджер плат, кэш индексов в Arduino15, лечение молчащего поиска и дубли из двух источников. - [Карты распиновки: pinout как рабочий инструмент](https://arduin-arsenal.ru/lesson/ide/ide-karta-raspinovki-pinout/): Как читать pinout-карты Uno, Nano и ESP32: цветовые зоны, машинная правда pins_arduino.h, минные пины ESP32 и карта под свою ревизию девкита. - [Схема платы: что нарисовано в официальном schematic](https://arduin-arsenal.ru/lesson/ide/ide-shema-platy-schematic/): Читаем официальный schematic платы: конденсатор DTR и авто-ресет при открытии порта, буфер светодиода пина 13, полифьюс 500 мА, 3V3 на 50 мА. - [Монитор порта в IDE 2: что реально доезжает до платы](https://arduin-arsenal.ru/lesson/ide/ide-monitor-porta-vvod-bajty/): Входящая сторона монитора: байты CR и LF за вашей строкой, хвосты в буфере, скорость порта как договор, parseInt против readString и смысл меток времени. - [Serial Plotter в IDE 2: серии, подписи и масштаб](https://arduin-arsenal.ru/lesson/ide/ide-plotter-serii-podpisi-masshtab/): Как плоттер делит строку на серии: один println — один такт, пары имя:значение против голых чисел, легенда и её поломки, общий масштаб рядов через map. - [Горячие клавиши и фишки IDE 2: скорость рук](https://arduin-arsenal.ru/lesson/ide/ide-goryachie-klavishi-fishki/): Загрузка по Ctrl+Enter и Ctrl+U, автозавершение, переходы Ctrl+P и Ctrl+Shift+O, темп-папка сборки — всё, что экономит сотни кликов за вечер. - [Отладчик Arduino IDE 2: точки останова на ESP32](https://arduin-arsenal.ru/lesson/ide/ide2-otladchik-tochki/): F5 и точки останова на ESP32 в IDE 2: какие платы умеют, watch и шаги, ловушка с millis и честное сравнение с Serial-отладкой — когда что спасает. - [Библиотека из .zip: когда Library Manager молчит](https://arduin-arsenal.ru/lesson/ide/biblioteka-iz-zip/): Add .ZIP Library и ручная распаковка в Documents/Arduino/libraries: структура папки, имя в #include, ловушка с папкой в архиве, когда брать версию с GitHub. - [Темы и шрифты Arduino IDE 2: глаза скажут спасибо](https://arduin-arsenal.ru/lesson/ide/ide2-temy-shrifty/): Тёмная тема, шрифт Ctrl+= и Ctrl+-, масштаб интерфейса, автосейв и проверка при сохранении — плюс таблица отличий от IDE 1.8.19, чтобы глаза сказали спасибо. - [Вкладки в скетче: раскладываем код по файлам](https://arduin-arsenal.ru/lesson/ide/sketch-vkladki-fajly/): Стрелочка справа сверху → New Tab: раскладываем скетч по вкладкам .h и .cpp, ловушка заголовка без include-гарда и порог, когда одной вкладки достаточно. - [ESP32 в IDE: разделы памяти и настройки сборки](https://arduin-arsenal.ru/lesson/ide/esp32-ide-particii/): Partition Scheme в Tools: куда уходит 4 МБ флеша ESP32, чем Huge APP отличается от Default, что дают Upload Speed и Core Debug Level — чем платите за место. - [Комментарии и автоформат: Ctrl+T спасает friendships](https://arduin-arsenal.ru/lesson/ide/ide-kommentarii-avtoformat/): Doc-комментарий над функцией, шапка скетча с датой правки и Ctrl+T перед коммитом: ловушка размытой истории правок и мнение, что единый стиль важнее красивого. - [IDE 2.x против 1.8.x: что реально изменилось в ежедневной работе](https://arduin-arsenal.ru/lesson/ide/ide-2x-protiv-1-8x-ezhednevka/): F12, автодополнение, монитор, отладчик: что меняется после переезда с 1.8.19 на 2.x, что переезжает без потерь и где старая среда всё ещё быстрее. - [Несколько плат и портов: два окна IDE, выбор платы в каждой, кто съел порт](https://arduin-arsenal.ru/lesson/ide/ide-dva-okna-dve-platy-port/): Uno на COM3, Nano на COM4: общий Tools в 1.8 и свой выбор в каждом окне в 2.x, монитор, занимающий порт, переезд номеров COM и ритуал проверки перед заливкой. - [IDE тормозит: кэш, версия, portable-папка, первый запуск и индексация](https://arduin-arsenal.ru/lesson/ide/ide-tormozit-kesh-indeksaciya/): Холодная сборка — минута, тёплая — секунды: кэш в temp, антивирус, вес платформ в Arduino15, индексы первого запуска, Clean compile и переносимость через CLI. - [Подключение Arduino Uno к компьютеру: первый раз](https://arduin-arsenal.ru/lesson/ide/podklyuchenie-uno-pervyj-raz/): Первое подключение Arduino Uno к компьютеру: кабель USB type B, светодиоды PWR и L, звук системы, строка в диспетчере устройств и диагностика молчания. - [Выбор платы и порта в Arduino IDE 2](https://arduin-arsenal.ru/lesson/ide/vybor-platy-i-porta/): Как Arduino IDE 2 понимает, куда шить: шапка окна, выпадающие списки, автодетект по VID/PID, ручной выбор COM-порта и что делать при сером списке. - [Загрузка скетча: кнопка Upload и что происходит внутри](https://arduin-arsenal.ru/lesson/ide/zagruzka-skecha-upload/): Что делает Arduino IDE при нажатии Upload: компиляция и размеры, avrdude, ресет через DTR, бутлоадер с окном в секунду и разбор сбоя not in sync. - [Горячие клавиши и палитра команд IDE 2.x: скорость без мыши](https://arduin-arsenal.ru/lesson/ide/ide-goryachie-klavishi-2x/): Палитра команд Ctrl+Shift+P и F1, переименование символа F2, поиск файла Ctrl+P, зум колесом и автосохранение: мой личный топ-5 связок против 1.8. - [Расширения IDE 2.x: что ставится, что бесполезно](https://arduin-arsenal.ru/lesson/ide/ide-rasshireniya-plaginy-2x/): Модель расширений Theia: файлы vsix, каталог Open VSX вместо магазина Microsoft, темы и языки из комплекта — и почему компиляцию расширения не чинят. - [Свой пункт в меню плат: boards.txt и местные определения](https://arduin-arsenal.ru/lesson/ide/ide-boards-txt-svoi-platy/): Где лежит boards.txt в Arduino15, зачем нужен свой вариант платы — клон на 8 МГц, фьюзы и флаги оптимизации — и почему оригинальный файл править нельзя. - [Скопировал код со статьи: ёлочки и невидимые пробелы](https://arduin-arsenal.ru/lesson/ide/ide-kod-so-stati-kavychki/): Код со статьи не собирается на строке, что выглядит верно: ёлочки, длинное тире, неразрывные пробелы — опознать байты-самозванцы и вычистить за минуту. - [Переустановка Arduino IDE: порядок и что не потерять](https://arduin-arsenal.ru/lesson/ide/ide-pereustanovka-sredy/): Что переживает переустановку среды: скетчбук в Документах и пакеты плат в Arduino15. Шесть шагов чистой установки и цена возврата платформ в минутах. - [Пустой скетч: очистить плату от старой прошивки](https://arduin-arsenal.ru/lesson/ide/ide-pustoj-skech-chistaya-plata/): Почему у платы нет кнопки «стереть», как заливка пустого скетча чистит flash за секунды и что при этом выживает: загрузчик, EEPROM — и отдельная история ESP32. - [Первый скетч на настоящей плате: от симулятора к железу](https://arduin-arsenal.ru/lesson/ide/pervyj-skech-na-platu/): Переносим мигалку из симулятора на Uno: выбор платы и порта, что происходит при загрузке, сверка ритма по монитору порта и три первых отказа новичка. - [Где лежат скетчи: структура папок Arduino](https://arduin-arsenal.ru/lesson/ide/sketchbook-struktura-papok/): Sketchbook, папка libraries и правило «папка равна файлу»: наводим порядок в скетчах Arduino, переносим проекты на новый компьютер и не теряем библиотеки. - [Менеджер библиотек: установка в один клик](https://arduin-arsenal.ru/lesson/ide/library-manager-odin-klik/): Ищем, ставим и обновляем библиотеки через Library Manager: версии, зависимости, куда падают файлы и когда всё же оправдан ZIP-архив. Пример — библиотека DHT. - [Установка библиотеки из ZIP-архива: когда нет интернета](https://arduin-arsenal.ru/lesson/ide/zip-biblioteka-oflajn/): Поставить библиотеку в Arduino IDE без интернета: Add .ZIP Library, ручная папка libraries, двойная вложенность, суффикс -master и проверка по примерам. - [Ошибки компиляции: читаем лог и находим строку](https://arduin-arsenal.ru/lesson/ide/oshibki-kompilyacii-chitaem-log/): Was not declared in this scope и expected ; — как устроен лог компилятора Arduino IDE, почему первое сообщение главное и где на самом деле сидит проблема. - [Ошибка avrdude: stk500_recv и другие проблемы загрузки](https://arduin-arsenal.ru/lesson/ide/avrdude-stk500-recv-diagnostika/): stk500_recv(): programmer is not responding — почему avrdude не видит плату: занятый порт, старый загрузчик Nano, кабель и лесенка диагностики за пять минут. - [Встроенные примеры IDE: File — Examples как учебник](https://arduin-arsenal.ru/lesson/ide/primery-file-examples/): File — Examples как бесплатный учебник: карта нумерованных папок, примеры библиотек, чтение в три прохода и упражнение «предскажи и сломай» в симуляторе. - [Настройки IDE: шрифт, тема, автосохранение и верификация](https://arduin-arsenal.ru/lesson/ide/nastroyki-ide-preferences/): Шрифт и тема, автосохранение, проверка после загрузки и подробный вывод: настраиваем Arduino IDE 2 так, чтобы среда ловила опечатки вместо вас. - [Монитор порта в IDE 2: фишки нового интерфейса](https://arduin-arsenal.ru/lesson/ide/monitor-porta-ide2/): Монитор порта в Arduino IDE 2: окончания строк, тайм-метки, автопрокрутка и фильтр. Командный пульт через parseInt и пары имя=значение без кракозябр. - [Arduino Nano: подключение и победа над Old Bootloader](https://arduin-arsenal.ru/lesson/ide/arduino-nano-old-bootloader/): Arduino Nano не грузится и avrdude пишет stk500_recv? Разбираем Old Bootloader, выбор процессора в IDE, драйвер CH340 и контрольный пинг для проверки порта. - [Arduino Mega 2560: когда пинов и памяти мало](https://arduin-arsenal.ru/lesson/ide/arduino-mega-2560-otlichiya/): Чем Mega 2560 отличается от Uno: 54 пина против 14, 8 КБ ОЗУ против 2 КБ, четыре UART. Когда плата действительно нужна, ловушки перехода и скетч с буфером. - [Arduino as ISP: одна плата прошивает другую](https://arduin-arsenal.ru/lesson/ide/arduino-as-isp-proshivka/): Arduino as ISP: прошиваем Nano или голый ATmega328P второй Uno. Скетч ArduinoISP, провода MOSI MISO SCK RESET, конденсатор на автосброс и Burn Bootloader. - [Bootloader: что это и как записать заново](https://arduin-arsenal.ru/lesson/ide/bootloader-zapis-zanovo/): Почему чип молчит по UART, что делает загрузчик после ресета и как записать bootloader заново через Arduino as ISP: провода, конденсатор, not in sync. - [ATtiny85: прошиваем мини-плату через Arduino IDE](https://arduin-arsenal.ru/lesson/ide/attiny85-proshivka-cherez-ide/): ATtiny85 через Arduino IDE и Uno as ISP: ядро ATTinyCore, запись фьюзов на 8 МГц, распиновка PB0–PB5 и почему заводская мигалка тикает в 8 раз медленнее. - [USBasp: внешний программатор, когда плат мало](https://arduin-arsenal.ru/lesson/ide/usbasp-vneshnij-programmator/): USBasp вместо Uno-программатора: лента 10-pin, красная полоса к контакту 1, драйвер через Zadig, джампер Slow SCK и заливка через программатор. - [Клон или оригинал Arduino: отличия и риски](https://arduin-arsenal.ru/lesson/ide/klon-ili-original-uno/): Чем клон Uno отличается от оригинала: CH340 против ATmega16U2, законность открытой схемы, реальные риски подделок и чек-лист приёмки свежей платы. - [ESP32 в Arduino IDE: добавляем плату через Boards Manager](https://arduin-arsenal.ru/lesson/ide/esp32-boards-manager-ustanovka/): Как добавить ESP32 в Arduino IDE: адрес пакета Espressif в Настройках, установка ядра в Boards Manager, выбор платы и лечение вечного Connecting. - [ESP8266 в Arduino IDE: настройка и выбор модуля](https://arduin-arsenal.ru/lesson/ide/esp8266-v-arduino-ide/): Настраиваем ESP8266 в Arduino IDE: пакет ESP8266 Community, выбор NodeMCU, D1 mini или Generic, прошивка ESP-01 через адаптер и единственный A0. - [PlatformIO против Arduino IDE: стоит ли переходить](https://arduin-arsenal.ru/lesson/ide/platformio-vs-arduino-ide/): PlatformIO в VS Code против Arduino IDE 2: скорость сборки, версии библиотек, ini-конфиг и переезд скетча. Честно: кому пора, а кому рано. Три строчки в ini. - [Онлайн-симуляторы и стенд: проверяем схему без железа](https://arduin-arsenal.ru/lesson/ide/onlajn-simulyatory-wokwi-stend/): Wokwi и Tinkercad: проверяем логику схемы в браузере до прихода железа. Что симулятор покажет честно, что сымает, и зачем физический стенд. Три лишних клика. - [Git для ардуинщика: бэкапим проекты правильно](https://arduin-arsenal.ru/lesson/ide/git-bekap-arduino-proektov/): Копии polivalka_final_2.ino не спасают: git init в папке скетча, первый коммит, .gitignore для сборок и секретов, приватный GitHub как бэкап. - [Arduino IDE: скачать, установить, подключить первую плату](https://arduin-arsenal.ru/lesson/ide/arduino-ide-ustanovka/): Как скачать Arduino IDE 2 на Windows, поставить драйвер CH340 для китайской Uno и победить серый пункт «Порт»: симптомы, лечение, первая проверка. - [Первый скетч в настоящей IDE: компиляция, загрузка, чтение ошибок](https://arduin-arsenal.ru/lesson/ide/pervyj-skech-v-ide/): Чем «Проверить» отличается от «Загрузить», как читать лог компилятора и что делать, когда avrdude пишет stk500_recv(): programmer is not responding. - [Библиотеки: менеджер, ZIP-архив, версии и конфликты](https://arduin-arsenal.ru/lesson/ide/biblioteki-v-ide/): Как ставить библиотеки через менеджер Arduino IDE и из ZIP-архива, куда они попадают на диске и почему код с форума не собирается с вашей версией. ## Макетирование и схемы (https://arduin-arsenal.ru/section/breadboard/) Как соединять компоненты без пайки: устройство макетки, цветовая маркировка резисторов, чтение принципиальных схем, типовые грабли сборки. Уровень: beginner. Уроков: 63. Обновлён: 2026-09-22. - [Макетная плата: как устроен breadboard внутри](https://arduin-arsenal.ru/lesson/breadboard/breadboard-shema-vnutri/): Что соединено под пластиком breadboard: столбцы по пять, шины с разрывом, канавка под DIP. Пределы лепестков и прозвонка платы пробником без мультиметра. - [Jumper-провода и перемычки: какие бывают и зачем](https://arduin-arsenal.ru/lesson/breadboard/jumper-provoda-i-peremychki/): Папа-папа, папа-мама, мама-мама: считаем концы цепи, а не провода. Длина и цвета, обжим, тест на выдёргивание и скетч-тестер срыва контакта. - [Светодиод на макетке: первая схема без пайки](https://arduin-arsenal.ru/lesson/breadboard/svetodiod-na-maketke/): Первая схема без пайки по узлам: LED, резистор 220 Ом, минусовая шина и GND. Полярность, ток 13,6 мА и маячок, который мигает на настоящей плате. - [USB-порт и ток: почему плата перезагружается](https://arduin-arsenal.ru/lesson/breadboard/usb-port-perezagruzka-platy/): Серва дёргается — плата уходит в перезагрузку. Лимит USB 500 мА, предохранитель на Uno, пиковые токи сервы и мотора: ищем просадку и разводим питание. - [Наводки и шум: почему датчики врут](https://arduin-arsenal.ru/lesson/breadboard/navodki-shum-datchiki/): Фоторезистор дрожит на 40 единиц, висящий вход ловит руку. Откуда шум в аналоговых входах: 50 Гц, провода, контакты — и фильтры: среднее, медиана, гистерезис. - [Итоговый проект: модуль питания для макетки](https://arduin-arsenal.ru/lesson/breadboard/modul-pitaniya-maketki-proekt/): Итоговый проект раздела: модуль питания из LM2596, диода, конденсаторов и тумблера. Чеклист проверок мультиметром под нагрузкой и скетч-монитор просадки. - [Конденсаторы: керамика, электролиты и маркировка 104](https://arduin-arsenal.ru/lesson/breadboard/breadboard-kondensatory-markirovka-vidy/): Как читать конденсатор за пять секунд: код 104 — это 100 нФ, 475 — 4,7 мкФ. Керамика против электролита, полярность бочонка и место каждого номинала. - [Стабилитрон: опорное напряжение и защита](https://arduin-arsenal.ru/lesson/breadboard/breadboard-stabilitron-zashchita/): Стабилитрон в обратном включении: 1N4733A держит 5,1 В, балластный резистор 220 Ом по расчёту, таблица номиналов и страховка входа АЦП от лишних вольт. - [RC-фильтр: превращаем ШИМ в аналоговое напряжение](https://arduin-arsenal.ru/lesson/breadboard/breadboard-rc-filtr-shim-analog/): Резистор 10 кОм и конденсатор 10 мкФ превращают ШИМ в постоянное напряжение: постоянная времени 0,1 с, половина duty — 2,5 В, компромисс с откликом. - [Предохранители: стеклянные и самовосстанавливающиеся](https://arduin-arsenal.ru/lesson/breadboard/breadboard-predohraniteli-pptc/): PPTC в разрыв плюсовой рейки макетки: hold 500 мА и trip 1 А, физика полимера с углём, отличия от стеклянной трубки и выбор номинала под бюджет проекта. - [Экранирование: оплётка, корпус и что реально помогает](https://arduin-arsenal.ru/lesson/breadboard/breadboard-ekranirovanie-shumy/): Три источника помех — 50 Гц, ШИМ соседей и WiFi. Экран на землю одним концом, витая пара на датчик и провод LDR в треть метра: числа и таблица симптомов. - [TP4056: литиевая банка в автономном проекте](https://arduin-arsenal.ru/lesson/breadboard/breadboard-tp4056-akkumulyator/): Клеммы B+/B- и OUT+/OUT- на TP4056, заряд 1 А по CC/CV, зачем нужна защита DW01 с 8205, boost MT3608 до 5 В и честный расчёт часов от банки 2000 мА·ч. - [74HC595: три пина вместо восьми](https://arduin-arsenal.ru/lesson/breadboard/breadboard-74hc595-tri-pina-vmesto-vosmi/): Как 74HC595 превращает три пина в восемь выходов: цикл DS-SHCP-STCP, обязательные перемычки MR и OE, карта корпуса DIP-16, каскад и бюджет тока в 70 мА. - [Мигалка на восьми светодиодах: байты вместо пинов](https://arduin-arsenal.ru/lesson/breadboard/breadboard-595-migalka-begushchaya-volna/): Гирлянда на 74HC595 одним байтом: shiftOut с MSBFIRST и LSBFIRST, резисторы под предел корпуса, бегущая волна на 1 << k и инверсия вычитанием из 255. - [Семисегментный индикатор через 74HC595: цифры одним байтом](https://arduin-arsenal.ru/lesson/breadboard/breadboard-595-seg7-cifry-bajty/): Цифры 0-9 на семисегментном индикаторе через 74HC595: таблица сегментов a-g, байты-паттерны, резистор на общем катоде и расчёт тока разряда на один регистр. - [Блок питания на DIN-рейку: заводские 5 В на клеммниках](https://arduin-arsenal.ru/lesson/breadboard/breadboard-din-reyka-blok-5v-klemmniki/): Заводской блок 5 В 10 А вместо самоделки: Mean Well на DIN-рейке, винтовые клеммники, общий GND с платой, разделение рельсы плюс и монитор просадки на A0. - [Проект на батарейках: 18650, power bank и сон](https://arduin-arsenal.ru/lesson/breadboard/breadboard-proekt-na-18650-powerbank-son/): Автономный проект без розетки: почему power bank выключается на малом токе, ветка от 18650 через MT3608, диод-развязка с USB и средний ток цикла сон-работа. - [Паяный шилд против макетки: когда пора переезжать](https://arduin-arsenal.ru/lesson/breadboard/breadboard-shild-protiv-maketki-pereezd/): Когда макетка врёт: контактное сопротивление, шумные шины и плавающие баги. Милливольтметр контакта, критерий переезда и выбор между перфбордом и шилдом. - [Хранение компонентов: конверты, слики и тестер LCR-T4](https://arduin-arsenal.ru/lesson/breadboard/breadboard-hranenie-komponentov-lcr-t4/): Разобранный набор превращается в свалку за неделю: конверты и слики с адресами, опись в текстовом журнале и тестер LCR-T4, опознающий деталь за две секунды. - [Реанимация макетки: усик, гнездо и чистка контактов](https://arduin-arsenal.ru/lesson/breadboard/breadboard-reanimaciya-maketki-usik-gnezdo/): Светодиод оживает от шевеления провода: перестановка строки, извлечение утопленного усика, спасение разбитого гнезда и чистка контактов изопропиловым спиртом. - [Рабочее место: коврик, антистатика, лупа и третья рука](https://arduin-arsenal.ru/lesson/breadboard/breadboard-rabochee-mesto-antistatika/): Стол со светом, лупа и третья рука против сборки на коленях; браслет через 1 МОм, коврик и влажность 40-60 процентов против зимней статики в киловольты. - [Реле-модуль: подключение к Uno](https://arduin-arsenal.ru/lesson/breadboard/breadboard-rele-modul-podklyuchenie-uno/): Три провода от Uno к реле: вход IN, VCC и GND, катушка 5 В и 71 мА, клеммники COM-НО-НЗ, перемычка JD-VCC и щелчок как проверка сборки за одну минуту. - [Активный LOW и оптопара: почему реле-модуль включается от LOW](https://arduin-arsenal.ru/lesson/breadboard/breadboard-rele-aktivnyj-low-optopara/): Почему реле-модуль включается от LOW: оптопара PC817, инверсия входа, подтяжка 10 кОм и три строки скетча, чтобы реле молчало при каждой прошивке платы. - [Реле и нагрузка 220 В: безопасность и монтаж](https://arduin-arsenal.ru/lesson/breadboard/breadboard-rele-220v-bezopasnost-montazh/): Нагрузка 220 В через реле без приключений: паспорт 10 А 250 В AC против 10 А 30 В DC, дуга, клеммники, термоусадка, УЗО с автоматом и правило выдернутой вилки. - [Транзистор как ключ: NPN и нагрузка на макетке](https://arduin-arsenal.ru/lesson/breadboard/npn-klyuch-nagruzka/): BC337 и 2N2222 как ключ: нагрузка в коллекторе, резистор базы 1 кОм, расчёт Ib = Ic/hFE с запасом, диод для реле и мотора и ловушка с общим GND. - [Диоды на макетке: защита от переполюсовки и выбросы](https://arduin-arsenal.ru/lesson/breadboard/diod-zashchita-perepoljusovka/): 1N4007 и Шоттки 1N5819 на макетке: диод в разрыв питания, цена 0,7 вольта, снаббер параллельно мотору и реле и почему диод не заменит резистор LED. - [Оптопара PC817: гальваническая развязка входа](https://arduin-arsenal.ru/lesson/breadboard/optocoupler-pc817/): PC817 на макетке: ИК-светодиод и фототранзистор, изоляция 2,5-5 кВ, вход 12 и 24 В через резистор, выход на INPUT_PULLUP и ловушка перепутанных ног. - [MOSFET-ключ: IRLZ44N и мощная нагрузка на 5-вольтовой логике](https://arduin-arsenal.ru/lesson/breadboard/mosfet-logicheskij-uroven/): IRLZ44N как логический ключ: почему IRL открывается от 5 В, а IRF540 просит 10, затвор через 200 Ом, подтяжка 10 кОм и 2,5 Вт на 10 А — радиатор. - [Драйвер L298N: два мотора, направление и тормоз](https://arduin-arsenal.ru/lesson/breadboard/l298n-dva-motora/): L298N на макетке: ENA и ENB с ШИМ 0-255, IN1-IN4 для направления и тормоза, честные 1,4-2,5 В падения на мосту и общая земля моторов и логики. - [3,3 В на макетке: AMS1117 и питание модулей](https://arduin-arsenal.ru/lesson/breadboard/ams1117-33-maketka/): Сколько реально даёт AMS1117-3.3: дропаут 1,1 В, конденсаторы 10 и 22 мкФ, 800 мА только с радиатором и бюджет потребителей от OLED до ESP8266. - [Рельсы питания макетки: разводка +5V/0V](https://arduin-arsenal.ru/lesson/breadboard/breadboard-shiny-pitaniya-razvodka/): Рельсы питания макетки: разрыв посередине у BB830, мосты-перемычки на обеих шинах, цветовой код красный-чёрный и прозвонка мультиметром — с таблицей ошибок. - [Конденсаторы поддержки: 100 нФ у каждого датчика](https://arduin-arsenal.ru/lesson/breadboard/breadboard-kondensatory-podderzhka/): Конденсаторы поддержки: 100 нФ X7R вплотную к ногам датчика, электролит 10-47 мкФ на шину, ловушка Y5V и полярность — таблица номиналов и симптомов просадки. - [Плохой контакт макетки: диагностика](https://arduin-arsenal.ru/lesson/breadboard/breadboard-oshibki-kontakta/): Плохой контакт макетки: дребезг механики против окисления лунок, растянутые пружины, детектор дребезга на millis, прозвонка мультиметром — таблица симптомов. - [Резисторы: цветовая маркировка и подбор номинала](https://arduin-arsenal.ru/lesson/breadboard/rezistory-podbor-nominala/): Читаем полоски на скорость, ловим путаницу ом и килоом, считаем мощность бочонка и добираем нестандартный номинал двумя резисторами. Подбор из ряда E12. - [Закон Ома для ардуинщика: считаем ток схемы](https://arduin-arsenal.ru/lesson/breadboard/zakon-oma-schitaem-tok/): Три формулы закона Ома на ардуино-примерах: считаем ток светодиода, бюджет питания от USB и узнаём, когда пину и порту становится плохо. Пример: LED и 220 Ом. - [Делитель напряжения: две детали и бесконечная польза](https://arduin-arsenal.ru/lesson/breadboard/delitel-napryazheniya-raschet/): Считаем выход делителя по формуле: понижаем сигнал для 3,3-вольтовых модулей, меряем 12 В входом АЦП и обходим подводный камень нагрузки. Пример: 30 и 10 кОм. - [Две макетки как один стенд: шины без сюрпризов](https://arduin-arsenal.ru/lesson/breadboard/breadboard-dve-maketki-shiny/): Соединение двух макеток в один стенд: мост GND ставим первым, +5V вторым, пара Dupont держит до 1 А, электролит на дальней макетке и 0,1-0,3 В на мосте. - [Сколько держит лунка: ток, нагрев и пределы макетки](https://arduin-arsenal.ru/lesson/breadboard/breadboard-tok-lunok-nagrev/): Пределы макетки по току: лунка держит около 1 А, шина — ряд целиком, USB — 500 мА; просадка 0,3-0,8 В даёт глюки платы, тест мультиметром под нагрузкой. - [Макетка не разъезжается: фиксация и транспорт проекта](https://arduin-arsenal.ru/lesson/breadboard/breadboard-fiksatsiya-transport/): Фиксация макетки: скотч к фанерке, винты через отверстия, резиновый коврик; разборка: снять питание, фото схемы, крупные детали отдельно; хранение без пыли. - [Чтение принципиальных схем: обозначения и соединения](https://arduin-arsenal.ru/lesson/breadboard/shemy-oboznacheniya-i-uzly/): Алфавит схем: резистор прямоугольником и зигзагом, катод диода, земля-символ, узел-точка. Переводим принципиальную схему в монтаж на макетке без ошибок. - [GND и общий провод: почему всё стекает в одну точку](https://arduin-arsenal.ru/lesson/breadboard/gnd-obshchij-provod-oshibki/): Земля как опорный ноль схемы: общий GND для датчика с вторым питанием, падение на минусовом проводе и скетч-детектор плавающего минуса. Правило одной земли. - [Шины питания макетки: 5V, 3.3V и полярность](https://arduin-arsenal.ru/lesson/breadboard/shiny-pitaniya-maketki-polyarnost/): Красная и синяя рейки, 5V, 3.3V и VIN с их лимитами, полярные детали и ритуал проверки перед включением: питание по макетке без переполюсовок. - [Грабли макетки: плохой контакт, обрыв, перегрев](https://arduin-arsenal.ru/lesson/breadboard/gabli-maketki-plohoj-kontakt/): Схема на макетке то работает, то молчит. Диагностируем плохой контакт, обрыв и перегрев без осциллографа — глазами, шевелением и прозвонкой узлов. - [Конденсатор: сглаживаем питание и фильтруем шум](https://arduin-arsenal.ru/lesson/breadboard/kondensator-filtr-pitaniya/): Почему плата перезагружается при щелчке реле и дёргается серво: ставим электролит 470 мкФ на шину и керамику 100 нФ у ножек — считаем ёмкость по провалу. - [Диод: полярность, падение напряжения и защита](https://arduin-arsenal.ru/lesson/breadboard/diod-polyarnost-i-zashchita/): Полоска на корпусе — катод: читаем диод, считаем падение 0,7 В и ставим защиту от переполюсовки и выбросов мотора. Стенд с ручкой и светодиодом за диодом. - [Транзистор NPN как ключ: слабый пин включает нагрузку](https://arduin-arsenal.ru/lesson/breadboard/tranzistor-npn-klyuch-2n2222/): 2N2222 как ключ: эмиттер в GND, база через 470–1000 Ом, диод маховика мотору. Почему мотор убил пин Arduino и как 20 мА включают 500 мА нагрузки. - [MOSFET-ключ: включаем ленту и мотор от пина](https://arduin-arsenal.ru/lesson/breadboard/mosfet-irf520-klyuch-nagruzka/): MOSFET-модуль IRF520: затвор не берёт ток пина, но требует 10 В для полного открытия. Логический IRLZ44N, pull-down, ШИМ-диммер ленты и разгон мотора. - [3.3 вольта для модулей: стабилизатор AMS1117](https://arduin-arsenal.ru/lesson/breadboard/ams1117-stabilizator-3-3v/): AMS1117-3.3 на макетке: лимит пина 3.3V — 50 мА, dropout 1,1 В, тепло P=(5−3,3)×I. Зоны 5 и 3,3 вольта, делители сигнала, питание nRF24 и SD. - [Внешнее питание макетки: батарейки, аккумы, блоки](https://arduin-arsenal.ru/lesson/breadboard/vneshnee-pitanie-maketki/): Поливалка на кроне перезагружалась каждое утро. Четыре входа питания на Uno, честная ёмкость батареек и аккумов, бюджет тока и сторож просадки. - [Понижающий преобразователь: 12 вольт в 5 без перегрева](https://arduin-arsenal.ru/lesson/breadboard/lm2596-ponizhayushchij-preobrazovatel/): Откуда на стабилизаторе 3,5 Вт тепла при 12 вольтах и почему LM2596 остаётся холодным. Настройка подстроечником, замер под нагрузкой, стенд с сигнализацией. - [Мультиметр: напряжение, ток и прозвонка](https://arduin-arsenal.ru/lesson/breadboard/multimetr-napryazhenie-tok-prozvonka/): Ночник молчал, а живую батарейку я списал: мерил в режиме тока. Три режима мультиметра, гнездо 10А, прозвонка обрывов и поиск разрыва по вольтам. - [Короткое замыкание: что происходит и как защититься](https://arduin-arsenal.ru/lesson/breadboard/korotkoe-zamykanie-zashchita/): Что происходит в макетке при коротком замыкании: закон Ома, предохранитель Uno на 500 мА, реакция USB-порта и ритуал проверки до подачи питания. - [Бюджет тока проекта: считаем потребление заранее](https://arduin-arsenal.ru/lesson/breadboard/byudzhet-toka-proekta/): Бюджет тока до сборки: потолки USB и стабилизатора, таблица типовых потребителей от дальномера до серво, запас 30 процентов и Serial-калькулятор в симуляторе. - [Пайка для ардуинщика: когда макетки уже мало](https://arduin-arsenal.ru/lesson/breadboard/payka-kogda-maketka-malo/): Когда макетку меняет паяльник: набор на 40 Вт, правило трёх секунд, признаки холодной пайки, тренажёр тайминга стыка и прозвонка после сборки. - [Перманентный монтаж: перфорированная плата и шилды](https://arduin-arsenal.ru/lesson/breadboard/perfboard-permanentnyj-montazh/): Как перенести рабочую схему с макетки на перфорированную плату: виды плат, порядок монтажа, ловушка дорожек под панелью и канальный тест после пайки. - [Шилды Arduino: когда платы расширения удобны](https://arduin-arsenal.ru/lesson/breadboard/shildy-platy-rasshireniya/): Что даёт форм-фактор шилда, какие платы расширения популярны, как читать карту пинов и почему пять кнопок LCD Keypad сидят на одном аналоговом входе. - [Клеммники, разъёмы, Dupont: надёжные соединения](https://arduin-arsenal.ru/lesson/breadboard/klemmniki-razemy-dupont-soedineniya/): Соединения для самодельного прибора: клеммники на силовые линии, Dupont на сигналы, JST на аккумуляторы. Дельта-тест под нагрузкой и счётчик дребезга. - [Сечения проводов: какой ток выдержит линия](https://arduin-arsenal.ru/lesson/breadboard/sechenie-provoda-tok/): Считаем сопротивление медной линии: 0,0175 Ом·мм²/м, формула просадки, таблица сечений для 12 В на 1–5 метров. Почему перемычка 0,13 мм² не для питания. - [Со схемы на макетку: переносим проект по шагам](https://arduin-arsenal.ru/lesson/breadboard/so-shemy-na-maketku/): Перенос схемы на макетку по шагам: нетлист, минусовая шина, якорная деталь, питание последним. Почему плохой контакт маскируется под сбой в программе. - [Fritzing и EasyEDA: рисуем схему и плату](https://arduin-arsenal.ru/lesson/breadboard/fritzing-easyeda-shema-plata/): Fritzing для макетки в картинках, EasyEDA для схемы и заказа платы: нетлист, footprints, DRC, Gerber. Как не заказать плату с шагом выводов не тем. - [Макетная плата изнутри: дорожки, рейки и как не закоротить питание](https://arduin-arsenal.ru/lesson/breadboard/breadboard-kak-polzovatsya/): Как устроена беспаечная макетка: шаг 2,54 мм, рейки питания, узлы. История светодиода, молчавшего из-за одной дорожки, и защита от короткого замыкания. - [Резисторы: цветовой код, номиналы и делитель напряжения](https://arduin-arsenal.ru/lesson/breadboard/rezistory-cvetovoj-kod/): Цветовая маркировка резисторов по кольцам, ряд номиналов E12, расчёт резистора для светодиода и делитель напряжения для фоторезистора на аналоговый вход. - [Читаем схемы: от принципиальной схемы к живой макетке](https://arduin-arsenal.ru/lesson/breadboard/chitaem-shemy/): Учимся читать принципиальные схемы: обозначения резистора, светодиода, GND и VCC, узлы и точки. Собираем кнопку с подтяжкой и ловим плавающий вход. ## Продвинутая платформа (https://arduin-arsenal.ru/section/prodvinutye/) Всё, что отличает новичка от уверенного ардуинщика: неблокирующие задержки, прерывания, ШИМ, таймеры, экономия памяти и сторожевой пёс. Уровень: intermediate. Уроков: 66. Обновлён: 2026-09-22. - [PROGMEM и память: куда уходят 2 килобайта](https://arduin-arsenal.ru/lesson/prodvinutye/progmem-i-pamyat/): Почему Uno зависает на длинных текстах: Flash 32 КБ, SRAM 2 КБ, EEPROM 1 КБ. Что кладут в PROGMEM, как считать freeRam и почему String() ест ОЗУ. - [PORTB и DDRB: прямой доступ к портам](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-porty-napryamuyu/): PORTB и DDRB напрямую: один такт против 5 мкс digitalWrite, таблица пинов Uno и портов, битовые маски, инверсия XOR и грабля с затёртым Serial. - [Шум АЦП: скользящее среднее и фильтры](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-filtr-adc-srednee/): Шум младших бит АЦП лечится фильтрами: наивное среднее, скользящее окно с кольцевым буфером и EMA в одну переменную — цена каждого в мс, байтах и секундах. - [Кнопка как автомат состояний: клик, удержание, двойной клик](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-knopka-avtomat-sostoyanij/): Одна кнопка — три команды: автомат состояний на switch с millis, тайминги 600 и 250 мс, клик, двойной клик и удержание — по одному событию на жест. - [Переполнение millis: 49 дней и почему это не проблема](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-millis-perepolnenie-49-dnej/): Почему millis() проходит через максимум раз в 49,7 суток и почему разность millis() - start не боится перехода: пример с числами и ловушка millis() > start + N. - [Антидребезг в прерывании: ISR, которая не врёт](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-antidrebezg-preryvanie-isr/): Дребезг кнопки прямо в прерывании: почему в ISR нельзя delay и Serial, отсечка по millis внутри обработчика, флаг и подтверждение digitalRead в основной петле. - [FreeRam: измеряем память и ловим утечки](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-freeram-utechki-stroki/): freeRam() через __heap_start и __brkval, метод дельты для ловли утечек, сколько байт съедает String-склейка за минуту и когда String безвреден на Uno и ESP32. - [Шина SPI: четыре провода и ни секунды лишнего](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-spi-osnovy-shina/): Шина SPI на Uno: линии MOSI, MISO, SCK и CS на пинах 11, 12, 13, 10, beginTransaction с тактом 8 МГц, transfer() и таблица сравнения SPI, I2C и UART. - [74HC595 через аппаратный SPI: в 100 раз быстрее shiftOut](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-spi-74hc595-bystree/): 74HC595 на аппаратном SPI: DATA на D11, CLOCK на D13, LATCH на D10, SPI.transfer против shiftOut — байт за микросекунды, замер micros() и каскад двух чипов. - [MAX7219: матрица 8x8 по SPI без библиотеки](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-spi-max7219-matrica/): MAX7219 по SPI без библиотеки: кадры из двух байтов, регистры яркости 0-15, scanlimit и shutdown, функция send() через transfer и пиксель по строке и столбцу. - [Свой класс Button: антидребезг как объект](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-klass-knopka-oop/): Свой класс Button: антидребезг и фронты в объекте на девять байт, массив из трёх кнопок в цикле и ноль пар глобальных на каждую кнопку пульта. - [Константы: #define против const против constexpr](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-const-define-constexpr/): #define против const против constexpr: подстановка до компилятора, RAM или immediate на AVR, размеры массивов при сборке и enum для состояний. - [Рефакторинг: длинный скетч раскладываем по функциям](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-refaktoring-dlinnogo-skecha/): Рефакторинг на живом примере: loop() из 46 строк превращаем в шесть вызовов, глобальные — в параметры, магические числа — в константы, состояния — в enum. - [Дребезг изнутри: что происходит в контакте за 20 миллисекунд](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-drebezg-mehanika-kontakta/): Почему контакт дребезжит 10-20 мс, сколько насчитывает сырой счётчик нажатий против чистого и почему delay(200) глушит скетч сильнее, чем сам дребезг. - [Четыре способа антидребезга: delay, millis-окно, Bounce2 и RC-фильтр](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-antidrebezg-chetyre-sposoba/): Четыре способа антидребезга рядом: delay, окно на millis, библиотека Bounce2 и RC-фильтр из двух деталей — цена каждого в строках кода, петлях и пинах. - [Короткое и длинное нажатие: клик переключает, удержание меняет режим](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-korotkoe-dlinnoe-nazhatie/): Клик включает свет, удержание две секунды меняет режим: автомат кнопки с отменой клика, порогом 2000 мс и обратной связью — без двойных срабатываний. - [Прямая работа с портами: PORTB/PINB вместо digitalWrite](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-pinb-pachka-vhodov/): Восемь входов одним чтением PINB: атомарный снимок против пачки digitalRead, честный замер тактов, инверсия подтяжки XOR-маской и ловушка занятых D0-D1. - [Битовые операции: сдвиги, маски, поразрядные трюки](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-bitovaya-karta-flagov/): Битовая карта вместо массива bool: 100 зон в 13 байтах RAM и EEPROM, int как 16 флагов, подсчёт единиц трюком Кернигана и ловушка 1 << 15 на знаковом int. - [Своя библиотека Arduino: .h, .cpp, keywords.txt](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-biblioteka-iz-klassa/): Класс Button переезжает в библиотеку: Knopka.h и Knopka.cpp, guards, три диагностики компилятора, begin() против конструктора глобального объекта, keywords.txt. - [Режимы сна ATmega328P: idle, power-down и пробуждение прерыванием](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-sleep-idle-pwrdown/): Idle и power-down по-честному: что остаётся тикать, будильник по INT0, токи 4,6 мА против 6 мкА у чипа и почему спящая Uno всё равно ест десятки миллиампер. - [Watchdog как будильник: сон по кругу и ловушка вечной перезагрузки](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-watchdog-budilnik-bootloop/): Watchdog как будильник: сон по 8 секунд без перезагрузки через бит WDIE, интервалы WDTO, вечный ребут из-за долгого setup и четыре правила спасения скетча. - [Медленнее — дешевле: CLKPR, PRR и отключение периферии](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-clkpr-pitanie-periferii/): Делитель CLKPR режет ток пропорционально частоте, PRR глушит ADC и таймеры, BOD экономит 20 мкА во сне — цена в скорости, Serial и millis страдают первыми. - [Конечный автомат в скетче: enum-состояния и switch-case вместо флагов](https://arduin-arsenal.ru/lesson/prodvinutye/state-machine-enum-switch/): Автомат на enum и switch: состояния инкубатора, действия на входе в состояние, журнал переходов в Serial и три признака того, что флагам пора в утиль. - [F()-макрос и PROGMEM: строки во флеше, а не в RAM](https://arduin-arsenal.ru/lesson/prodvinutye/f-makros-progmem-stroki/): Почему литерал в Serial.print копируется в RAM при старте, как F() читает строку из флеша по байту, сколько возвращают двадцать строк и замер freeRam. - [Struct и указатели на функции: таблица команд в скетче](https://arduin-arsenal.ru/lesson/prodvinutye/struct-ukazateli-funkcij-komandy/): Диспетчер Serial-команд на struct с указателем на функцию: новая команда за одну строку таблицы, справка help, которая пишется сама, и цена String-имён в RAM. - [TimerOne: прерывание по таймеру и точный такт](https://arduin-arsenal.ru/lesson/prodvinutye/timerone-tochnyj-takt/): Ровный такт опроса 100 мс на TimerOne: initialize и attachInterrupt, что оставить в ISR, 16 бит и шаг 4 мкс, конфликт с Servo и ШИМ пинов 9 и 10. - [Кольцевой буфер: прерывание пишет, loop читает](https://arduin-arsenal.ru/lesson/prodvinutye/kolcevoj-bufer-irq/): Кольцевой буфер на head и tail: ISR пишет однобайтовые события, loop читает в порядке прихода, маска 0x0F вместо деления, политика при переполнении. - [PROGMEM-таблицы: строки и массивы во флеше](https://arduin-arsenal.ru/lesson/prodvinutye/progmem-tablicy-stroki/): Таблицы строк в PROGMEM: pgm_read_word и strcpy_P, Serial-меню, буфер под кириллицу, 2 КБ RAM против 32 КБ флеша и мусор от println по флеш-указателю. - [Watchdog: проснуться после зависания и посчитать сбои](https://arduin-arsenal.ru/lesson/prodvinutye/watchdog-schetchik-sboev/): Watchdog как страховка от зависания: wdt_enable(WDTO_8S) и wdt_reset в loop, флаг причины MCUSR, счётчик сбоев в EEPROM и ловушка ребутов каждые 8 секунд. - [tone() и таймеры: кто с кем конфликтует](https://arduin-arsenal.ru/lesson/prodvinutye/tone-tajmery-konflikty/): tone() занимает Timer2 и глушит ШИМ на пинах 3 и 11, Servo.h забирает Timer1: таблица занятости таймеров, ловушка сирены с сервоповоротом и два рабочих решения. - [Своя частота ШИМ: таймерные прескалеры](https://arduin-arsenal.ru/lesson/prodvinutye/pwm-svoja-frekvenciya/): Заводские 490 и 976 Гц и почему они гудят: вся лестница прескалеров, строка TCCR0B на 62,5 кГц для пинов 5 и 6 и ловушка с millis, уехавшим в 64 раза. - [Планировщик задач на millis(): три таймера в одном loop](https://arduin-arsenal.ru/lesson/prodvinutye/planner-zadach-millis/): Один loop и три задачи с разными периодами: массивы PERIODY и lastRun, цена задач в микросекундах, джиттер и правило короткого периода. Периоды 250/500/5000. - [Кнопки и мигалки вместе: кооперативный цикл без блокировок](https://arduin-arsenal.ru/lesson/prodvinutye/kooperativnyi-cikl/): Сигнализация без delay: антидребезг, маяк и зуммер в одном кооперативном цикле. Три двери, которыми закрывается коридор loop, и хвосты состояния. - [micros() и точные замеры: микросекунды в проекте](https://arduin-arsenal.ru/lesson/prodvinutye/micros-tochnye-zamery/): Шаг micros() — 4 мкс, переполнение через 71,6 минуты: меряем эхо HC-SR04 через pulseIn, считаем сантиметры и находим пределы разрешения. Таймаут до 1000 мс. - [Timer1 в CTC-режиме: точный период на 16 битах](https://arduin-arsenal.ru/lesson/prodvinutye/timer1-ctc-tochnyj-period/): Timer1 в CTC через регистры TCCR1B и OCR1A: 16-битная граница даёт тик ровно раз в секунду. Таблица предделителей, порядок записи 16 бит и ловушка Servo.h. - [Программный ШИМ: яркость на пине без тильды](https://arduin-arsenal.ru/lesson/prodvinutye/shim-programmnyj-lyuboj-pin/): Все шесть ШИМ-пинов Uno разобраны — делаем программный ШИМ на обычном пине: Timer2 в CTC, фаза и duty в прерывании, честная цена в тактах процессора. - [Частотомер на прерывании: герцы и обороты](https://arduin-arsenal.ru/lesson/prodvinutye/chastotomer-okno-oboroty/): Считаем импульсы тахо-выхода вентилятора за окно в секунду: volatile-счётчик, атомарное чтение, перевод в герцы и об/мин, ловушки CHANGE и дребезга. - [Bandgap 1,1 В: скрытый вольтметр Arduino](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-bandgap-vcc-izmerenie/): Измеряю собственное VCC через внутреннюю опору 1,1 В: формула 1023·1,1/raw, калибровка в EEPROM, порог «пора менять батарею» и грабли analogReference. - [map() и нелинейные шкалы: кривая отклика](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-map-nelinejnye-shkaly/): map() целочисленный и потолок: квадратная кривая яркости v*v/255, логарифм громкости таблицей, обёртка safeMap с constrain, инверсия шкалы и разбор чисел. - [randomSeed: откуда взять настоящее зерно](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-randomseed-zerno/): Дефолтный random() повторяет серию после ресета: зерно из шума A0 за 7 замеров, микс с millis() и EEPROM-счётчиком, случайные интервалы для умного дома. - [Аппаратный счётчик T1: импульсы без прерываний](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-schetchik-t1-vneshnij/): Считаю импульсы с пина T1 регистрами: TCCR1B = 111, счёт до 65535 и переполнение, чтение TCNT1, лимит прерываний и когда attachInterrupt уже не тянет. - [Charlieplexing: 6 светодиодов на 3 пинах](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-charlieplexing-svetodiody/): Зажигаю 6 светодиодов на 3 пинах: tri-state Hi-Z, смена направления пина на лету, мультиплексирование с инерцией зрения, цена сквозного тока и фазы кадра. - [Ёмкостная кнопка без библиотеки: заряд и порог](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-emkostnaya-knopka-bez-biblioteki/): Делаю ёмкостный сенсор сам: разряд обкладки, замер времени заряда циклом digitalRead, порог касания, автокалибровка по скользящему минимуму. - [Энкодер на прерываниях: считаем щелчки без потерь](https://arduin-arsenal.ru/lesson/prodvinutye/enkoder-ec11-preryvaniya/): Подключаем EC11 к пинам 2 и 3, ловим фронты на attachInterrupt и декодируем квадратурный сигнал таблицей переходов: направление и щелчки без потерь. - [Таймеры ATmega328: обзор Timer0, Timer1, Timer2](https://arduin-arsenal.ru/lesson/prodvinutye/tajmery-atmega328-obzor/): Карта таймеров Uno: Timer0 крутит millis() и ШИМ на 5 и 6, Timer1 — Servo и пины 9/10, Timer2 — tone(). Предделители, разрядность и конфликты библиотек. - [Прерывание по таймеру: точный тик через регистры](https://arduin-arsenal.ru/lesson/prodvinutye/preryvanie-po-tajmeru-ctc/): Регистры TCCR2A, OCR2A и TIMSK2: Timer2 в CTC-режиме тикает ровно 1000 раз в секунду. Свой счётчик миллисекунд и мигалка, не зависящая от loop(). - [Библиотека TimerOne: таймерные прерывания без регистров](https://arduin-arsenal.ru/lesson/prodvinutye/timerone-preryvaniya-bez-registrov/): TimerOne за две строки: initialize и attachInterrupt, период в микросекундах от 1 до 8,3 млн, своя функция на тик, пауза и запуск, конфликт с Servo.h. - [Плавное включение света: фейдер на ШИМ без delay](https://arduin-arsenal.ru/lesson/prodvinutye/fader-shim-plavnyi-svet/): Фейдер без блокировок: цель и текущая яркость, шаг по millis-гейту, кнопка меняет цель мгновенно. Темп подъёма, мягкие концы ease и грабли пина без тильды. - [PWM-диммер на MOSFET: управление светодиодной лентой](https://arduin-arsenal.ru/lesson/prodvinutye/pwm-dimmer-mosfet-lenta/): Лента 12 вольт через IRLZ44N: схема low-side, затвор с резисторами 100 Ом и 10 кОм, общая земля, расчёт нагрева от тока и код диммера на analogWrite. - [Мотор и драйвер L298N: ШИМ со скоростью и реверсом](https://arduin-arsenal.ru/lesson/prodvinutye/l298n-shim-revers-motor/): Драйвер L298N и коллекторный мотор: ENA задаёт скорость через ШИМ, пара IN1 и IN2 — направление. Плавный разгон и торможение по millis и токовые грабли реверса. - [Меняем частоту ШИМ: регистры TCCR без страха](https://arduin-arsenal.ru/lesson/prodvinutye/tccr-chastota-shim-31khz/): Гул мотора на заводском ШИМ 490 Гц лечится тремя строками: предделитель 1 в регистрах TCCR1B и TCCR2B поднимает частоту до 31 кГц — выше порога слышимости уха. - [Servo.h против ШИМ: почему пропадает analogWrite на 9 и 10](https://arduin-arsenal.ru/lesson/prodvinutye/servo-timer1-analogwrite-9-10/): Подключили Servo.h — и подсветка на analogWrite(9) замерла: библиотека забрала Timer1. Почему молчат пины 9 и 10, как развести периферию и обойти конфликт. - [Прерывания PCINT: любой пин как вход прерывания](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-pcint-lyuboj-pin/): PCINT на ATmega328P: прерывание по смене уровня на любом из 20 пинов. Регистры PCICR и PCMSK, один вектор на группу, геркон на D7 и аналогия в симуляторе. - [Библиотека LowPower: сон восемь секунд по кругу](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-lowpower-son-po-krugu/): LowPower.powerDown(SLEEP_8S): 8 секунд тишины и 6-8 мкА в три строки. Watchdog-будильник, SLEEP_FOREVER по событию, millis во сне и модель цикла в симуляторе. - [Проект на батарейках: метеодатчик, живущий месяц](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-meteodatchik-batareya/): Энергобюджет метеодатчика на Pro Mini и 18650: от 45 мА до 25 мкА. Потребители, светодиод питания, кольцевой журнал в EEPROM и модель прогноза в днях. - [PROGMEM и таблицы: массивы данных во флеше](https://arduin-arsenal.ru/lesson/prodvinutye/progmem-tablicy-dannyh/): Таблицы констант во флеше: PROGMEM не копирует данные в ОЗУ, pgm_read_byte и pgm_read_word читают их обратно. Цена таблицы в байтах и главная ловушка чтения. - [Указатели и ссылки: минимум для ардуинщика](https://arduin-arsenal.ru/lesson/prodvinutye/ukazateli-ssylki-minimum/): Амперсанд, звёздочка и ссылки в C++: минимум для ардуинщика. Передаём структуры в функции без копирования и видим, что функция меняет — оригинал или свою копию. - [Структуры и enum: порядок в большом скетче](https://arduin-arsenal.ru/lesson/prodvinutye/struktury-enum-poryadok/): struct собирает настройки в один тип, enum заменяет магические числа именованными состояниями. Каркас большого скетча: автомат, переходы, настройки без копий. - [Итоговый проект: неблокирующий термостат с watchdog и сном](https://arduin-arsenal.ru/lesson/prodvinutye/itogovyj-termostat-watchdog/): Итоговый проект раздела: неблокирующий термостат на millis-планировщике, кнопка цели на прерывании, реле с гистерезисом, watchdog и сон power-down. - [volatile и прерывания: почему переменная молчит](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-volatile-preryvaniya/): Флаг из attachInterrupt молчит в loop: volatile запрещает кеш регистра, а критическая секция noInterrupts спасает двухбайтовый int от рваного чтения. - [Быстрый АЦП: делитель ADCSRA и скорость analogRead](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-fastadc-registry/): analogRead тратит 110 мкс: биты ADPS2..0 в регистре ADCSRA ускоряют АЦП до десятков тысяч замеров в секунду — цена точности видна в таблице. - [74HC595: восемь выходов по трём проводам](https://arduin-arsenal.ru/lesson/prodvinutye/prodvinutye-74hc595-shiftout/): 74HC595 даёт восемь выходов по трём проводам: shiftOut, защёлка RCLK, каскад до шестнадцати выходов, распиновка, токи и две классические грабли. - [millis() вместо delay(): неблокирующие мигалки и таймеры](https://arduin-arsenal.ru/lesson/prodvinutye/millis-vmesto-delay/): millis() вместо delay(): шаблон if (millis() - prev >= N), два светодиода с разными периодами, переполнение через 49,7 дней работы и живая кнопка. - [Прерывания: ловим события мгновенно](https://arduin-arsenal.ru/lesson/prodvinutye/preryvaniya-attachinterrupt/): Прерывания на Uno: attachInterrupt на пинах 2 и 3, режимы RISING, FALLING и CHANGE, volatile, дребезг кнопки и счётчик импульсов без потерь. - [ШИМ: analogWrite, диммер и плавные переходы](https://arduin-arsenal.ru/lesson/prodvinutye/shim-analogwrite/): ШИМ на Arduino Uno: пины с тильдой 3, 5, 6, 9, 10, 11, duty cycle 0-255, частоты 490 и 980 Гц, диммер на потенциометре и плавное дыхание светодиода. - [Таймеры, watchdog и режимы сна: надёжность и батарейки](https://arduin-arsenal.ru/lesson/prodvinutye/watchdog-tajmery-son/): Почему прошивки зависают, таймеры ATmega328P, watchdog до 8 секунд, режим power-down и расчёт батарейного узла: 45 мА против микроампер чипа. ## Wire — шина I2C (https://arduin-arsenal.ru/section/wire-i2c/) Подключаем несколько устройств по двум проводам: устройство шины, адресация, сканер I2C, типовые проблемы подтяжки и длины проводов. Уровень: intermediate. Уроков: 63. Обновлён: 2026-09-22. - [Шина I2C: два провода вместо десяти](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-dva-vmesto-desyati/): Зачем шине I2C хватило двух проводов: кто такой мастер и слейв, скорость 100 и 400 кГц, 112 адресов и честное сравнение I2C, SPI и UART для проектов. - [Подключение I2C-устройства: SDA, SCL и подтяжки](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-podklyuchenie-podtyazhki/): Пошаговое подключение I2C-модуля к Uno: SDA на A4, SCL на A5, земля первой, физика открытого стока и роль подтяжек 4,7 кОм при нескольких модулях. - [Сканер I2C: находим адрес устройства](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-skaner-adresov/): Классический скетч-сканер I2C: перебор адресов 8–119 за доли секунды, чтение результата в Serial, ловушки десятичной записи и восьмибитных адресов из даташитов. - [Сниффер I2C: смотрим трафик глазами](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-sniffer-trafik/): Логический анализатор и журнал обмена на Wire: читаем кадры I2C, находим NACK, ставим диагноз молчащему датчику. Три способа подглядеть за шиной. - [Свой драйвер датчика: пишем класс поверх Wire](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-driver-klass-datchika/): Пишем свой драйвер BMP280 на Wire: класс с begin() и readTemperature(), проверка идентификатора чипа, короткие запросы и переиспользование в новых проектах. - [Итоговый проект: метеостанция из трёх датчиков на шине](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-meteostanciya-itog/): Итоговый проект раздела: LCD, DS3231, BMP280 и MPU6050 на одной шине — карта адресов, расчёт подтяжек, диагностика при старте и опрос по millis-таймеру. - [ADS1115: внешний 16-битный АЦП по I2C](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-ads1115-vneshniy-acp/): Зачем внешний 16-битный АЦП, когда 10 бит мало: термопары и шунты, адреса 0x48-0x4B через ADDR, пределы PGA ±0,256…±6,144 В и чтение по Wire без библиотеки. - [MCP23017: 16 дополнительных пинов по двум проводам](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-mcp23017-rasshiritel-16bit/): MCP23017: 16 пинов по I2C, регистры IODIR, GPPU, GPIO, OLAT, банка A/B, адреса 0x20-0x27 и таблица отличий от PCF8574 — проект 8 кнопок плюс 8 светодиодов. - [Буфер Wire 32 байта: почему длинные данные обрезаются](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-buffer-32-bayta/): Буфер Wire 32 байта: write молча теряет лишнее. Чанки по 30, протокол с квитанциями, чтение регистров кусками и байт адреса регистра, который тоже ест буфер. - [Прерывание INT от I2C-датчика: не опрашивай — слушай](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-int-preryvanie-datchika/): Ножка INT у MPU6050, MCP23017, DS3231 и ADS1115: вешаем на D2, ловим FALLING, volatile-флаг в обработчике, шину читаем только по делу — со счётчиком кадров. - [SoftI2C: программная шина на любых пинах](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-softi2c-bitbang/): Бит-бэнг I2C своими руками на любых пинах: открытый сток, подтяжки, полубит 5 мкс, условия START и STOP, такт ACK и сравнение с аппаратным Wire. - [Итоговый проект: четыре устройства на одной шине](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-kladbische-shin-itog/): Финальный проект раздела: LCD1602 на 0x27, часы DS3231 на 0x68, EEPROM 24C32 на 0x57 и кнопочная матрица — сканер, карта адресов, планировщик без delay. - [TM1637: четырёхразрядный индикатор на двух проводах](https://arduin-arsenal.ru/lesson/wire-i2c/tm1637-chetyrehrazryadnyi-indikator/): Индикатор TM1637 на Uno: CLK и DIO вместо двенадцати проводов, библиотека TM1637Display, яркость 0–7, двоеточие 0x40, счётчик кнопкой и часы из millis. - [BMP280: барометр и высотомер](https://arduin-arsenal.ru/lesson/wire-i2c/bmp280-barometr-vysotomer/): BMP280 по I2C: давление в паскалях и гПа, ловушка адресов 0x76 и 0x77, высота по формуле 44330, прогноз погоды по порогам 1005 и 1020 с оговоркой про тренд. - [MPU6050: акселерометр и определение наклона](https://arduin-arsenal.ru/lesson/wire-i2c/mpu6050-opredelenie-naklona/): MPU6050 по I2C: сырые ax/ay/az и 16384 на каждый g, наклон через getAngleX, уровень с зуммером на 30 градусах и ловушка getMotion6, которая пишет в массивы. - [MPU6050: сырые данные акселерометра — регистры и перевод в g](https://arduin-arsenal.ru/lesson/wire-i2c/mpu6050-syrye-dannye-akselerometra/): Читаем MPU6050 по I2C без библиотеки: регистры 0x3B–0x40, 16-битные значения, 16384 единицы на g, оси на плате GY-521 и калибровка нуля на ровном столе. - [MPU6050: гироскоп, дрейф и комплементарный фильтр](https://arduin-arsenal.ru/lesson/wire-i2c/mpu6050-giroskop-dreif-filtr/): Гироскоп MPU6050: 131 единица на градус в секунду, интегрирование угла по dt из millis(), замер смещения при старте и комплементарный фильтр против дрейфа. - [MPU6050: детектор тряски и удара с порогом и счётчиком](https://arduin-arsenal.ru/lesson/wire-i2c/mpu6050-detekt-triaski-i-udara/): Детектор ударов на MPU6050: модуль вектора по трём осям, порог 1,8 g, счётчик с паузой 300 мс на millis(), зуммер и светодиод, лечение ложных срабатываний. - [VL53L0X: лазерный ToF-дальномер по I2C](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-vl53l0x-tof-dalnomer/): VL53L0X на Uno: время пролёта фотона, лазер 940 нм, адрес 0x29, readRangeContinuousMillimeters до 2000 мм и сравнение с ультразвуком HC-SR04. - [SHT31: промышленная точность на практике](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-sht31-termostat-tochnyj/): SHT31 по I2C: адрес 0x44 и ADDR для 0x45, библиотека Adafruit_SHT31, калибровка смещения и сравнение с DHT22 в цифрах: ±0,2 против ±0,5 °C и ±2 против ±2-5 %RH. - [ADS1115: дифференциальные входы и усилитель PGA](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-ads1115-differencialnyi-pga/): ADS1115 в дифференциальном режиме: пара AIN0-AIN1, усиление GAIN_SIXTEEN с масштабом ±0,256 В, ток через шунт 10 мОм по формуле I=U/R и 16 бит против 10 у Uno. - [Сканер-диагност: что шина отвечает на каждый адрес](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-skaner-diagnost-kodov/): Пишем сканер-диагност I2C: пустой пакет на адреса 8–119 и таблица кодов endTransmission — что значат 0, 1, 2, 3 и 4 и как по коду найти виновника на шине. - [Сканер видит 0x27, а модуль молчит: разбор ответа](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-vidit-adres-molchit-modul/): Сканер нашёл 0x27, а экран пуст: переходник отвечает, кристалл молчит. Питание 5 В, контраст, подтяжки и перемычки A0-A2 — диагностика по шагам за минуту. - [Два устройства на одной шине: LCD 0x27 + RTC 0x68](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-dva-adresa-i-klony/): Экран 0x27 и часы 0x68 на двух проводах: как адресное слово выбирает слушателя, что видит шина при двух клонах и почему сканер покажет один адрес вместо двух. - [PCF8574: подключаем кнопки и реле по адресам 0x20–0x27](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-pcf8574-podklyuchenie-adresa/): Адреса PCF8574 0x20–0x27 из трёх перемычек A0–A2, схема подключения к Uno, кнопки и реле на двух проводах, сигнал INT и ловушка чтения после записи. - [Конфликт адресов: сканер, перемычки и развод пар за три прогона](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-konflikt-diagnost-skannerom/): Сканер видит один адрес, а устройств двое: как доказать конфликт опросом по одному, развести модули перемычками SDO и A0–A2 и закрыть вопрос повторным сканом. - [Длина проводов и подтяжки: когда шина I2C виснет](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-podtyazhki-dlina-ekran/): Шина I2C виснет с расстоянием: фронт 0,85×R×C, подтяжки 4,7 и 2,2 кОм, экранированный кабель с землёй с одной стороны и скорость до 100 кГц по симптомам. - [BH1750: датчик света в люксах по I2C](https://arduin-arsenal.ru/lesson/wire-i2c/bh1750-lyuksy/): BH1750 по I2C: адреса 0x23 и 0x5C через ножку ADDR, опкоды измерения, перевод сырых байтов в люксы делением на 1,2 и потолок 65535 на солнце. - [MPU6050: акселерометр и гиро — первые регистры](https://arduin-arsenal.ru/lesson/wire-i2c/mpu6050-pervye-registry/): MPU6050 без библиотеки: будим чип регистром 0x6B, читаем блок 0x3B-0x40, собираем оси из пар байтов, 16384 отсчёта на g и наклон-детектор на 19 градусов. - [ADS1115: 16-битный АЦП по I2C](https://arduin-arsenal.ru/lesson/wire-i2c/ads1115-16bit/): ADS1115 по I2C: адрес 0x48 при ADDR на земле, четыре канала, GAIN_ONE ±4,096 В, шаг 0,125 мВ против 4,9 мВ у Uno, 860 выборок/с и дифференциальная пара A0-A1. - [TCA9548A: восемь шин из одной](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-tca9548a-multipleksor/): TCA9548A на Uno с двумя ADS1115 и экраном: карта каналов вместо уникальных адресов, концевые подтяжки подшин, изоляция зависшего датчика байтом 0x00. - [BH1750: люксметр по I2C](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-bh1750-lyuksmetr/): Люксметр на BH1750 с экраном 16x2: шкала ориентиров от лунного света до солнца, усреднение восьми отсчётов и поправка на пропускание стекла за один полдень. - [Arduino как I2C-слейв: Wire.onRequest и onReceive](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-slave-onrequest/): Вторая Uno притворяется датчиком: карта регистров со статусом и счётчиком, Wire.onReceive ловит указатель, onRequest отдаёт байты, мастер опрашивает как чип. - [Адреса I2C-модулей: таблица популярных датчиков](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-adresa-moduley-tablica/): Таблица адресов I2C-модулей: LCD на 0x27 и 0x3F, OLED на 0x3C, DS3231 и MPU6050 на 0x68, EEPROM на 0x50. Конфликт 0x68 и разводка адресов ножками. - [Wire.begin и beginTransmission: анатомия библиотеки](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-begin-begintransmission/): Как кадр уходит в шину I2C: Wire.begin, буфер 32 байта на Uno, beginTransmission и write, коды возврата endTransmission, повторный старт вместо STOP. - [Wire.requestFrom: читаем регистры датчика](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-requestfrom-registry/): Читаем регистры I2C-датчика без библиотеки: Wire.requestFrom и буфер Wire.read, сбор 16-битного значения из двух байтов и знак в старшем бите MPU6050. - [Мастер и слейв: две платы по I2C](https://arduin-arsenal.ru/lesson/wire-i2c/wire-master-slave-dve-platy/): Две Arduino по I2C: слейв с адресом 0x08 и обработчиками onReceive/onRequest, мастер шлёт команду и читает два байта; договор о порядке байтов и общая земля. - [Два модуля молчат: конфликт адресов на шине](https://arduin-arsenal.ru/lesson/wire-i2c/wire-scan-konflikt-adresov/): Второй модуль того же типа кладёт шину: оба тянут SDA, сканер видит один адрес, библиотеки отваливаются; перемычки A0-A2, SDO, ADDR и план переезда адреса. - [Три датчика на одной шине: маршрут опроса](https://arduin-arsenal.ru/lesson/wire-i2c/wire-datchiki-na-odnoj-shine/): BME280, BH1750 и DS3231 на паре A4-A5: два хода к каждому (регистр, потом чтение), расписание опроса на millis и темпы, при которых никто никого не ждёт. - [Подтяжка I2C: внутренняя, внешняя и номиналы](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-podtyazhka-nominaly/): Почему шина I2C без подтяжки молчит: открытый сток, внутренние резисторы 20-50 кОм, внешние 4,7 и 2,2 кОм, параллельные подтяжки модулей и пинг адресов скетчем. - [Несколько устройств на одной шине: LCD плюс RTC](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-lcd-rtc-vmeste/): LCD1602 на 0x27 и часы DS3231 на 0x68 в одном скетче: почему библиотеки не конфликтуют, что видит панель I2C, как читать время и обновлять экран по таймеру. - [Одинаковые адреса: как развести конфликт I2C](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-konflikt-adresov/): Два LCD с адресом 0x27 молчат вместе: джамперы A0-A2 и восемь адресов 0x20-0x27, партия PCF8574A на 0x3F, мультиплексор TCA9548A с восемью независимыми шинами. - [Зависает I2C: диагностика и защита от бесконечных ожиданий](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-zavisanie-taimaut/): Почему Arduino виснет намертво на Wire.requestFrom: застрявший слейв и вечный while, таймаут Wire.setWireTimeout, реанимация шины девятью тактами SCL. - [Длина проводов I2C: пределы и активные удлинители](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-dlina-provodov-udliniteli/): Сколько держит шина I2C на проводах: бюджет ёмкости 400 пФ, подтяжка 2,2 кОм, скорость Wire.setClock, буферы P82B715 и P82B96 на десятки метров. - [3.3V и 5V на одной шине: согласование уровней](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-33v-5v-soglasovanie/): Чем опасны 5 В для 3,3-вольтовых чипов на шине I2C и как работает двунаправленный конвертер на BSS138: пороги VIH, подтяжки, детектор мусора. - [Arduino как I2C-slave: свой ведомый на шине](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-slave-onreceive-onrequest/): Слейв на Uno по-взрослому: словарь команд, обработчики Wire.onReceive и onRequest, буфер 32 байта, volatile-переменные и проверка ведомого сканером I2C. - [Обмен между двумя Arduino по I2C](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-dve-arduino-obmen/): Практика Master reader / slave sender: две Uno и три провода без креста, показания 0–1023 пакетом из двух байтов и сборка числа обратно на мастере. - [Как устроен I2C-датчик: карта регистров](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-karta-registrov/): Карта регистров I2C-датчика: указатель и автоинкремент, BCD-время DS3231, бит SLEEP у MPU6050, паспорт WHO_AM_I и порядок чтения datasheet за двадцать минут. - [Читаем datasheet: находим нужные биты конфигурации](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-datasheet-registry/): Как читать datasheet I2C-датчика: карта регистров BMP280, битовые поля ctrl_meas, статус и чтение служебных регистров голым Wire в симуляторе. - [Битовые операции: маски, сдвиги и 16-бит значения](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-bitovye-operacii-maski/): Собираем 16-бит значение из двух байтов через сдвиг и ИЛИ, вырезаем битовые поля масками, ставим и снимаем флаги — с честной печатью в BIN и HEX. - [Датчик BMP280: температура и давление по I2C](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-bmp280-temperatura-davlenie/): BMP280 по I2C: четыре провода, адрес 0x76 или 0x77, библиотека Adafruit_BMP280, давление в гектопаскалях и честный расчёт высоты над уровнем моря. - [MPU6050: акселерометр и гироскоп за один сеанс](https://arduin-arsenal.ru/lesson/wire-i2c/mpu6050-akselerometr-giroskop/): Читаем ускорения и скорости с MPU6050 (GY-521) по I2C: будим чип регистром 0x6B, снимаем 14 байтов с 0x3B, переводим в g и градусы, глушим дрожь фильтром. - [MPU6050: вычисляем угол наклона](https://arduin-arsenal.ru/lesson/wire-i2c/mpu6050-ugol-naklona-filtr/): Комплементарный фильтр своими руками: угол из акселерометра через atan2, интегрирование гироскопа с dt из millis, калибровка нуля и коэффициент 0,98. - [Компас QMC5883L: курс и стороны света по I2C](https://arduin-arsenal.ru/lesson/wire-i2c/qmc5883l-kompas-kurs/): Компас QMC5883L по I2C: адрес 0x0D, регистры 0x09 и 0x00, курс через atan2(my, mx), калибровка поворотом на 360 градусов и стрелка сторон света на LCD1602. - [ЦАП MCP4725: аналоговый выход по шине](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-mcp4725-dac/): ЦАП MCP4725 на Uno без библиотек: команда 0x40 на адрес 0x62, 4096 шагов по 1,22 мВ, плавные 0-4 В без ШИМ и RC-фильтров, EEPROM внутри чипа. - [Расширитель портов PCF8574: плюс восемь пинов](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-pcf8574-rasshiritel/): PCF8574 добавляет восемь линий на Uno: адреса 0x20-0x27 и 0x38-0x3F, байт-маска, квазидвунаправленные пины, сток 25 мА, чтение входов через requestFrom. - [PCF8574 на практике: кнопки и реле через расширитель](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-pcf8574-knopki-rele/): Кнопки и реле на одном PCF8574: младший ниббл — входы, старший — реле. Активный низ, маска 0xCF, дребезг 25-30 мс, транзисторный ключ, до 64 линий на шине. - [Мультиплексор TCA9548A: восемь шин в одной](https://arduin-arsenal.ru/lesson/wire-i2c/wire-i2c-tca9548a-multiplexer/): TCA9548A на Uno: восемь подшин на тех же двух проводах, адрес 0x70-0x77, функция tcaselect с байтом 1< и арифметика слотов — почему вложенность втрое дороже плоских массивов. - [JSON и плоттер: один документ, два формата](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-json-plotter-dva-kanala/): Один документ — два формата: пары label=value для Serial Plotter и JSON-строка в журнал на SD. Почему плоттер давится JSON и как делить канал без каши. - [ArduinoJson 7: StaticJsonDocument ушёл, что теперь](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-v7-migraciya/): Пул переехал в кучу: StaticJsonDocument и DynamicJsonDocument слились в JsonDocument, ёмкость игнорируется — что меняется на Uno и ESP8266 и когда отложить v7. - [Фильтр десериализации: берём только нужные поля](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-filter/): Вложенный фильтр DeserializationOption::Filter на группу main: только temp, humidity и name, выигрыш через memoryUsage и ловушка is на вырезанном поле. - [JSON-телеграмма датчиков: собираем и шлём раз в минуту](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-telegamma-datchikov/): Телеграмма {device, ts, t, h, vcc} раз в минуту: цена поля в байтах, serializeJson в char-буфер с предохранителем measureJson и millis-планировщик без delay. - [Конфиг-файл на SD: читаем настройки в JsonDocument](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-konfig-sd/): config.json с карты разбирается тем же deserializeJson: File.readString, дефолт для отсутствующих полей, грабля двух открытых файлов и логгер без перепрошивки. - [OpenWeather по-настоящему: вложенный ответ main/weather[]](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-openweather/): Настоящая структура ответа OpenWeather: doc["main"]["temp"] и weather[0], float и округление до 0,1, предохранитель на cod 404 и фильтр вместо 2 КБ. - [Массив измерений: собираем 60 точек в один JSON](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-massiv-izmerenij/): Копим 60 измерений в кольцевой буфер и отдаём одним JSON: createNestedArray в цикле, размер 900-1200 байт, ловушка int в среднем и цена точек по одной. - [deserializeJson: разбираем первую строку](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-deserialize-pervyj-razor/): deserializeJson на практике: JsonDocument, чтение поля doc[«temp»] и первая грабля — короткий буфер, из-за которого парсер молча возвращает Err. - [serializeJson: собираем JSON своими руками](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-serialize-svoi-json/): serializeJson на практике: собираем JsonDocument из показаний датчиков и превращаем его в строку для HTTP-запроса или MQTT-топика без склейки руками. - [Чтение полей: doc['key'] и оператор |](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-chtenie-polej-pipe/): Чтение полей в ArduinoJson: оператор | для значения по умолчанию, вложенный доступ obj[«a»][«b»] и проверка isNull, чтобы отсутствующий ключ не ломал скетч. - [Home Assistant discovery: генерируем конфиг-топик из кода](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-ha-discovery-payload/): Discovery-паспорт switch на ArduinoJson: топик homeassistant/switch/…/config, payload_on и payload_off, публикация после reconnect и постоянный unique_id. - [JsonDocument в цикле: clear() против локального](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-dokument-cikl-clear/): JsonDocument внутри loop: локальный в каждой итерации крошит кучу ESP32, глобальный без clear() протекает старыми ключами. Три стратегии и замер кучи. - [Конфиг в LittleFS: сохраняем и читаем документ](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-littlefs-konfig/): config.json во флеше ESP32: LittleFS.begin(true) при первом старте, deserializeJson из файла, запись во временный файл с rename против усечения, сравнение с SD. - [Вложенные объекты: доступ по цепочке ключей](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-vlozhennye-obekty-tsepochka/): Цепочка ключей для вложенного JSON: doc['loc']['city'] на плате, проверка промежуточных звеньев, цена вложенности и разбор вложенного ответа в симуляторе. - [Массивы JSON: итерация по элементам](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-massivy-json-iteraciya/): Длина массива через size(), обход по индексу и range-for, молчаливый ноль за границей и живая итерация по ряду значений с запросом часа из монитора порта. - [Списки объектов: массив структур из API](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-spisok-obektov-iz-api/): Прогноз на три дня как массив объектов: раскладка полей дня в переменные, вердикт по условию, один запрос вместо трёх и честная эмуляция списка в симуляторе. - [Фильтры ArduinoJson: разбираем только нужное](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-filtry-razbor-nuzhnoe/): Фильтр DeserializationOption::Filter: второй документ-образец решает, какие ключи попадут в разбор. Меньше RAM на Uno и документ фиксированного состава. - [Фильтры для больших ответов: RAM на вес золота](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-filtry-bolshie-otvety/): Ответ на два килобайта при двух килобайтах ОЗУ: бюджет SRAM Uno, фильтр с массивом на первые N часов прогноза и честные границы применимости фильтра. - [Создание JSON с нуля: doc['key'] = value](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-sozdanie-json-assign/): Плата собирает свой JSON: присваивание doc['key'] = value, вложенные объекты и массивы в v6 и v7, перезапись ключей и clear перед новой сборкой. - [Вложенная сериализация: свои объекты и массивы](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-vlozhennaya-serializaciya/): Собираем вложенный JSON: createNestedObject и createNestedArray, список показаний, цена скобок в байтах и дубль ключа, который молча съедает поле. - [Типы данных JSON: строка, число, bool, null](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-tipy-dannyh-json/): Кавычка делает число строкой, true печатается единицей, null — не ноль: что становится чем при разборе JSON и как ловить сюрпризы печати сырого пакета. - [Проверка типов: is() и as()](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-is-as-proverka-tipov/): containsKey отвечает, был ли ключ; is() — можно ли прочитать значение: guarding полей чужого API и история про режим, который стал числом. - [DeserializationError: коды ошибок и диагностика](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-deserializationerror-diagnostika/): Шесть кодов DeserializationError: EmptyInput, InvalidInput, IncompleteInput, NoMemory, TooDeep — причины, диагностика через err.c_str() и разбор в симуляторе. - [Размер документа: measureJson и оценка памяти](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-measurejson-otsenka-pamyati/): measureJson считает байты JSON до печати: буфер с запасом, вес пакета на канале и бюджет памяти Uno против ESP32 — раскладываем документ по полкам. - [Строки и ArduinoJson: const char*, String и копии](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-stroki-i-kopii/): Кто владеет строкой после разбора: const char* смотрит в источник, String и char-буфер дают свои копии — копируем значения до перезаписи пакета. - [strdup и копирование строк: ловушки указателей](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-strdup-kopirovanie-strok/): Куда указывает doc['name'] после разбора и почему строка умирает вместе с документом: копия в String, char-буфер или strdup — с ценой в байтах и ловушками. - [JSON через UART: парсим поток из Serial](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-json-uart-serial-potok/): Соседний узел шлёт JSON по проводу: склеиваем строку посимвольно до маркера конца, разбираем deserializeJson и отвечаем. Живой разбор пакета в мониторе порта. - [Погодный API: парсим ответ OpenWeatherMap](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-openweathermap-parsing/): Анатомия ответа OpenWeatherMap: где прячутся temp и description, почему weather — массив, ловушка Кельвинов и разбор сокращённого ответа в симуляторе. - [OpenWeatherMap в проекте: прогноз на дисплее](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-openweathermap-lcd/): Погодная панель на ESP32 и LCD: ключ OpenWeatherMap, параметр units=metric, вложенный main.temp, разбор ArduinoJson и вывод температуры с описанием на экран. - [Курс валют из API: массив котировок](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-kursy-valyut-api/): Табло курсов валют: JSON с котировками, вложенный объект rates, точность float и число знаков при печати, запасные значения через | и светодиод на пороге курса. - [JSON в теле POST: формируем запрос правильно](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-json-post-telo/): Собираем тело POST-запроса через ArduinoJson: doc и serializeJson, Content-Length по measureJson, заголовок Content-Type и разбор JSON-ответа сервера. - [Массивы массивов: вложенные списки без паники](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-massivy-massivov/): Вложенные массивы в JSON: таблица день и ночь из внешнего узла, двойные индексы doc["week"][d][0], порядок циклов и цена каждого уровня вложенности. - [График температуры: 100 точек в JSON](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-grafik-100-tochek/): Пакуем историю измерений в один JSON: сотня точек вместо сотни запросов, байты и секунды канала, разбор с минимумом и максимумом, график в мониторе порта. - [Конфигурация в JSON: настройки устройства файлом](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-konfig-json/): Настройки устройства одной JSON-строкой: разбор, проверка диапазонов, применение без перепрошивки и копия порогов в EEPROM на случай перезагрузки. - [ArduinoJson: разбираем JSON без боли](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-parsing/): Разбираем ответ погодного API через ArduinoJson: JsonDocument и его цена в байтах, SRAM Uno 2 КБ, deserializeJson по шагам и чтение значений в симуляторе. - [Собираем свой JSON и отправляем на сервер](https://arduin-arsenal.ru/lesson/arduinojson/arduinojson-serialize/): Собираем JSON для сервера без String-конкатенации: doc и присвоение ключей, serializeJson и serializeJsonPretty, телеметрия по таймеру в симуляторе. ## OLED-дисплеи Adafruit GFX / SSD1306 (https://arduin-arsenal.ru/section/oled/) Пиксельная графика на OLED: текст, фигуры, свои шрифты, анимация, буфер дисплея и типовые чёрные экраны. Уровень: intermediate. Уроков: 62. Обновлён: 2026-09-22. - [OLED SSD1306: чем пиксельный дисплей лучше LCD](https://arduin-arsenal.ru/lesson/oled/oled-vs-lcd-sravnenie/): Самосветящиеся пиксели против подсветки: контраст, миллиамперы, скорость, холод и солнце — сравнение SSD1306 128x64 с LCD1602 и защита от выгорания. - [Подключение OLED 128x64 по I2C: схема](https://arduin-arsenal.ru/lesson/oled/oled-i2c-shema-podklyucheniya/): Четыре провода к SSD1306: VCC, GND, SDA на A4, SCL на A5, питание 3.3-5 В, подтяжки на борту и место на макетке — плюс проверка сборки в симуляторе. - [Адрес OLED: сканер I2C и 0x3C](https://arduin-arsenal.ru/lesson/oled/oled-adres-skaner-i2c/): Почему OLED молчит: адреса 0x3C и 0x3D, сканер I2C и коды endTransmission, 0x78 против 0x3C, подтяжки, питание и второй прибор на шине. Таблица кодов возврата. - [Диагностика OLED: чёрный экран и мусор на шине](https://arduin-arsenal.ru/lesson/oled/oled-diagnostika-chernyi-ekran/): Пошаговая диагностика OLED: питание 3.3 и 5 В, адреса 0x3C и 0x3D, сканер шины, перепутанные SDA и SCL, подтяжки, забытые begin и display, виды мусора. - [Анимированный интерфейс: переходы и скроллинг](https://arduin-arsenal.ru/lesson/oled/oled-animaciya-perehody-skroll/): Плавные смены экранов на OLED: кадры на millis, сдвиг контента, аппаратный скроллинг startscrollright и stopscroll, fade через dim и когда анимация вредит. - [Итоговый проект: дашборд на OLED с меню и графиком](https://arduin-arsenal.ru/lesson/oled/oled-dashbord-menyu-grafik/): Финальный прибор раздела: дашборд с тремя экранами и меню на кнопках D2 и D3, зоны и график истории из штрихов, датчики на A0 и A1, весь цикл на millis. - [Помодоро-таймер на OLED: 25 минут работы, 5 отдыха](https://arduin-arsenal.ru/lesson/oled/oled-pomodoro-tajmer-proekt/): Помодоро-таймер на OLED: крупные цифры остатка, полоса прогресса, кнопка старт-пауза по фронту, зуммер-переходы и счётчик циклов — машина состояний на millis. - [Мини-осциллограф: сигнал АЦП в реальном времени](https://arduin-arsenal.ru/lesson/oled/oled-oscillograf-analogread/): Мини-осциллограф на OLED: буфер 64 отсчётов, развёртка от потенциометра, триггер по порогу и дребезг кнопки, увиденный глазами, — всё на АЦП Uno. - [Анимации загрузки: спиннер, прогресс и пасхалки](https://arduin-arsenal.ru/lesson/oled/oled-animaciya-zagruzki-boot/): Анимации загрузки на OLED: спиннер из четырёх кадров по millis, прогресс от реальных шагов инициализации и секретный экран после пяти нажатий кнопки. - [Погодный ярлык: иконки солнца/облака/дождя из битмапов](https://arduin-arsenal.ru/lesson/oled/oled-pogodnyi-yarlyk-ikonki/): Погодный ярлык на OLED: битмапы 16x16 — солнце, облако, дождь — по 32 байта, команды 1/2/3 из Serial и кнопка перебора, смена иконки без мерцания. - [Монитор батареи: вольтметр и график на OLED](https://arduin-arsenal.ru/lesson/oled/oled-monitor-batarei-grafik/): Вольтметр Li-ion на OLED: делитель 100к/10к на A0, пороги 3.3 и 3.0 В со статусом текстом, кольцо на 32 точки и график drawLine, min/max по кнопке. - [Терминал на OLED: последние строки Serial](https://arduin-arsenal.ru/lesson/oled/oled-mini-terminal-serial/): Терминал отладки на OLED: строки через readStringUntil, кольцо на пять записей, перенос длинных, кнопка очистки и LED-курсор — прибору не нужен ноутбук. - [drawLine, drawRect, fillRect: рамки и гистограммы](https://arduin-arsenal.ru/lesson/oled/oled-primitivy-ramki-gistogrammy/): Четыре команды GFX собирают рамку, шкалу и столб: угол против центра, заливка одним вызовом и бар от ручки A0 шириной до 122 пикселей — без битмапов и таблиц. - [Буфер 1024 байта: clearDisplay, рисуй, display()](https://arduin-arsenal.ru/lesson/oled/oled-bufer-1024-baita-kadr/): Кадр 128×64 — это 1024 байта SRAM, половина ОЗУ Uno: clearDisplay не трогает шину, display() вываливает весь буфер за 23 мс на 400 кГц. Считаем цену кадра. - [Кадровая анимация: полоса загрузки на millis-такте](https://arduin-arsenal.ru/lesson/oled/oled-kadry-polosa-zagruzki/): Бар растёт по кадрам на millis-такте 40 мс — около 25 FPS: кнопка рестарта читается каждый проход, шина успевает, а delay не блокирует ничего. Полный скетч. - [setTextSize: сколько символов влезает в 128×64](https://arduin-arsenal.ru/lesson/oled/oled-settextsize-razmery-shriftov/): Размер 1 даёт 21 символ в строке, размер 2 — только 10: считаем ячейки 6×8, строим крупную сводку показаний и ловим строки, молча уехавшие за край. - [invertDisplay и dim: экран, который не слепит ночью](https://arduin-arsenal.ru/lesson/oled/oled-invertdisplay-dim-nochnoi-rezhim/): Инверсия меняет чёрное и белое одной командой панели, dim уводит контраст в ноль: ночной режим по фоторезистору с гистерезисом и без слепящих белых полей. - [Экран-сводка: DHT22 крупно и по таймеру](https://arduin-arsenal.ru/lesson/oled/oled-dht22-svodka-ekran/): Температура шрифтом 18×24, влажность двойкой ниже, опрос строго раз в две секунды по millis: сводка с DHT22 на SSD1306 без delay и без nan на экране. - [Меню на кнопках: вверх, вниз и выбор](https://arduin-arsenal.ru/lesson/oled/oled-menu-dve-knopki-vybor/): Три кнопки на D2-D4 ходят по пунктам меню на SSD1306, стрелка выделяет строку, выбор запускает действие: каркас без delay, дребезг гасим окном 40 мс. - [Энкодер KY-040 в меню: крути и выбирай](https://arduin-arsenal.ru/lesson/oled/oled-menu-encoder-ky040/): CLK даёт фронт на каждый щелчок, DT подсказывает направление, SW выбирает: переносим меню на энкодер KY-040 и честно сравниваем его с тремя кнопками. - [Подэкраны и выход: автомат экранов](https://arduin-arsenal.ru/lesson/oled/oled-avtomat-ekranov-nazad/): Пункт меню открывает экран настройки, кнопка возвращает назад: раскладываем интерфейс на состояния MENU и EDIT и ловим залипание перехода на фронте. - [Раскладка кадра на бумаге: сетка 128×64, зоны и отступы](https://arduin-arsenal.ru/lesson/oled/oled-razkladka-kadra-maket/): Бумажный макет кадра SSD1306: сетка 21 на 8 знакомест, зоны шапки, тела и футера, отступы как константы скетча и перенос разметки в drawRect и fillRect. - [График с датчика: бегущая лента точек и автоскейл](https://arduin-arsenal.ru/lesson/oled/oled-lenta-tochek-avtoskejl/): Бегущая лента точек с датчика на SSD1306: кольцевой буфер, автоскейл минимума и максимума окна, мёртвая зона против дрожи шкалы и защита от деления на ноль. - [Меню с инверсной строкой: fillRect и чёрный текст поверх](https://arduin-arsenal.ru/lesson/oled/oled-menu-inversnaya-stroka/): Инверсная строка в меню на SSD1306: fillRect под пункт, setTextColor(BLACK, WHITE) поверх, навигация ручкой с гистерезисом и диалог подтверждения выбора. - [Спрайт-анимация: человечок шагает из PROGMEM](https://arduin-arsenal.ru/lesson/oled/oled-sprajt-hodba-kadry/): Спрайт-анимация на SSD1306: позы шага человечка в PROGMEM, переключение кадров по millis, стирание старой зоны fillRect, темп шага и цена кадра в байтах. - [Страницы-вкладки на одной кнопке: статус, график, настройки](https://arduin-arsenal.ru/lesson/oled/oled-vkladki-knopka-stranitsy/): Страницы-вкладки на OLED одной кнопкой: статус, график и настройки в одном скетче, фронт кнопки без дребезга, точки-вкладки и перерисовка по странице. - [Крупные цифры для термометра: setTextSize и своя точка](https://arduin-arsenal.ru/lesson/oled/oled-termometr-krupnye-cifry/): Крупные цифры на SSD1306: setTextSize 2 и 3, своя десятичная точка и минус для термометра, сглаживание десятых, обновление по I2C и пороговый светодиод. - [Меню на OLED с энкодером: крутим, выбираем, входим](https://arduin-arsenal.ru/lesson/oled/oled-menyu-encod/): Вложенное меню на OLED с энкодером KY-040: ручка листает пункты и правит значение, клик SW ходит в подэкран и назад, счёт щелчков в прерывании, дребезг CLK. - [Живой график на OLED: drawLine и скроллящийся буфер](https://arduin-arsenal.ru/lesson/oled/oled-grafik-vremeni/): Живой график на OLED: кольцевой буфер точек, автоскейл по min/max окна с мёртвой зоной, сетка и цена деления, черта среднего и переполнение int в сумме. - [Свои шрифты и иконки: GFX fonts, drawBitmap, PROGMEM](https://arduin-arsenal.ru/lesson/oled/oled-shrifty-ikonki/): Фирменный экран на OLED: иконка 16x16 через drawBitmap и PROGMEM, FreeSans9pt7b через setFont, бюджет комплекта в байтах и ловушка битмапа в ОЗУ. - [Часы на OLED: DS3231, крупный шрифт и моргающее двоеточие](https://arduin-arsenal.ru/lesson/oled/oled-chasy-ds3231/): Настольные часы на DS3231 и SSD1306: setTextSize(2) для крупного HH:MM, моргающее двоеточие по чётности секунды, дата с днём недели снизу, тик по millis. - [Три экрана на одной кнопке: автомат отображений DHT](https://arduin-arsenal.ru/lesson/oled/oled-ekrany-avtomat/): Три экрана термогигрометра на одной кнопке: температура, влажность и индекс комфорта; автомат состояний на enum и switch, анти-дребезг 200 мс и печать тольк. - [Сплэш-скрин и прогресс-бар: приятный старт устройства](https://arduin-arsenal.ru/lesson/oled/oled-splash-progress/): Заставка при старте и честный прогресс инициализации: drawRect-рамка с fillRect-полосой, шаги от шины до сети, ловушка display() в буфере и мнение, когда сп. - [Adafruit GFX и SSD1306: установка и первый скетч](https://arduin-arsenal.ru/lesson/oled/oled-gfx-ustanovka-sketch/): Adafruit GFX и Adafruit_SSD1306: роли трёх библиотек, установка через менеджер с зависимостями, первый скетч с begin и display() и проверка заставкой Adafruit. - [clearDisplay и display(): двойная буферизация](https://arduin-arsenal.ru/lesson/oled/oled-bufer-clear-display/): Что делает clearDisplay и display(): буфер ОЗУ против GDDRAM контроллера, цена кадра по I2C, стратегии очистки и темп обновления без мерцания и дрожи. - [Текст на OLED: print, setCursor, размер шрифта](https://arduin-arsenal.ru/lesson/oled/oled-tekst-print-setcursor/): Текстовый API Adafruit GFX: сетка 21×8, setTextSize 1–3, setCursor в пикселях, print против println, инверсный setTextColor и компоновка экрана по зонам. - [Змейка на SSD1306: буфер кадра, скорость и кнопки](https://arduin-arsenal.ru/lesson/oled/oled-zmejka-igra-bufer/): Змейка на SSD1306: сетка клеток 8×8, координаты в двух массивах, кадр по millis 160→70 мс с разгоном, повороты двумя кнопками и коллизии по массиву. - [Парктроник: HC-SR04 и полоса расстояния на OLED](https://arduin-arsenal.ru/lesson/oled/oled-parktronik-hcsr04-polosa/): Парктроник на HC-SR04 и OLED: полоса-градусник 1 см = 1 пиксель, зоны 100/50/20 см, писк от редкого до сплошного, пауза 60 мс между пингами и медиана из трёх. - [Термостат с гистерезисом: DS18B20, реле и экран](https://arduin-arsenal.ru/lesson/oled/oled-termostat-rele-gisterezis/): Термостат на DS18B20 и OLED: уставка кнопками с шагом 0,5 °C, гистерезис 0,5 °C через две границы вместо abs, крупно NAGREV и POKOJ, честное питание реле. - [Шрифты GFX: Free-семейство и их размеры](https://arduin-arsenal.ru/lesson/oled/oled-shrifty-freefonts-gfx/): FreeFonts в Adafruit GFX: лица Serif, Sans, Mono, кегли 9-24 pt, include из папки Fonts, setFont, цена шрифта во флеше и курсор по базовой линии. - [Линии и фигуры: drawLine, drawRect, fillCircle](https://arduin-arsenal.ru/lesson/oled/oled-linii-figury-primityvy/): Примитивы Adafruit GFX на OLED: drawPixel, drawLine, drawRect, fillRect, drawCircle, drawRoundRect, drawTriangle — аргументы, цвет WHITE и BLACK, ластик. - [Анимация на OLED: движущийся объект без мерцания](https://arduin-arsenal.ru/lesson/oled/oled-animaciya-bez-mercaniya/): Анимация OLED без мерцания: петля кадра clearDisplay-рисование-один display(), интервалы по millis, бюджет 92 мс на кадр, шарик от потенциометра и кнопки. - [Прогресс-бар и слайдеры на OLED](https://arduin-arsenal.ru/lesson/oled/oled-progress-bar-slayder/): Прогресс-бар на OLED: drawRect и fillRect под капотом, проценты из analogRead через map, вертикальный столбик и слайдер с ручкой, дрожь АЦП и темп обновления. - [Битмапы на OLED: drawBitmap из массива](https://arduin-arsenal.ru/lesson/oled/oled-drawbitmap-massiv/): drawBitmap на SSD1306: картинка как массив байтов, восемь пикселей в байте, вес иконок от 8 до 1024 байтов, PROGMEM против переполнения SRAM, инверсия и кадры. - [image2cpp: конвертируем картинку в код](https://arduin-arsenal.ru/lesson/oled/oled-image2cpp-konverter/): image2cpp: из PNG в массив байтов для OLED — порог чёрного и белого, инверсия, точный размер под иконку и экран, режимы Horizontal и Vertical, вставка в скетч. - [Иконки интерфейса: спрайты и маски](https://arduin-arsenal.ru/lesson/oled/oled-ikonki-sprajty-maski/): Спрайты на OLED: пара битмапов иконка плюс маска вместо прозрачности, наборы иконок 8x8 и 16x16, движение без квадратного следа и хранение наборов в PROGMEM. - [drawPixel и буфер: пишем в конкретный пиксель](https://arduin-arsenal.ru/lesson/oled/oled-drawpixel-zapis-v-piksel/): drawPixel на SSD1306: координаты 0-127 и 0-63, тихие границы, раскладка буфера по столбцам, прямой доступ getBuffer и мигающие точки без пересборки кадра. - [Кириллица на OLED: u8g2 и свои шрифты](https://arduin-arsenal.ru/lesson/oled/oled-kirillica-u8g2-shrifty/): Почему print в Adafruit выдаёт мусор вместо русских букв: кириллические шрифты U8g2, drawUTF8 и кодировка файла, цена флеша и мост U8g2_for_Adafruit_GFX. - [U8g2 против Adafruit: сравнение библиотек](https://arduin-arsenal.ru/lesson/oled/oled-u8g2-protiv-adafruit/): U8g2 против Adafruit SSD1306: расход ОЗУ и флеша, кириллица в готовых шрифтах, скорость на I2C и SPI, перенос кода на drawStr — когда сменить библиотеку. - [Меню на OLED: навигация кнопками](https://arduin-arsenal.ru/lesson/oled/oled-menu-knopki-navigaciya/): Меню на OLED 128x64: список пунктов в массиве, курсор-стрелка, автомат состояний NAV и EDIT, кнопки с фронтом и антидребезгом на millis, перерисовка по ключу. - [Графики на OLED: отрисовка показаний датчика](https://arduin-arsenal.ru/lesson/oled/oled-grafik-datchik-bufer/): Самописец датчика на OLED: оси и масштаб map в высоту экрана, кольцевой буфер последних 64 значений, полилиния drawLine и обновление раз в секунду по millis. - [Часы на OLED: крупный шрифт и RTC](https://arduin-arsenal.ru/lesson/oled/oled-chasy-rtc-krupnyj-shrift/): Часы на SSD1306 и DS3231: setTextSize(2) для крупного времени, ведущие нули, мигающее двоеточие, тик раз в секунду по millis и температура модуля на экране. - [Игра на OLED: Flappy Bird за сотню строк](https://arduin-arsenal.ru/lesson/oled/oled-flappy-bird-igra/): Flappy Bird на SSD1306 за сотню строк: скорость плюс гравитация, трубы со щелью, счёт и рекорд, кнопка на D2, кадры на millis, game over с рестартом. - [OLED и датчики: метео-панель в реальном времени](https://arduin-arsenal.ru/lesson/oled/oled-meteo-panel-zhivye-znacheniya/): Метео-панель на SSD1306: зоны под температуру, влажность и давление, обновление по таймеру без мерцания, фиксированная ширина строк и тайминги датчиков. - [SPI OLED 128x64: быстрее, но больше проводов](https://arduin-arsenal.ru/lesson/oled/oled-spi-podklyuchenie-provoda/): OLED 128x64 по SPI: семь проводов против четырёх, пины SCK MOSI DC CS RESET, конструктор Adafruit_SSD1306 с &SPI, 8 МГц против 100-400 кГц и когда SPI оправдан. - [I2C или SPI OLED: замеряем FPS](https://arduin-arsenal.ru/lesson/oled/oled-fps-zamer-i2c-spi/): Замер FPS OLED одним скетчем: I2C 100 и 400 кГц против SPI 8 МГц, счёт кадров по millis с окном в секунду, компромиссы проводов, скорости и памяти с числами. - [SH1106 против SSD1306: чёрный экран и смещение](https://arduin-arsenal.ru/lesson/oled/oled-sh1106-ssd1306-sdvig/): SH1106 против SSD1306: память 132x64 против 128x64, сдвиг на 2 пикселя и мусор справа, чёрный экран при живом сканере, драйверы Adafruit_SH1106G и U8g2. - [OLED 128x32: компактный модуль и перенос кода](https://arduin-arsenal.ru/lesson/oled/oled-128x32-kompakt-perenos/): Модуль OLED 128x32: буфер 512 байт и четыре строки текста, чек-лист переноса скетча с 128x64 и диагноз низа экрана, в котором пропали строки. - [Частичное обновление экрана: экономим RAM](https://arduin-arsenal.ru/lesson/oled/oled-chastichnoe-obnovlenie-ram/): Зональная перерисовка OLED без иллюзий: буфер 1024 байта из 2 КБ SRAM Uno, getBuffer, page-режим U8g2 со 128 байтами, когда памяти не хватает. - [Питание OLED: потребление и ресурс дисплея](https://arduin-arsenal.ru/lesson/oled/oled-pitanie-resurs-vygoranie/): Сколько миллиампер стоит OLED и на сколько лет хватает: ток от картинки, часы свечения до полупотускнения, dim и DISPLAYOFF, кнопка гашения экрана. - [OLED SSD1306: первый текст на 128x64](https://arduin-arsenal.ru/lesson/oled/oled-ssd1306-pervyj/): Подключаем OLED SSD1306 по I2C: адрес 0x3C, буфер 1024 байта против 2 КБ RAM Uno, setTextSize и setCursor, первый текст и счётчик секунд в симуляторе. - [Графика на OLED: линии, счётчики и мини-интерфейс](https://arduin-arsenal.ru/lesson/oled/oled-grafika/): Рисуем на SSD1306 с Adafruit GFX: координаты и примитивы, цена кадра по I2C и обновление раз в 100 мс, текстовый дашборд температуры и времени в симуляторе. ## IRremote — пульты дистанционного управления (https://arduin-arsenal.ru/section/irremote/) Читаем кнопки любого пульта: ИК-приёмник, протоколы, декодирование команд, отправка сигналов своей платой. Уровень: beginner. Уроков: 62. Обновлён: 2026-09-22. - [ИК-пульты: как устроен инфракрасный сигнал](https://arduin-arsenal.ru/lesson/irremote/ik-signal-nesuschaya-i-protokoly/): Несущая 38 кГц, пачки света и огибающая: как ИК-пульт кодирует биты, чем NEC отличается от SIRC и RC-5 и почему фоторезистор сигнал не видит. - [ИК-приёмник VS1838B: подключение к Arduino](https://arduin-arsenal.ru/lesson/irremote/vs1838b-podklyuchenie-i-piny/): VS1838B или TSOP4838: распиновка OUT-GND-VCC, подтяжка выхода, резистор 100 Ом и конденсатор в питании, типовая схема на макетке и ловушки помех. - [Библиотека IRremote: установка и отличия версии 4](https://arduin-arsenal.ru/lesson/irremote/irremote-4-ustanovka-i-api/): Установка IRremote 4.x через Менеджер библиотек: IrReceiver и IrSender, таблица миграции со старого API и пять строк, возвращающие скетчи к жизни. - [ИК-барьер: датчик пересечения луча](https://arduin-arsenal.ru/lesson/irremote/ik-barrier-schetchik-lucha/): ИК-барьер на Arduino: прямой и отражённый луч, порог с гистерезисом, счётчик посетителей и охранный зуммер. Калибровка по свету и защита от засветки солнцем. - [Прерывания и обработка ИК: не теряем кадры](https://arduin-arsenal.ru/lesson/irremote/irremote-preryvaniya-i-kadry/): Кадр ИК принимает прерывание, а не loop: тик 50 мкс, буфер на 200 отметок, окно decode-resume. Почему delay приём не рвёт, а tone и запись EEPROM рвут. - [Итоговый проект: пульт-центр для комнаты](https://arduin-arsenal.ru/lesson/irremote/irremote-pult-centr-itog/): Финальный проект раздела: приёмник, реле, светодиод и зуммер на одной плате, меню режимов на LCD 16x2, всё на millis. Собираем навыки раздела в один скетч. - [Пульт как ключ охраны: arm/disarm по ИК](https://arduin-arsenal.ru/lesson/irremote/irremote-pult-klyuch-ohrany/): Охранная система с пультом вместо ключа: постановка и снятие по ИК, задержка на выход 5 секунд, сирена на tone и разводка таймеров, чтобы приёмник не оглох. - [Вентилятор с пульта: три скорости и поворот](https://arduin-arsenal.ru/lesson/irremote/irremote-ventilyator-skorosti-pult/): Вентилятор с ИК-пультом: кнопки 1-2-3 дают три скорости на ШИМ, ноль останавливает, разгон плавный по millis без рывка тока, индикация уровня и честные токи. - [Обучаемый пульт: записываем коды в EEPROM и воспроизводим](https://arduin-arsenal.ru/lesson/irremote/irremote-obuchaemyi-pult-eeprom/): Обучаемый ИК-приёмник на EEPROM: зажимаем кнопку на 10 секунд, пишем коды пульта по слотам 0-5, после перезагрузки плата узнаёт свои кнопки без перепрошивки. - [NEC изнутри: 32 бита, две инверсии и второй пакет](https://arduin-arsenal.ru/lesson/irremote/irremote-nec-32-bita-inversiya/): Разбираем кадр NEC по байтам: адрес и инверсия адреса, команда и её инверсия, порядок бит LSB-first, расширенный NEC2 и анатомия второго пакета-повтора. - [RC5 и RC6: 14 бит, flip-бит и как опознать пульт](https://arduin-arsenal.ru/lesson/irremote/irremote-rc5-rc6-protokoly/): Чем RC5 и RC6 отличаются от NEC: манчестерские полубиты 889 мкс, 14 бит кадра, flip-бит в decodedIRData.extra и как опознать протокол чужого пульта за минуту. - [Сырые интервалы: микросекунды вместо готовых кодов](https://arduin-arsenal.ru/lesson/irremote/irremote-raw-intervaly/): Что видно в сырых числах кадра: тики по 50 микросекунд, порог тишины 8 мс, поправка MARK_EXCESS и пороговый автомат, собирающий биты без словаря протоколов. - [Repeat-кадры: чтобы кнопка не срабатывала девять раз в секунду](https://arduin-arsenal.ru/lesson/irremote/irremote-repeat-filtr-uderzhaniya/): Пульт шлёт repeat-кадр каждые 108 мс, пока кнопку держат. Гасим повторы флагом IRDATA_FLAGS_IS_REPEAT, строим millis-окно и делаем из удержания плавную качель. - [Ложные команды: помехи, белый список и резистор на питании](https://arduin-arsenal.ru/lesson/irremote/irremote-pomehi-filtr-koda/): Солнце срезает дальность ИК почти на 70 процентов, лампы лезут в полосу 38 кГц. Отсекаем мусор фильтром по протоколу и коду, ставим 100 Ом и 4,7 мкФ на питание. - [ИК-ретранслятор: decode на входе, sendNEC на выходе](https://arduin-arsenal.ru/lesson/irremote/irremote-retranslyator-komnata/): Удлинитель пульта на одной плате: приёмник TSOP на D11, ИК-светодиод на D3. Порядок decode, resume, sendNEC, кадр на 68 мс, пересылка повторов и честные потери. - [Пульт как панель управления: реле и светодиод по коду кнопки](https://arduin-arsenal.ru/lesson/irremote/irremote-komandy-rele-progmem/): Превращаем ИК-пульт в панель команд для реле и светодиода: словарь кодов в PROGMEM, switch по действию, порядок запуска нагрузок и питание реле-модуля. - [Сниффинг чужого пульта: считываем и повторяем коды](https://arduin-arsenal.ru/lesson/irremote/irremote-sniffer-chuzhoi-pult/): Снимаем коды пультов телевизора и кондиционера через IRremote: журнал команд с адресами, повтор sendNEC и граница — фиксированные кадры против динамических. - [ИК против радио: где оптика выигрывает, а где сдаётся](https://arduin-arsenal.ru/lesson/irremote/irremote-ik-vs-radio/): Сравниваем ИК-канал с 433 МГц, Bluetooth и Wi-Fi: стены, настройка, питание, соседи по эфиру. Таблица выбора канала и скетч замера надёжности по точкам комнаты. - [IRremote 4.x против 3.x: перетаскиваем скетчи с форумов](https://arduin-arsenal.ru/lesson/irremote/irremote-4x-migraciya-forum-sketchei/): Скетч с форума не собирается с IRremote 4.x: decode(&results) устарел, results.value распался на поля decodedIRData. Таблица замен и скетчи до и после переезда. - [Свой пульт из Arduino: кнопки на макетке шлют sendNEC](https://arduin-arsenal.ru/lesson/irremote/irremote-pult-iz-arduino-sendnec/): Свой пульт из Arduino: три кнопки на макетке, IrSender.sendNEC со своим адресом, повторы при удержании и вторая плата в роли приёмника. Коды и проверка камерой. - [TSOP4838 и VS1838B: что живёт внутри трёх ног приёмника](https://arduin-arsenal.ru/lesson/irremote/irremote-tsop4838-vs1838-moduli/): TSOP4838 и VS1838B изнутри: несущая 38 кГц, открытый коллектор и подтяжка, конденсатор у ног питания, распиновка и стенд диагностики мёртвого модуля. - [Пульт-диммер: клик — шаг, удержание — разгон](https://arduin-arsenal.ru/lesson/irremote/irremote-dimmer-klik-uderzhanie/): Диммер с ИК-пульта как в технике: клик даёт мелкий шаг, удержание собирает серию кадров и разгоняется, OK включает прошлый уровень с плавным подъёмом. - [Обучение пульта: привязки кнопок к действиям в RAM](https://arduin-arsenal.ru/lesson/irremote/irremote-obuchenie-priviazok-ram/): Режим обучения по кнопке платы: первый адрес становится хозяином сессии, кнопки пульта назначаются слотам-действиям. Таблица привязок в RAM до перезагрузки. - [Счётчик посетителей: два луча 38 кГц, направление и EEPROM](https://arduin-arsenal.ru/lesson/irremote/irremote-schetchik-posetitelei-dva-lucha/): Счётчик вход/выход на двух ИК-лучах: кадры NEC вместо непрерывного света, направление по порядку пересечений, счётчики в EEPROM и отчёт по Serial. - [Таймер розетки на пульте: реле гасит нагрузку по счёту](https://arduin-arsenal.ru/lesson/irremote/ik-timer-rozetki-pultom/): ИК-таймер розетки: цифры задают срок, OK гасит сразу, светодиод дышит, пока идёт отсчёт. Активный LOW реле-модуля, отсчёт на millis и границы доверия. - [Кнопка тишины: Arduino-двойник mute для колонки](https://arduin-arsenal.ru/lesson/irremote/ik-knopka-tishiny-mute/): Кнопка на макетке шлёт sendNEC с адресом колонки: mute одним кадром без повторов, антидребезг по фронту и главная ловушка — Arduino не знает, включён ли звук. - [Цикл сцен ночника: один код шагает по кольцу](https://arduin-arsenal.ru/lesson/irremote/ik-sceny-nichnika-ciklom/): Одна кнопка пульта листает сцены ночника по кольцу: выкл, ночник, дремота, ярко. Машина состояний с замком шага против серии кадров и плавным доездом ШИМ. - [IRremote 4.x: что изменилось и как мигрировать старые скетчи](https://arduin-arsenal.ru/lesson/irremote/irremote-v4-migraciya/): Миграция на IRremote 4.x: IrReceiver.begin вместо enableIRIn, decodedIRData вместо results.value, таблица замен и диагноз по строкам компилятора за вечер. - [Свой ИК-пульт: IrSender и sendNEC](https://arduin-arsenal.ru/lesson/irremote/irremote-peredatchik-sendnec/): Собираем ИК-пульт на IrSender: диод 940 нм через резистор 100–150 Ом, sendNEC с адресом и повторами, дальность от тока и ловушка эха собственных кадров. - [ИК-барьер: приёмник как датчик пересечения](https://arduin-arsenal.ru/lesson/irremote/irremote-baryer/): ИК-барьер на TSOP: почему непрерывная подсветка ослепляет приёмник, как спасают короткие пачки 38 кГц и как считать пересечения турникетом с замком. - [Робот с пульта: танковая схема на двух моторах](https://arduin-arsenal.ru/lesson/irremote/irremote-robot-tanks/): Танковая схема на двух моторах: IN1/IN2 и ШИМ-скорость, поворот на месте разностью оборотов, гашение авто-повтора пульта и ток моторов против USB. - [ИК-удлинитель: ловим пульт — повторяем на другой комнате](https://arduin-arsenal.ru/lesson/irremote/irremote-retranslyator/): ИК-удлинитель на Arduino: приёмник на D2 ловит пульт, IrSender на D3 повторяет кадр в тумбу, задержка 100-150 мс и защита от эха собственного света. - [Макрос-кнопка: последовательности команд на одном пульте](https://arduin-arsenal.ru/lesson/irremote/irremote-posledovatelnosti/): Одна кнопка пульта запускает цепочку свет → серво → реле: конечный автомат на millis с шагами 500 мс, прерывание другой кнопкой и таблица макросов. - [Первые коды пульта: IrReceiver.begin и decode](https://arduin-arsenal.ru/lesson/irremote/irremote-decode-razbor-kadra/): Разбираем decodedIRData по полям: command, address, flags, numberOfBits. Что decode() делает с вспышками ИК, почему кадры теряются и что печатать при UNKNOWN. - [Протокол NEC: биты, адрес и команда](https://arduin-arsenal.ru/lesson/irremote/irremote-nec-bity-adres-komanda/): Анатомия кадра NEC: лидер 9 мс, биты длиной паузы, инверсия байтов. Как из 32 бит достать адрес и команду и отфильтровать чужой пульт по decodedIRData.address. - [RC5, Sony SIRC, RAW: другие протоколы ИК](https://arduin-arsenal.ru/lesson/irremote/irremote-rc5-sony-raw/): SIRC шлёт 12/15/20 бит длиной вспышки, RC5 — манчестером с toggle-битом, RAW — диктофон длительностей. Учим декодер IRremote понимать пульты вне NEC. - [Два приёмника в одной комнате: зоны приёма и приоритет](https://arduin-arsenal.ru/lesson/irremote/irremote-dva-priemnika-zony/): Два TSOP в разных концах комнаты: выходы на один пин как открытый коллектор, свой опрос двух зон с приоритетом, фильтр брака и лог зоны в Serial. - [ИК-мост в MQTT: пульт как пульт умного дома](https://arduin-arsenal.ru/lesson/irremote/irremote-mqtt-most-homeassistant/): Пульт как пульт умного дома: мост IRremote в MQTT на ESP8266, топики и payload, фильтр повторов, статус моста и обратный мост на кондиционер. - [Шторы на сервоприводе: пульт открывает и закрывает](https://arduin-arsenal.ru/lesson/irremote/irremote-shtory-servo-pult/): Автомат штор open, opening, closing, closed: ход по градусу на millis, пауза кнопкой пульта посреди движения, концевые защиты по углу и питание серво. - [Удержание кнопки: repeat-кадры NEC](https://arduin-arsenal.ru/lesson/irremote/irremote-nec-repeat-kadry/): Пульт шлёт кадр-повтор каждые 108 мс, пока кнопку держат. Читаем флаг повтора в flags, разбираемся с 0xFFFFFFFF старых версий и делаем плавный шаг громкости. - [Управляем светодиодом пультом: карта кодов](https://arduin-arsenal.ru/lesson/irremote/irremote-svetodiod-karta-kodov/): Собираем карту кодов: кнопка, код, действие. Switch по decodedIRData.command, светодиод и RGB как цели, мигание на millis и грабля чужих таблиц кодов. - [Сканер кодов: таблица кнопок своего пульта](https://arduin-arsenal.ru/lesson/irremote/irremote-skaner-kodov-tablitsa/): Снимаем дамп всех кнопок в Serial Monitor и храним таблицу в шапке скетча. Сканер с памятью кодов, разметка пульта с дублями и правило resume на каждый кадр. - [Помехи ИК-приёмнику: LCD-подсветка, лампы, солнце](https://arduin-arsenal.ru/lesson/irremote/ik-pomehi-svet-lampy-solnce/): Ложные команды без пульта: диммер, люминесцентные лампы, солнце, LCD-подсветка. Счётчик кадров найдёт виновника, плёнка и разворот линзы вернут дальность. - [IRremote и Timer2: конфликт таймеров библиотек](https://arduin-arsenal.ru/lesson/irremote/irremote-tajmer2-tone-servo/): Почему tone() глушит ИК-приём на Uno: Timer0 у millis, Timer1 у Servo, Timer2 у tone и IRremote. Обходы: stopTimer, restartTimer, IR_USE_AVR_TIMER1. - [IrReceiver.resume: неблокирующее чтение в loop](https://arduin-arsenal.ru/lesson/irremote/irremote-resume-neblokiruyushij-loop/): Цикл приёма без delay: decode, скопировать команду, resume, обработка после. Почему без resume приёмник молчит и как millis-задачи живут рядом с пультом. - [ИК-светодиод 940 нм: передатчик своими руками](https://arduin-arsenal.ru/lesson/irremote/ik-svetodiod-940-peredatchik/): Резистор 33–150 Ом и ток 20–100 мА в импульсе, дальность 1–5 м против угла свечения 20–60 градусов: собираем ИК-передатчик и усиливаем транзистором. - [IrSender.sendNEC: шлём команды как пульт](https://arduin-arsenal.ru/lesson/irremote/irremote-irsender-sendnec/): IrSender.begin и sendNEC(адрес, команда, повторы): четыре байта кадра NEC, эмуляция пульта ТВ и колонки, repeat-кадры для удержания громкости. - [Свой пульт: Arduino управляет медиатехникой](https://arduin-arsenal.ru/lesson/irremote/irremote-svoi-pult-scenarii/): Таблица кодов своей техники, кнопки на плате шлют sendNEC, сценарий одной кнопкой: свет, ТВ и колонка слушаются Arduino вместо трёх пультов. - [RAW-коды: считываем и копируем неизвестный пульт](https://arduin-arsenal.ru/lesson/irremote/irremote-raw-neizvestnyi-pult/): Пульт печатает UNKNOWN: снимаем кадр целиком printIRResultRawlinated, переносим длительности в массив и играем обратно sendRaw. RAM-математика длинных кадров. - [IRremoteESP8266: пульты на ESP32 и ESP8266](https://arduin-arsenal.ru/lesson/irremote/ik-irremoteesp8266-esp32/): Своя библиотека для ESP8266 и ESP32: старое API IRrecv и decode_results, константа kIrLed, аппаратная передача через RMT. Приёмник на 3.3 В и грабли пинов. - [Кондиционер по ИК: протоколы климатической техники](https://arduin-arsenal.ru/lesson/irremote/ik-kondicioner-midea-protokol/): Кадр кондиционера несёт всё состояние: градусы, режим, жалюзи, бип. Разбираем Midea по байтам, включаем IRac и IRMideaAc, снимаем сниффером и играем sendRaw. - [ИК-шлюз: кнопка пульта превращается в HTTP](https://arduin-arsenal.ru/lesson/irremote/irremote-ik-shlyuz-http/): Кнопка пульта превращается в HTTP GET на ESP32: конвейер принять-распознать-отправить, resume до запроса, карта код-URL и таймауты против блокирующего GET. - [Робот на ИК-командах: пульт и драйвер моторов](https://arduin-arsenal.ru/lesson/irremote/irremote-robot-ik-l298n/): Машинка на пульте и L298N: ENA и IN1-IN4, скорость от repeat-кадров, стоп по millis-таймауту с последнего кадра и раздельное питание без перезагрузок платы. - [Несколько пультов: разделение по адресу устройства](https://arduin-arsenal.ru/lesson/irremote/irremote-neskolko-pultov-adres/): Фильтр по decodedIRData.address разводит пульты ТВ, колонки и приставки: ловушка безымянных пультов с адресом 0x00 и роутер команд на три устройства. - [Регулировка яркости с пульта: плюс и минус](https://arduin-arsenal.ru/lesson/irremote/irremote-yarkost-plus-minus/): Яркость с ИК-пульта по-взрослому: гистерезис шага 150 мс против рывков повтора NEC, плавный доезд через millis, constrain 0-255 и ШИМ-пин без Таймера 2. - [Меню по ИК: выбор режима пультом](https://arduin-arsenal.ru/lesson/irremote/irremote-menu-rezhimov-ik/): Меню на ИК-пульте: CH+ и CH- листают пункты, OK запускает режим, EQ возвращает назад. Конечный автомат из двух состояний, LCD 16x2 и три режима прибора. - [Обратная связь: ИК-пульт плюс LCD-экран](https://arduin-arsenal.ru/lesson/irremote/irremote-lcd-obratnaya-svyaz/): Показываем принятую ИК-кнопку на LCD 16x2 по I2C: карта кодов и имена, отладка со счётчиком кадров, обновление экрана только при смене команды. - [Дальность и геометрия ИК: почему через стену нельзя](https://arduin-arsenal.ru/lesson/irremote/ik-dalnost-geometriya/): Оптика ИК-канала на 940 нм: почему сигнал не проходит стену, что делают отражения от потолка, конус приёма VS1838B и три рычага дальности — ток, линза, бленда. - [Свой протокол: шлём команды между двумя Arduino](https://arduin-arsenal.ru/lesson/irremote/irremote-svoj-protokol-dve-platy/): Пара передатчик и приёмник на IRremote: словарь команд с адресом устройства, кадры NEC со встроенной проверкой, повторы с паузами и подтверждение приёма бипом. - [Тестер пультов: стенд проверки батареек и кнопок](https://arduin-arsenal.ru/lesson/irremote/irremote-tester-pultov-stend/): Стенд-диагност для ИК-пультов: паспорт кадра в Serial, счётчик кадров за минуту, таблица срабатываний по кнопкам и разбор симптомов слабеющей батарейки. - [Читаем кнопки любого ИК-пульта](https://arduin-arsenal.ru/lesson/irremote/irremote-priem-kodov/): Подключаем ИК-приёмник TSOP4838 к Arduino и читаем кнопки любого пульта через IRremote: decodedIRData.command, протокол NEC на 32 бита и своя таблица кодов. - [Управляем светом с пульта: команды и повтор](https://arduin-arsenal.ru/lesson/irremote/irremote-upravlenie/): Управляем светом с ИК-пульта: switch по decodedIRData.command, ловим автоповтор NEC флагом IRDATA_FLAGS_IS_REPEAT и держим яркость PWM в границах. ## MQTT — PubSubClient (https://arduin-arsenal.ru/section/mqtt/) Протокол интернета вещей: публикуем данные датчиков, подписываемся на команды, строим умный дом на ESP32 и MQTT. Уровень: advanced. Уроков: 65. Обновлён: 2026-09-22. - [MQTT простыми словами: издатель, подписчик, брокер](https://arduin-arsenal.ru/lesson/mqtt/mqtt-pub-sub-osnovy/): Модель pub-sub на пальцах: кто такой издатель, подписчик и брокер, почему платам не нужны адреса друг друга и когда MQTT честнее HTTP для коротких событий. - [Mosquitto: свой брокер на Raspberry Pi и ПК](https://arduin-arsenal.ru/lesson/mqtt/mosquitto-broker-ustanovka/): Ставим брокер Mosquitto на Raspberry Pi и ПК: apt install, тест mosquitto_sub и mosquitto_pub из консоли, конфиг listener для платы из домашней сети. - [PubSubClient: установка библиотеки и первый скетч](https://arduin-arsenal.ru/lesson/mqtt/pubsubclient-pervyj-skech/): Первый скетч на PubSubClient: установка через Library Manager, client.connect с проверкой, publish с кодом возврата, client.loop и таблица кодов client.state(). - [Групповые команды: топики для всех устройств](https://arduin-arsenal.ru/lesson/mqtt/mqtt-gruppovye-komandy-topiki/): Один топик home/all/light включает свет во всей квартире: две подписки на плате, приоритет локальной команды и ловушка эха, когда отчёт возвращается в группу. - [Мониторинг брокера: mosquitto_sub и логи](https://arduin-arsenal.ru/lesson/mqtt/mqtt-monitoring-brokera-sys/): Стетоскоп для MQTT: сырой поток mosquitto_sub -v, пульс $SYS с числом клиентов и сообщений в секунду, логи Mosquitto и три находки мониторщика. - [Итоговый проект: умный дом на MQTT и Home Assistant](https://arduin-arsenal.ru/lesson/mqtt/mqtt-itogovyj-proekt-home-assistant/): Финальная сборка MQTT-дома: карта топиков, статусы через LWT и retain, discovery-паспорты для Home Assistant, групповой свет и контрольная таблица проверок. - [Светильник с яркостью: команда set → плавный переход](https://arduin-arsenal.ru/lesson/mqtt/mqtt-svetilnik-yarkost-plavno/): Payload 128 на cmd/light: парсинг яркости, плавный переход шагом 2 за 15 мс и отчёт state/light по достижению. Слайдер 0-255 из Home Assistant без рывков. - [RGB-лента как индикатор: сеть, брокер, устройства](https://arduin-arsenal.ru/lesson/mqtt/mqtt-rgb-status-brokera/): Фиолетовый мигает — нет сети, красный — брокер молчит, зелёный — всё ок, белая вспышка — команда пришла. RGB-индикатор связи на пинах 9/10/11 без delay. - [Реле с гарантией: QoS 1 и подтверждение команды](https://arduin-arsenal.ru/lesson/mqtt/mqtt-rele-qos1-podtverzhdenie/): Команда с номером, ack-топик, таймаут 3 секунды и до трёх повторов. Почему PUBACK не значит «исполнено» и как выглядит журнал подтверждений реле. - [Счётчик воды: геркон, импульсы и публикация](https://arduin-arsenal.ru/lesson/mqtt/mqtt-schetchik-vody-impulsy/): Геркон на счётчике воды: импульс за литр или десять, антидребезг 50 мс на millis, счёт литров в переменной и публикация раз в минуту с JSON и retain. - [Рестарт без потерь: подписка на свои топики при старте](https://arduin-arsenal.ru/lesson/mqtt/mqtt-vosstanovlenie-statusov-restart/): Почему подписку держат в reconnect, а не в setup: PubSubClient забывает топики. Retained-статусы возвращают команды, отправленные плате во время простоя. - [Гибрид: веб-панель ESP32 + MQTT-брокер в одном устройстве](https://arduin-arsenal.ru/lesson/mqtt/mqtt-web-panel-gibrid/): Один ESP32 держит веб-панель и MQTT-клиент сразу: состояние в общих переменных, HTML-фрагмент с JS-таймером опроса, кооперативный цикл без delay и цена RAM. - [Last Will и retain: как подписчик узнаёт, что плата умерла](https://arduin-arsenal.ru/lesson/mqtt/mqtt-lwt-retained-zaveshanie/): Кто и когда раздаёт Last Will, что получает подписчик и зачем завещанию willRetain: механика брокера, скетч с волей в connect и окно незнания в 22 секунды. - [QoS 0, 1 и 2: за что плата платит за надёжность](https://arduin-arsenal.ru/lesson/mqtt/mqtt-qos-cena-nadezhnosti/): Сколько пакетов стоит QoS 0, 1 и 2, почему PubSubClient публикует только с нулевым и как строить надёжность поверх: дубликаты, пульсы, абсолютные команды. - [Сырые значения против JSON: сколько байт весит ваш payload](https://arduin-arsenal.ru/lesson/mqtt/mqtt-payload-json-vs-syroe/): Сколько байт весит MQTT-пакет: считаем заголовки, сравниваем сырой payload с JSON, ищем границу окупаемости документа и ловим payload без нуля на конце. - [Один callback на все топики: маршрутизация внутри setCallback](https://arduin-arsenal.ru/lesson/mqtt/mqtt-callback-marshrutizaciya-topikov/): Один setCallback ловит все подписки: что лежит в topic, payload и length, как разобрать строку топика startsWith и indexOf и развести ветки на светодиод и реле. - [Команды из облака: валидация payload перед действием](https://arduin-arsenal.ru/lesson/mqtt/mqtt-komandy-iz-oblaka-validaciya/): Команда из брокера не равна правде: словарь, длина, диапазон, JSON-контракт с containsKey и типами — реле щёлкает только от проверенных payload. - [Агрегатор статусов: home/+/state и сводка с устройств в одну строку](https://arduin-arsenal.ru/lesson/mqtt/mqtt-agregator-statusov-svodka/): Подписка home/+/state собирает статусы комнат: имя узла из топика, свежесть значений по millis и сводка одной строкой в Serial по таймеру и запросу. - [Обрыв связи как state-машина: экспонента вместо delay(5000)](https://arduin-arsenal.ru/lesson/mqtt/mqtt-mashina-sostoyanij-svyazi/): Обрыв связи как машина состояний: ONLINE и WAIT, экспоненциальная пауза вручную 500-8000 мс и цена delay(5000) в loop — от слепых кнопок до поджатого keepalive. - [DHT22 в MQTT: раз в 30 секунд, интервал меняет брокер](https://arduin-arsenal.ru/lesson/mqtt/mqtt-dht22-interval-iz-brokera/): DHT22 публикует температуру и влажность JSON-документом раз в 30 секунд по millis, а интервал меняет брокер командой: границы 5-3600 и подтверждение настройки. - [Свет из брокера: цикл команда → действие → статус](https://arduin-arsenal.ru/lesson/mqtt/mqtt-rele-svet-status-cikl/): Свет из брокера по циклу команда → действие → статус: словарь значений в callback, реле щёлкает в loop, ответный топик с retain показывает дашборду правду. - [Схема топиков для дома: четыре уровня и цена решётки](https://arduin-arsenal.ru/lesson/mqtt/mqtt-shema-topikov-cena-reshetki/): Схема топиков как договор дома: четыре уровня с ролями, словарь действий set и state, цена решётки для брокера и случай, когда плоские имена честнее иерархии. - [Телеграм-стиль команд: парсим payload с аргументом](https://arduin-arsenal.ru/lesson/mqtt/mqtt-komanda-s-argumentom/): Команда с аргументом в payload MQTT: глагол до пробела, ловушки toInt на стыке строки и числа, границы аргумента и ответ-эхо в отдельный топик. - [Ночной режим по расписанию: брокер публикует режим, платы слушают](https://arduin-arsenal.ru/lesson/mqtt/mqtt-nochnoj-rezhim-po-raspisaniyu/): Ночной режим по расписанию: брокер публикует режим с retain, платы трактуют его по-своему, кнопка даёт обход с тайм-аутом — без восьми таймеров и перепрошивок. - [Оффлайн-буфер: копилка показаний на время отвала](https://arduin-arsenal.ru/lesson/mqtt/mqtt-oflajn-bufer-kolcevoj/): Плата без сети копит показания в кольцевой буфер: что копить, сколько влезает в RAM Uno, что затирается при переполнении и когда историю честно выбросить. - [Раздача копилки после reconnect: пачка с паузами и метки времени](https://arduin-arsenal.ru/lesson/mqtt/mqtt-razdacha-bufra-reconnect/): Копилка полна, сеть вернулась: темп раздачи 50 мс между публикациями, метки ts в payload, порядок старое-первым и почему пачку едут по одной точке, а не циклом. - [Подвисший сокет: setSocketTimeout против тихого зависания](https://arduin-arsenal.ru/lesson/mqtt/mqtt-podvisshij-soket-setsockettimeout/): Реле работает, Serial молчит: loop застрял в чтении мёртвого TCP. Где спрятаны пятнадцать секунд ожидания по умолчанию и что меняет метод setSocketTimeout. - [Last Will и Retain: пусть брокер расскажет, что устройство умерло](https://arduin-arsenal.ru/lesson/mqtt/mqtt-lastwill-retain/): Завещание в аргументах connect и retain-память брокера: статус датчика online/offline для Home Assistant, окно тишины и подвох с disconnect(). - [QoS 0, 1, 2: что выбрать для датчика температуры](https://arduin-arsenal.ru/lesson/mqtt/mqtt-qos-vybor/): Три уровня доставки MQTT по пакетам: fire-and-forget для телеметрии, PUBACK для команд и почему у publish в PubSubClient нет аргумента QoS вовсе. - [Управление светом из Home Assistant: топики и JSON-payload](https://arduin-arsenal.ru/lesson/mqtt/mqtt-ha-svet/): Схема command/state/availability для светильника: строки ON/OFF против JSON с яркостью 0-255, подтверждение команды фактом и короткий callback без разрывов. - [Буфер PubSubClient и RAM: ужимаемся на ESP8266](https://arduin-arsenal.ru/lesson/mqtt/mqtt-bufer-pamyat/): Один буфер на приём и передачу: длинное входящее пропадает молча, соединение живо. Сколько RAM на деле у ESP8266 и какой потолок payload у Uno, ESP8266 и ESP32. - [Несколько подписок и один callback: разбор топиков](https://arduin-arsenal.ru/lesson/mqtt/mqtt-mnogo-podpisok/): Три подписки и один callback: strcmp по топику без String, приоритет конкретного над общим, wildcard против россыпи и двойная доставка при перекрытии фильтров. - [Датчик на батарейке: deep sleep + MQTT-публикация раз в час](https://arduin-arsenal.ru/lesson/mqtt/mqtt-batarejka-son/): Цикл батарейного датчика: рукопожатие Wi-Fi и MQTT съедает секунды, публикация — миг. disconnect перед сном и честный бюджет мА·ч для 18650 и CR2032. - [Подключение ESP32 к брокеру: ID клиента и статусы](https://arduin-arsenal.ru/lesson/mqtt/mqtt-clientid-statusy-podkluchenia/): Коды client.state() от -4 до 5, почему connect возвращает rc=-2, правила clientId и живая диагностика Mosquitto. Скетч, который сам называет причину отказа. - [client.publish: публикуем показания датчика](https://arduin-arsenal.ru/lesson/mqtt/mqtt-publish-pokazaniya-millis/): Публикация показаний из неблокирующего millis-цикла: payload строкой, String(t,1) и c_str(), выбор периода и цена слишком частых сообщений для брокера. - [subscribe и callback: подписка на команды](https://arduin-arsenal.ru/lesson/mqtt/mqtt-subscribe-callback-komandy/): Как broker доставляет команды в плату: подписка, callback в PubSubClient, payload как байты, разбор по топику, флаг-паттерн и валидация сообщений с сервера. - [MQTT через Ethernet W5500: проводной клиент, когда WiFi не нужен](https://arduin-arsenal.ru/lesson/mqtt/mqtt-ethernet-w5500-klient/): W5500 и EthernetClient под PubSubClient: DHCP против статики, грабли CS-пина 10 и SD-карты, сброс после питания. Провод против WiFi: пинг и ток в цифрах. - [Кнопка-публикатор: отправляем событие по нажатию, а не по циклу](https://arduin-arsenal.ru/lesson/mqtt/mqtt-knopka-publikator-sobytie/): Кнопка в MQTT: публикация на фронте нажатия с антидребезгом 25-50 мс, событие против состояния, буфер одного события при обрыве и выбор между QoS 0 и QoS 1. - [Версия прошивки в payload: поле fw и совместимость клиентов](https://arduin-arsenal.ru/lesson/mqtt/mqtt-versiya-proshivki-polya/): Поле fw в каждом payload: сервер видит, кто на старой прошивке. Semver, сравнение версий числами, правило «добавляй, не переименовывай» и топики v1/v2. - [Retained-сообщения: статус для новых подписчиков](https://arduin-arsenal.ru/lesson/mqtt/mqtt-retained-status/): Публикуем состояние реле с retain: брокер хранит последнее значение и отдаёт его панели сразу при подписке. Что помечать, что нет и как стереть retained. - [Last Will: как брокер узнаёт, что плата умерла](https://arduin-arsenal.ru/lesson/mqtt/mqtt-last-will-lwt/): Завещание в CONNECT: брокер сам публикует offline, когда плата молчит дольше полутора keepalive. Регистрация воли, retain и ловушка со штатным disconnect. - [Дерево топиков для дома: структура и правила](https://arduin-arsenal.ru/lesson/mqtt/mqtt-derevo-topikov/): home/kitchen/temp и home/kitchen/light/set: уровни через слэш, каналы set и status, retained у состояний. Подписка home/+/temp одной строкой на все комнаты. - [Структура топиков: иерархия для умного дома](https://arduin-arsenal.ru/lesson/mqtt/mqtt-struktura-topikov-umnyj-dom/): Правила именования MQTT-топиков: уровни, слэши, регистр, дефисы, кириллица и доллар. Антипаттерны, таблица плохих и хороших имён, схема на десятки плат. - [Retained-сообщения: последний статус всегда актуален](https://arduin-arsenal.ru/lesson/mqtt/mqtt-retained-poslednij-status/): Флаг retain у публикации: брокер хранит последнее сообщение топика и отдаёт его новому подписчику. Что ретейнить, что нет и как снять retained пустым payload. - [QoS 0, 1 и 2: уровни доставки MQTT](https://arduin-arsenal.ru/lesson/mqtt/mqtt-qos-urovni-dostavki/): Гарантии at most, at least и exactly once: обмен PUBACK, PUBREC, PUBREL, PUBCOMP, цена каждого уровня в пакетах и выбор QoS для телеметрии, команд и счётчиков. - [LWT: Last Will и статус офлайн устройства](https://arduin-arsenal.ru/lesson/mqtt/mqtt-lwt-last-will-status/): Завещательное сообщение в MQTT: как ESP32 прощается с брокером при отвале, связка retained online и offline, топик статуса и от чего завещание не спасает. - [KeepAlive и PingReq: почему клиент отваливается](https://arduin-arsenal.ru/lesson/mqtt/mqtt-keepalive-pingreq-otsval/): Почему PubSubClient рвёт связь: PINGREQ и окно keepalive, setKeepAlive, блокирующий delay дольше окна, NAT-роутеры с таймаутами и диагностика отвала с gap_max. - [Home Assistant: подключение устройства через MQTT](https://arduin-arsenal.ru/lesson/mqtt/mqtt-home-assistant-podklyuchenie/): Подключаем ESP32 к Home Assistant через MQTT: брокер-аддон, сущности sensor и switch в configuration.yaml, state_topic и command_topic, тест mosquitto_pub. - [MQTT Discovery: датчик температуры в Home Assistant](https://arduin-arsenal.ru/lesson/mqtt/mqtt-discovery-ha-datchik/): Датчик сам регистрируется в Home Assistant: discovery-топик homeassistant/sensor/…/config, поля name и state_topic, retain и отладка через mosquitto_sub. - [Свет из Home Assistant: команда на ESP32](https://arduin-arsenal.ru/lesson/mqtt/mqtt-ha-svet-komanda/): Команда, действие, отчёт: подписка на cmd-топик, реле на D7 и публикация фактического состояния. Физическая кнопка меняет свет синхронно с Home Assistant. - [Wildcard-подписки: плюс и решётка в топиках](https://arduin-arsenal.ru/lesson/mqtt/mqtt-wildcard-plyus-reshetka/): Плюс ловит ровно один уровень, решётка — всю ветку: home/+/temp, home/#, служебные $SYS-топики, цена широкой подписки для батарейки и разбор топика в callback. - [JSON в payload: структурированные сообщения MQTT](https://arduin-arsenal.ru/lesson/mqtt/mqtt-json-payload-struktura/): Один топик с JSON против трёх: ArduinoJson собирает документ на отправке и разбирает на приёме, цена вложенности в байтах и случаи, когда три топика лучше. - [setBufferSize: большие сообщения в PubSubClient](https://arduin-arsenal.ru/lesson/mqtt/mqtt-bufer-pubsubclient-512/): Буфер PubSubClient по умолчанию 256 байт: почему длинный discovery-JSON молча не уходит, как поднять лимит setBufferSize и чем это платит RAM на Uno и ESP32. - [reconnect без блокировки: цикл с millis](https://arduin-arsenal.ru/lesson/mqtt/mqtt-reconnect-millis-backoff/): client.connect блокирует loop на секунды: переводим восстановление связи на millis-таймер с состоянием и backoff 5-10-30 секунд, а датчики и индикация живут. - [MQTT в кооперативном цикле: вместе с мигалками](https://arduin-arsenal.ru/lesson/mqtt/mqtt-kooperativnyi-cikl-blinker/): Мигалка на millis и client.loop() в одном loop: сколько съедает каждая задача, почему delay рвёт keepalive и как собрать кооперативный цикл без единой паузы. - [TLS для MQTT: шифруем канал](https://arduin-arsenal.ru/lesson/mqtt/mqtt-tls-wificlientsecure-8883/): WiFiClientSecure, порт 8883 и setCACert: переносим MQTT на шифрованный канал, считаем RAM и секунды handshake, проверяем, чем опасен setInsecure. - [Логин, пароль и ACL: доступ к брокеру](https://arduin-arsenal.ru/lesson/mqtt/mqtt-paroli-acl-mosquitto/): allow_anonymous false, mosquitto_passwd и ACL: кто какой topic читает и пишет, pattern home/%u/# и почему один пароль на все платы — худший вариант. - [Публичные брокеры: test.mosquitto.org и HiveMQ](https://arduin-arsenal.ru/lesson/mqtt/mqtt-publicnye-brokery-test-hivemq/): Порты test.mosquitto.org: 1883, 8883 и 8080, риски открытых брокеров, уникальные префиксы топиков, этика общей площадки и план переезда на свой Mosquitto. - [Мосты Mosquitto: связываем два брокера](https://arduin-arsenal.ru/lesson/mqtt/mqtt-mosty-mosquitto-dva-brokera/): Bridge в mosquitto.conf: connection, address, topic out/in/both. Как дачный брокер дотягивается до облака из-за NAT, как фильтровать ветки и не поймать петлю. - [Публичный тест на практике: mosquitto_pub/sub и логи](https://arduin-arsenal.ru/lesson/mqtt/mqtt-monitoring-pub-sub-logi/): Отладка MQTT в терминале: mosquitto_sub -t # -v, mosquitto_pub с командой, log_type all в Mosquitto, охота на топики-призраки и чтение трафика по журналу. - [Контроль связи: LWT на практике](https://arduin-arsenal.ru/lesson/mqtt/mqtt-lwt-indikator-svyazi/): Last will и heartbeat: плата оставляет брокеру завещание, дашборд узнаёт об отвале за 20 секунд. Скетч с birth-сообщением и подпиской home/+/status. - [Индикатор офлайн: ретейн плюс Last Will](https://arduin-arsenal.ru/lesson/mqtt/mqtt-offline-indikator-retain-lwt/): Полный скетч статуса: retained online при подключении, offline от брокера при отвале. QoS 1, тест вилкой и ловушка третьего аргумента publish. - [MQTT Dash на телефоне: панель управления](https://arduin-arsenal.ru/lesson/mqtt/mqtt-dash-telefon-panel/): Панель на телефоне без программирования: виджеты MQTT Dash, привязка кнопок и меток к топикам, грабли мобильных сетей и безопасность домашней панели. - [MQTT: как устроен протокол умного дома](https://arduin-arsenal.ru/lesson/mqtt/mqtt-ustrojstvo-protokola/): Как устроен MQTT: брокер, топики, publish и subscribe, уровни QoS и порт 1883. Поднимаем mosquitto и публикуем показания датчика в виртуальный брокер. - [ESP32 публикует данные датчиков в MQTT](https://arduin-arsenal.ru/lesson/mqtt/mqtt-esp32-publikaciya/): ESP32 подключается к Wi-Fi и MQTT: WiFi.begin, reconnect-логика без пауз, client.loop() в millis-цикле и публикация home/temp каждые 10 секунд с датчика DHT22. ## SD-карта и файловая система (https://arduin-arsenal.ru/section/sd/) Записываем данные датчиков на SD-карту: инициализация, файлы, CSV-логи, конфиги и типовые проблемы питания. Уровень: intermediate. Уроков: 62. Обновлён: 2026-09-22. - [Модуль SD-карты: что внутри и как подключить](https://arduin-arsenal.ru/lesson/sd/sd-modul-ustrojstvo/): Контроллер, стабилизатор AMS1117 и резисторные делители: разбираем устройство типового SD-модуля за сотню рублей и чем он отличается от голой карты. - [Подключение SD по SPI: CS, MOSI, MISO, SCK](https://arduin-arsenal.ru/lesson/sd/sd-spi-raspinovka/): Распиновка SD-модуля на Uno и Nano: CS на D10, MOSI D11, MISO D12, SCK D13 — и как делить шину SPI с дисплеем или RFID-модулем без конфликтов. - [SD.begin: инициализация и типовые ошибки](https://arduin-arsenal.ru/lesson/sd/sd-begin-diagnostika/): SD.begin вернул false: проверяем питание 5 В, провод CS и формат карты FAT16/FAT32 — диагностика отказа инициализации по возвращаемому значению. - [Картинка BMP на дисплей: данные с карты](https://arduin-arsenal.ru/lesson/sd/sd-bmp-tft-kartinka/): Как прочитать BMP с SD-карты: смещение пикселей, ширина и высота в заголовке, 24 бита в RGB565 для TFT, bottom-up строки и паддинг, конвертация заранее. - [Диагностика SD: коды ошибок и шаги проверки](https://arduin-arsenal.ru/lesson/sd/sd-diagnostika-cheklist/): Методика диагностики SD: скетч CardInfo, тип карты и FAT-объём, код отказа инициализации, чек-лист из шести шагов в таблице и разбор мусора в данных. - [Итоговый проект: автономный даталоггер с RTC](https://arduin-arsenal.ru/lesson/sd/sd-datalogger-rtc-itog/): Финальный прибор раздела: DHT и LDR, метки времени от DS3231, CSV с ротацией по размеру, кнопка старт-стоп сессии, светодиод записи и чек-лист запуска. - [Маркеры событий: кнопка ставит отметку в лог](https://arduin-arsenal.ru/lesson/sd/sd-marka-sobytij-knopka/): Кнопка-маркер на D3 пишет строку MARK,name=N с меткой секунд в тот же CSV, где идёт поток DHT: фронт с антидребезгом, LED-подтверждение, границы миллис-метки. - [Буферная запись: пишем пакетами, не теряем при записи](https://arduin-arsenal.ru/lesson/sd/sd-bufer-paketnaya-zapis/): RAM-буфер на восемь строк и пакетная запись File.print в цикле: одна пауза вместо восьми, окно потерь при сбое в таблице и flush кнопкой перед выключением. - [Выгрузка лога: файл с карты на компьютер через Serial](https://arduin-arsenal.ru/lesson/sd/sd-vygruzka-loga-serial/): Выгружаем log.csv с карты на компьютер через Serial: команда dump, сырой CSV с решёткой для служебных строк, LED-прогресс и приёмник на pyserial. - [Модуль SD на общей шине: CS по умолчанию и WiFi-шилд](https://arduin-arsenal.ru/lesson/sd/sd-cs-shild-obschaya-shina/): SD.begin() без аргумента берёт пин 10: на Ethernet-шилде карта сидит на 4, а сетевой чип на 10. Правило одного LOW на шине SPI, делители и уровни модуля. - [Цикл сессии файла: open, write, close и сверка чтением](https://arduin-arsenal.ru/lesson/sd/sd-open-write-close-sessiya/): Сессия файла как контракт: FILE_WRITE создаёт и дописывает, FILE_READ требует готового файла, write несёт байты, а сверка чтением ловит недописанный сектор. - [Логгер света: интервал на millis и извлечение карты](https://arduin-arsenal.ru/lesson/sd/sd-logger-svet-izvlechenie/): Фоторезистор на A1, строка раз в 5-60 секунд: интервал на millis без дрейфа, pot крутит частоту, LED — окно записи, кнопка закрывает файл перед извлечением. - [Читаем файл построчно: две техники и CSV-значения](https://arduin-arsenal.ru/lesson/sd/sd-postrochnoe-chtenie-csv/): Построчное чтение файла с SD: посимвольный цикл против readStringUntil, буфер фиксированной длины и парсер конфига, где значение — список чисел через запятую. - [Директории на SD: путь, имена 8.3 и лимит корня](https://arduin-arsenal.ru/lesson/sd/sd-83-imeni-koren-limit/): Папки на SD: путь со слешем в SD.open, mkdir по одному уровню, короткие имена 8.3 против длинных и лимит записей корня FAT16 — около 512 на файл. - [Дозапись и ротация: exists, режимы open и размер файла](https://arduin-arsenal.ru/lesson/sd/sd-dozapis-append-rotaciya/): Дозапись в лог без потерь: SD.exists перед записью, чем FILE_WRITE на Uno отличается от FILE_WRITE на ESP32, свободное имя и ротация лога по размеру. - [Лог со временем: DS3231 штампует каждую строку и диктует имя файла](https://arduin-arsenal.ru/lesson/sd/sd-log-stroki-ds3231-imya-fajla/): Каждая строка лога со штампом DS3231 и имя файла из даты: LOG0115.CSV по формату 8.3, скетч со sprintf и ловушка сбросившихся часов на 2000-01-01. - [Текст против бинарника: одни показания, разница вчетверо](https://arduin-arsenal.ru/lesson/sd/sd-tekst-protiv-binarnika/): Одна телеметрия в двух форматах: CSV-строка за 26 байт против бинарной записи за 6, суточные объёмы на карте, скорость на Uno и чем открывается каждый формат. - [Скорость записи: блоки по 512 байт и паузы, ломающие ритм](https://arduin-arsenal.ru/lesson/sd/sd-ritm-zapisi-bloki-512/): Uno пишет на SD блоками по 512 байт: буфер библиотеки, паузы 10-50 мс на сброс блока, почему раз в секунду комфортно, а раз в 50 мс уже пропуски строк. - [SD на ESP32: VSPI, HSPI и общая шина с дисплеем](https://arduin-arsenal.ru/lesson/sd/sd-esp32-spi-vspi-hspi/): Пины VSPI и HSPI на классическом ESP32, проводка SD-модуля, карта и дисплей на одной шине SPI: кто держит CS, где конфликтует MISO и на какой частоте гонять. - [Сбой питания при записи: FAT, потерянные кластеры и flush](https://arduin-arsenal.ru/lesson/sd/sd-fat-obryv-pitaniya-klastery/): Что обрыв питания делает с FAT, откуда берутся потерянные кластеры, чем flush отличается от close и как суперконденсатор даёт логгеру секунду на закрытие файла. - [Конфиг с карты: SD → EEPROM → значения по умолчанию](https://arduin-arsenal.ru/lesson/sd/sd-konfig-iyerarhiya-eeprom-defolt/): Читаем настройки с карты при старте, если карты нет — EEPROM, а там пусто — зашитый дефолт: иерархия источников конфига с парсингом и валидацией. - [Экспорт на комп: CSV в таблице и дамп в hex-просмотре](https://arduin-arsenal.ru/lesson/sd/sd-eksport-csv-hex-damp/): Карта из логгера приехала на комп: чем открыть CSV без кривых столбцов, как читать бинарный дамп в hex-просмотре и когда байтовый формат экономит место вдвое - [Погодная станция на неделю без человека: интервал против ресурса](https://arduin-arsenal.ru/lesson/sd/sd-pogodnaya-nedelya-resurs-karty/): Неделя погоды без человека: суточный объём лога, интервал записи против ресурса флеш-ячеек, пакетный flush, файл на сутки и чек-лист перед отъездом с дачи - [Карта в бою: ноль байт из файла, мороз и вынимание под током](https://arduin-arsenal.ru/lesson/sd/sd-boevye-simptomy-nol-bajt-moroz/): Ноль байт из живого файла, карта молчит на морозе, вынимание под током: диагноз и лечение полевых симптомов SD после удачного begin, с самодиагностикой в скетче - [CSV-лог датчика: заголовок, строка на измерение и минутная сессия](https://arduin-arsenal.ru/lesson/sd/sd-csv-log-millis-minuta/): CSV-лог на SD: шапка один раз, строка на измерение, метка от millis и сессия открыт-дописал-закрыл раз в минуту — схема, которая переживает обрыв питания - [SD + RTC: настоящая временная метка и файл на сутки](https://arduin-arsenal.ru/lesson/sd/sd-rtc-shtramp-sutochnye-fajly/): Штамп из DS3231 в строке CSV, имя файла из даты в формате 8.3, ротация файлов по суткам в полночь — и двоеточие, которое молча ломает имя файла на FAT - [Грабли SD-модуля: питание, формат карты, имена и end()](https://arduin-arsenal.ru/lesson/sd/sd-grabli-pitanie-format-imena-end/): Почему SD-модуль не видит карту: питание 3,3 и 5 В, FAT16/FAT32 против exFAT, лимиты имён файлов и SD.end() перед повторным begin — диагноз по порядку - [Логгер климата на SD: DHT + ротация файлов по дням](https://arduin-arsenal.ru/lesson/sd/sd-dht-logger-rotaciya/): Логгер климата на SD: имя файла из счётчика дней, шапка CSV при создании, запись раз в минуту и close после каждой строки — цена сбоя питания в байтах - [Конфиг с SD: читаем settings.txt построчно](https://arduin-arsenal.ru/lesson/sd/sd-konfig-txt/): Читаем settings.txt с SD построчно: readStringUntil, пары key=value, parseInt и parseFloat по ключам, дефолты вместо молчания и CRLF-грабля Windows-блокнота - [Чистка на SD: rename, remove и мусор от записей](https://arduin-arsenal.ru/lesson/sd/sd-rename-remove/): Уборка карты из скетча: SD.rename старого лога в архив, remove для битых файлов, exists перед операцией, ловушка открытого файла и имена 8.3 на классике - [Скорость записи на SD: буферы, flush и паузы](https://arduin-arsenal.ru/lesson/sd/sd-skorost-buferov/): Запись на SD блоками по 512 байт: всплески задержки 10-100 мс на границе кластера, метки времени вокруг записи, flush против close и честные 2-20 КБ/с на Uno - [Автономный логгер на батарейке: сон + SD](https://arduin-arsenal.ru/lesson/sd/sd-loger-batarejka/): Логгер на 3×AA живёт месяцами: ритм сон-просыпание, счётчик сессий в EEPROM, цена SD.begin 100-300 мс после пробуждения и бюджет 2000 мА·ч с полевыми поправками - [SD молчит при begin: диагностика карты](https://arduin-arsenal.ru/lesson/sd/sd-molchit-diagnostika/): SD.begin вернул false: exFAT вместо FAT32, клон «2 ТБ» на 8 ГБ, питание модуля 3,3 В, занятый CS и тайминги SPI — порядок проверки и CardInfo из примеров - [Формат карты: FAT16, FAT32 и размеры](https://arduin-arsenal.ru/lesson/sd/sd-format-fat16-fat32/): Почему SD.h не видит exFAT: FAT16, FAT32 и лимит 32 ГБ, кластеры 4-32 КБ и как правильно разметить microSD для логгера на Arduino. FAT16 для карт до 2 ГБ. - [File и режимы открытия: чтение, запись, добавление](https://arduin-arsenal.ru/lesson/sd/sd-file-rezhimy-otkrytiya/): File как дескриптор: FILE_READ и FILE_WRITE, курсор в конце при дозаписи, перезапись через SD.remove и почему seek(0) оставляет хвост старого файла. - [Запись в файл: println и обязательный close](https://arduin-arsenal.ru/lesson/sd/sd-zapis-println-close/): Как println кладёт строки в буфер 512 байт, что делает close() и flush() и почему ночной лог без close превращается в пустой файл на карте. Раз в 10 секунд. - [Сутки CSV на millis: интервалы и бюджет карты](https://arduin-arsenal.ru/lesson/sd/sd-sutki-log-bez-delay/): Суточный CSV-лог на SD без delay: millis-таймер с переменным интервалом день/ночь, расчёт объёма 1440 строк, контроль байтов через size() и бюджет карты на годы - [SD.begin не поднялся: протокол за десять шагов](https://arduin-arsenal.ru/lesson/sd/sd-begin-fail-desyat-shagov/): Пошаговый протокол локализации отказа SD.begin: питание и CS, дупонты, вторая карта, FAT32 вместо exFAT, конфликт шины — десять шагов и таблица симптомов - [Лог и резервная копия: запись в два файла](https://arduin-arsenal.ru/lesson/sd/sd-dva-fajla-mirror/): Два файла на карте: пишем в основной лог, раз в сутки копируем в резервный и сверяем размер байт в байт — страховка логгера от сбоя карты и обрыва питания - [Чтение файла: available, read и цикл](https://arduin-arsenal.ru/lesson/sd/sd-read-available-cikl/): Чтение лога с SD обратно в скетч: available и read в цикле while, возврат -1, каст char, счётчики байт и строк, скорость Serial на 9600 и close после чтения. - [readStringUntil: парсим строки конфига](https://arduin-arsenal.ru/lesson/sd/sd-readstringuntil-konfig/): Разбор config.txt с SD: readStringUntil и таймаут секунды, trim против \r из блокнота Windows, ловушка toInt с нулём, strtol и дефолты на кривых строках. - [CSV-лог: формат колонок и заголовок](https://arduin-arsenal.ru/lesson/sd/sd-csv-kolonki-zagolovok/): Колонки CSV-лога проектируем заранее: время millis, сырое показание, статус кодом, версия прошивки, шапка первой строкой и запятые внутри данных. - [Логгер DHT: температура и влажность в CSV](https://arduin-arsenal.ru/lesson/sd/sd-dht-logger-csv/): Полный логгер DHT22 на D2: запись в data.csv раз в 10 секунд по millis(), шапка и две колонки, статус каждой записи и счётчик строк в Serial. - [Метки времени: RTC плюс SD в одном логе](https://arduin-arsenal.ru/lesson/sd/sd-rtc-timestamps-log/): DS3231 на I2C и SD-карта на SPI в одном скетче: штамп даты в каждую строку CSV, unixtime против ISO-поля и синхронизация rtc.adjust перед логированием. - [Потеря данных при сбое: sync и питание](https://arduin-arsenal.ru/lesson/sd/sd-flush-sync-pitanie/): Что доезжает до карты при провале питания: буфер 512 байт, flush и close, потерянный кластер FAT, конденсаторы 470-1000 мкФ и правило записал — flush — жив. - [Циклическая запись: перезапись старых логов](https://arduin-arsenal.ru/lesson/sd/sd-rotaciya-logov/): Лог растёт, карта кончается: myFile.size() против лимита 1 МБ, ротация закрыл-переименовал-открыл, счётчик номеров в EEPROM и когда циклическая запись нужна. - [Конфиг с карты: текстовый файл настроек](https://arduin-arsenal.ru/lesson/sd/sd-config-key-value/): Пороги, интервалы и имя устройства в config.txt на карте: разбор строк ключ-значение, досмотр диапазонов, дефолты при отсутствии файла — всё без перепрошивки. - [JSON-конфиг на SD: ArduinoJson и файлы](https://arduin-arsenal.ru/lesson/sd/sd-json-config-arduinojson/): JSON-конфиг с SD-карты: readFile, deserializeJson, containsKey и досмотр диапазонов; вложенность и массивы против key=value, цена RAM — 512-1024 байта на Uno. - [Список файлов карты: openNextFile](https://arduin-arsenal.ru/lesson/sd/sd-opennextfile-spisok-failov/): Как вывести оглавление SD-карты в Serial: dir.openNextFile() в цикле, имена и размеры файлов, порядок записей FAT, рекурсия по папкам и ловушки 8.3-имён. - [remove и rename: управление файлами из скетча](https://arduin-arsenal.ru/lesson/sd/sd-remove-rename-upravlenie/): SD.remove, SD.exists и File.rename: ротация логов из скетча, пустой файл через FILE_WRITE, rename с бэкапом и кнопка-защита с тумблером от лишнего удаления. - [Папки на SD: mkdir и структура архива](https://arduin-arsenal.ru/lesson/sd/sd-papki-mkdir-struktura/): SD.mkdir создаёт весь путь за раз: логи по дням в /logs/dNNN, путь в SD.open, лимиты FAT и структура архива измерений на microSD для Arduino. - [Размер файла: size и предел 4 ГБ](https://arduin-arsenal.ru/lesson/sd/sd-size-4gb-predel/): size() возвращает объём файла в байтах: контроль лога до ротации, предел FAT32 в 4 ГБ и арифметика — сколько мегабайт в сутки пишет логгер раз в 10 секунд. - [Питание SD-модуля: потребление и просадки](https://arduin-arsenal.ru/lesson/sd/sd-pitanie-prosadki/): Пиковый ток SD-карты при записи 100-200 мА: просадки от слабого стабилизатора и проводов, блокировочный конденсатор 100-470 мкФ и отдельный AMS1117-3.3. - [3.3V против 5V модулей: согласование уровней](https://arduin-arsenal.ru/lesson/sd/sd-urovni-3v3-5v/): Голая карта питается 3,3 В и боится 5 В на MOSI: делители 1 кОм плюс 2 кОм, буфер 74LVC125A, прямой MISO и случай, когда нужен 4-канальный преобразователь. - [Скорость записи SD: почему теряются строки](https://arduin-arsenal.ru/lesson/sd/sd-skorost-zapisi-poteri/): Почему при записи на SD пропадают строки из Serial: пауза на сектор 512 байт, буфер приёма 64 байта, замер dt через millis и батч-запись пачкой строк. - [Управление логированием: кнопка старт-стоп](https://arduin-arsenal.ru/lesson/sd/sd-knopka-start-stop/): Кнопка старт-стоп для логгера на Arduino: фронт на D2 с INPUT_PULLUP и антидребезгом, сессия записи новым файлом, LED-индикатор и обязательный close по стопу. - [Логи через веб: читаем SD с ESP32](https://arduin-arsenal.ru/lesson/sd/sd-veb-logi-esp32-http/): Читаем лог с SD-карты ESP32 из браузера телефона: пины VSPI 18/19/23/5, WebServer с обработчиком GET /log, отдача файла чанками по 512 байт и text/plain. - [Сервер файлов на ESP32: скачивание с карты](https://arduin-arsenal.ru/lesson/sd/sd-veb-server-fajlov-esp32/): Стриминг файла с microSD в браузер на ESP32: цикл file.read и client.write, заголовки Content-Length и attachment, список файлов ссылками и защита config. - [Даталоггер на батарейке: сон между записями](https://arduin-arsenal.ru/lesson/sd/sd-datalogger-son-batarejka/): Логгер на ESP32 от 18650: глубокий сон между записями через esp_sleep_enable_timer_wakeup, расчёт срока работы по интервалу и ловушка FAT при отвале питания. - [WAV с SD-карты: проигрываем звук](https://arduin-arsenal.ru/lesson/sd/sd-wav-tmrpcm-zvuk/): Проигрываем WAV с SD-карты на Uno через TMRpcm: формат 8 бит 16-32 кГц, пин D9 и таймер 1, ток пина против громкости, усилитель LM386 и питание модуля. - [SD-карта: логируем данные датчиков](https://arduin-arsenal.ru/lesson/sd/sd-logirovanie/): Подключаем модуль microSD к Arduino Uno по SPI, пишем первые строки в log.csv через SD.open и FILE_WRITE и разбираемся, почему без close() данные пропадают. - [CSV-лог и чтение конфига с SD-карты](https://arduin-arsenal.ru/lesson/sd/sd-csv-config/): Формат CSV для логов Arduino: шапка и разделители, запись раз в 60 секунд через millis() и чтение config.txt с SD-карты, чтобы менять порог без перепрошивки. ## EEPROM — энергонезависимая память (https://arduin-arsenal.ru/section/eeprom/) Сохраняем данные, которые не должны пропасть при выключении: EEPROM.read/write, лимиты перезаписи, хранение структур. Уровень: beginner. Уроков: 62. Обновлён: 2026-09-22. - [EEPROM: память, которая живёт без питания](https://arduin-arsenal.ru/lesson/eeprom/eeprom-bez-pitaniya/): Чем EEPROM отличается от RAM и flash, сколько байт у Uno, на сколько лет хватает памяти без питания и почему пустая ячейка читается как 255. - [EEPROM.read и write: первый сохранённый байт](https://arduin-arsenal.ru/lesson/eeprom/eeprom-read-write-pervyi-bait/): EEPROM.read и EEPROM.write на практике: сохраняем режим гирлянды в один байт, переживаем отключение питания и не наступаем на переполнение 255. - [EEPROM.update: почему не надо писать подряд](https://arduin-arsenal.ru/lesson/eeprom/eeprom-update-iznos-yacheek/): EEPROM.update пишет только при изменении значения: как устроен внутри, почему write подряд убивает ячейку за 11,6 дня и как считать ресурс записи. - [NVS и namespace: структура хранилища ESP32](https://arduin-arsenal.ru/lesson/eeprom/eeprom-nvs-namespace-struktura/): Хранилище NVS на ESP32: namespace в Preferences, ключи до 15 символов, типы putUShort и putFloat, лимит раздела 20 КБ, износ и схема ключей проекта. - [EEPROM в деле: три реальных паттерна проектов](https://arduin-arsenal.ru/lesson/eeprom/eeprom-tri-patterna-proektov/): Три паттерна EEPROM для проектов: конфиг с версией и XOR-суммой, счётчик в кольце из 8 ячеек, журнал событий - с кодом и таблицей частоты записи. - [Итоговый проект: настройки, живущие годами](https://arduin-arsenal.ru/lesson/eeprom/eeprom-itog-nastroyki-godami/): Финальный прибор раздела: Serial-меню, калибровка, счётчик наработки, журнал событий и заводской сброс - карта адресов, план износа и чек-лист запуска. - [Счётчик ватт-часов: мощность в память каждые N минут](https://arduin-arsenal.ru/lesson/eeprom/eeprom-vatt-chasy-schetchik/): Счётчик ватт-часов на Arduino: P=U×I с ползунком вместо датчика тока, интеграл мощности тиками, запись в EEPROM раз в 5 минут и расчёт износа. - [Двухточечная калибровка: k и b в EEPROM](https://arduin-arsenal.ru/lesson/eeprom/eeprom-dvukhtochechnaya-kalibrovka/): Двухточечная калибровка на Arduino: k и b по двум опорам (лёд и кипяток), хранение в EEPROM, пересчёт в градусы в одном месте, отличие от offset. - [Заводской серийный номер: прошиваем один раз](https://arduin-arsenal.ru/lesson/eeprom/eeprom-zavodskoi-nomer-platy/): Серийный номер платы в EEPROM: magic-замок от повторной записи, генерация из шума плавающего входа, вывод в Serial и сценарий из десяти плат. - [Структура под микроскопом: дамп EEPROM после put](https://arduin-arsenal.ru/lesson/eeprom/eeprom-struktura-damp-bajty/): Записали структуру put-ом и заглянули в ячейки: дамп по адресам, little-endian у int, float в четырёх байтах, sizeof и выравнивание на 32-битных платах. - [Умная запись: put трогает только изменившиеся байты](https://arduin-arsenal.ru/lesson/eeprom/eeprom-put-lish-izmenennye-bajty/): Внутри put стоит update: нетронутые байты не тратят циклы. Время сохранения в millis, горячие байты вроде CRC и арифметика ресурса на реальном сроке. - [Поменял — сохранил — выключил — включил: цикл настроек](https://arduin-arsenal.ru/lesson/eeprom/eeprom-pomenyal-sohranil-vklyuchil/): Настройки порога, яркости и режима: загрузка с проверкой magic, сохранение по кнопке, светодиод несохранённого и контрольная печать после включения питания. - [Ресурс EEPROM: 100000 циклов на ячейку и счётчик перезаписей](https://arduin-arsenal.ru/lesson/eeprom/eeprom-resurs-100000-ciklov/): Даташит обещает ячейке EEPROM 100000 циклов: что тратит ресурс, чем update лучше write и сколько проживёт конфиг при записи раз в час — считаем на салфетке. - [Wear leveling своими руками: запись по кругу с маркером](https://arduin-arsenal.ru/lesson/eeprom/eeprom-wear-leveling-svoimi-rukami/): Запись конфига по кругу из восьми слотов: поколение как маркер последней записи, восьмикратный запас ресурса и порядок записи на случай пропадания питания. - [Первый запуск: свежая EEPROM из 0xFF и версия конфига](https://arduin-arsenal.ru/lesson/eeprom/eeprom-pervyi-zapusk-0xff/): Свежая EEPROM читается как 0xFF: сырые байты, версия конфига как главный вопрос, миграция полей и осознанный сброс к дефолтам при первом запуске платы. - [CRC-проверка конфига: блок, побитый отключением питания](https://arduin-arsenal.ru/lesson/eeprom/eeprom-crc-blok-konfiga/): CRC8 по блоку настроек в EEPROM: обрыв питания посреди записи ловится на старте, скетч откатывается к дефолтам и переписывает блок со свежей суммой. - [Magic-байт в нулевом адресе и версия структуры конфига](https://arduin-arsenal.ru/lesson/eeprom/eeprom-versiya-struktury-migraciya/): Маркер 0xA5 в нулевом адресе отделяет чистую плату от настроенной, байт версии мигрирует конфиг при добавлении поля: v1 в v2 без потери значений. - [Фабричный сброс: пять секунд удержания вместо случайного касания](https://arduin-arsenal.ru/lesson/eeprom/eeprom-sbros-pyat-sekund/): Фабричный сброс по удержанию пять секунд: LED-прогресс, защита от придавленной кнопки, перезапись блока со свежей суммой и нетронутые счётчики платы. - [Строки в EEPROM: имя Wi-Fi, пароль и подпись устройства](https://arduin-arsenal.ru/lesson/eeprom/eeprom-wifi-ssid-stroka/): SSID, пароль и подпись платы как байты в EEPROM: нуль-терминатор против байта длины, поля 33 и 64 символа, защита чтения от мусора 0xFF, план в 113 байт. - [Маркер последней записи: журнал по кругу в хронологическом порядке](https://arduin-arsenal.ru/lesson/eeprom/eeprom-zhurnal-marker-poryadok/): Порядковый номер как маркер последней записи: журнал в EEPROM читается в хронологическом порядке даже после замыкания кольца. Арифметика заворота по модулю 256. - [Планировка адресного пространства: карта зон, резерв и наезды](https://arduin-arsenal.ru/lesson/eeprom/eeprom-plan-karty-rezerv/): Карта EEPROM под проект: строки Wi-Fi на 113 байт, журнал на 32 слота, резерв и свободная зона. Проверка наезда компилятором и печать карты в Serial. - [Меню настроек на одной кнопке: меняем порог — он переживает ребут](https://arduin-arsenal.ru/lesson/eeprom/eeprom-menu-knopka-shagi/): Настройки без экрана: короткий клик шагает порог по шкале из десяти делений, удержание листает параметры, двойное мигание подтверждает запись в EEPROM. - [Магическое слово 0xAA55: первый запуск против чужой памяти](https://arduin-arsenal.ru/lesson/eeprom/eeprom-slovo-aa55-chuzhaya-pamyat/): Слово 0xAA55 в конце блока отличает первый запуск от чужой памяти: промах 1 из 65536, печать ставится последней, вердикт загрузки показывают вспышки светодиода. - [Счётчик наработки: сколько циклов записи выдержит проект](https://arduin-arsenal.ru/lesson/eeprom/eeprom-byudzhet-ciklov-schetchik/): Бюджет записи: 100000 циклов против частоты флашей. Часовой счётчик наработки по кольцу из четырёх ячеек живёт вчетверо дольше — годы считаем до прошивки. - [struct в EEPROM: выравнивание, sizeof и дырки в байтах](https://arduin-arsenal.ru/lesson/eeprom/eeprom-struct-vyravnivanie-sizeof/): EEPROM.put пишет sizeof байтов структуры: дырки выравнивания съедают ячейки, а мусор в них ломает контрольную сумму. Порядок полей, packed и три лечения. - [Калибровочная таблица из 20 точек: линейная интерполяция](https://arduin-arsenal.ru/lesson/eeprom/eeprom-tablitsa-tochek-interpolyaciya/): Двадцать пар сырой АЦП и температуры в EEPROM: линейная интерполяция между точками, умножение до деления в long, зажим на краях и ремонт одной врущей точки. - [Стирание и запись битов: куда уходит цикл EEPROM](https://arduin-arsenal.ru/lesson/eeprom/eeprom-stiranie-bitov-budzhet/): Пустая ячейка читается 255: запись пробивает нули, ноль в единицу без стирания не вернуть. Режимы даташита 3,4 и 1,8 мс, окно четырёх тактов, бюджет циклов. - [Износ EEPROM и wear leveling: как не убить память за месяц](https://arduin-arsenal.ru/lesson/eeprom/eeprom-wear-leveling/): Ресурс ячейки 100000 циклов: счётчик раз в секунду умирает за 28 часов. Бюджет износа, update против write и раскатка счётчика по 32 ячейкам AVR101. - [Настройки устройства: EEPROM.put/get + CRC + первый пуск](https://arduin-arsenal.ru/lesson/eeprom/eeprom-nastrojki-crc/): Модуль настроек целиком: struct, magic-байт, версия раскладки, CRC8 поверх полей и три ветки первого пуска — свежая плата, битый блок, миграция версии. - [Журнал событий в EEPROM: кольцевой лог последних N записей](https://arduin-arsenal.ru/lesson/eeprom/eeprom-zhurnal-sobytij/): Кольцевой журнал последних событий в EEPROM: слот 32 байта, метка millis, счётчик перезагрузок как маркер сбоя питания и печать лога в Serial по команде. - [Два слота настроек: зеркалирование и откат при сбое](https://arduin-arsenal.ru/lesson/eeprom/eeprom-dva-slota/): Слёт настроек A/B с флагом актуальности: запись в неактивный слот, проверка CRC, переключение флага. Обрыв питания посреди записи больше не убивает конфиг. - [Счётчик наработки: часы мотаем без износа памяти](https://arduin-arsenal.ru/lesson/eeprom/eeprom-narabotka-chasov/): Наработка в минутах: аккумулятор в RAM и инкремент EEPROM раз в час. Ячейка живёт годами, аккуратная арифметика millis после 49,7 суток и magic-байт от пере. - [Экспорт и импорт настроек: hex-дамп через Serial](https://arduin-arsenal.ru/lesson/eeprom/eeprom-damp-serial/): Дамп EEPROM в hex по 16 байтов на строку, команды DUMP и LOAD из терминала, строгий парсер hex-пар и восстановление блока настроек после неудачной прошивки. - [Износ EEPROM: сто тысяч циклов и ресурс](https://arduin-arsenal.ru/lesson/eeprom/eeprom-iznos-resurs/): Считаем частоту записи в EEPROM и прогнозируем срок жизни: 100000 циклов на ячейку, update вместо write, запись по событию и ротация ячеек. Прогноз в годах. - [int и float в EEPROM: побайтовая запись](https://arduin-arsenal.ru/lesson/eeprom/eeprom-int-float-bayty/): Как хранить int и float в EEPROM Arduino: разложение числа на байты через /256 и %256, обратная сборка, знак минуса и IEEE-754 на четыре ячейки. - [EEPROM.put и get: структуры одним вызовом](https://arduin-arsenal.ru/lesson/eeprom/eeprom-put-get-struct/): EEPROM.put и EEPROM.get: сохранение структуры настроек одним вызовом, sizeof, magic-байт и версия раскладки. Плюс ручная модель на отдельных ячейках. - [Счётчик включений: двойная запись против сбоя](https://arduin-arsenal.ru/lesson/eeprom/eeprom-schetchik-pod-sboy/): Счётчик включений платы в EEPROM с защитой от сбоя посреди записи: парные ячейки-двойники, маркер чётности и запись в старую копию до подтверждения новой - [Массив структур в EEPROM: слоты по sizeof](https://arduin-arsenal.ru/lesson/eeprom/eeprom-massiv-struct-sloty/): Набор однотипных записей в EEPROM: адрес слота как база плюс i на sizeof, busy-маркер занятости, поиск свободного слота, правка и удаление без задевания соседей - [Износ EEPROM на практике: аудит и симптомы](https://arduin-arsenal.ru/lesson/eeprom/eeprom-iznos-audit-simptomy/): Ресурс EEPROM на практике: считаем износ ячеек от перезаписей, распознаём симптомы деградации и строим схему записи так, чтобы плата прожила десятилетия - [struct Config: структура настроек устройства](https://arduin-arsenal.ru/lesson/eeprom/eeprom-struct-config-nastrojki/): Проектируем struct Config для EEPROM: поля под порог, интервал и яркость, байт версии, резерв под будущие поля, sizeof и цена добавления поля. - [CRC для настроек: целостность данных](https://arduin-arsenal.ru/lesson/eeprom/eeprom-crc-celostnost-nastroek/): Контрольная сумма защищает настройки в EEPROM: XOR-CRC и CRC8 по полям структуры, байт суммы последним, проверка при старте и возврат к дефолтам. - [Счётчик перезагрузок: практика сохранения](https://arduin-arsenal.ru/lesson/eeprom/eeprom-schetchik-perezagruzok/): Счётчик перезагрузок в EEPROM: инкремент read, плюс один, update при старте, потолок uint16 65535, обнуление кнопкой и диагностика повисаний. - [Пороги не забываются: тюнинг через кнопки](https://arduin-arsenal.ru/lesson/eeprom/eeprom-porog-knopki-tuning/): Кнопки плюс и минус подстраивают порог срабатывания датчика на месте: таймер тишины на millis бережёт EEPROM, update пишет лишь изменившееся, бип подтверждает. - [Меню настроек с записью в EEPROM](https://arduin-arsenal.ru/lesson/eeprom/eeprom-menu-nastroek-lcd/): Меню на LCD 16x2 I2C и трёх кнопках: автомат просмотр-правка, EEPROM.put одной записью по выходу из правки, перерисовка по флагу без мерцания экрана. - [Магическое число: первый запуск и дефолты](https://arduin-arsenal.ru/lesson/eeprom/eeprom-magic-number-defolty/): Свежая плата читает из EEPROM 255, а не ноль: маркер 0x42 отличает первый запуск, version-байт мигрирует конфиг между прошивками, дефолты заливаются раз. - [Калибровка датчика: смещение в EEPROM](https://arduin-arsenal.ru/lesson/eeprom/eeprom-kalibrovka-smeschenie/): Термометр врёт на полтора градуса: храним float-поправку в EEPROM, вводим режим калибровки кнопкой и применяем смещение к каждому чтению после сброса питания. - [Карта памяти ATmega328: 1 КБ EEPROM](https://arduin-arsenal.ru/lesson/eeprom/eeprom-karta-pamyati-1kb/): Раскладываем 1024 байта EEPROM по регионам: настройки 0-63, счётчики 64-71, журнал 128-511 и резерв. Таблица-карта, кольцо записей, миграция при переезде поля. - [Организация памяти: адресное пространство скетча](https://arduin-arsenal.ru/lesson/eeprom/eeprom-adresnoe-prostranstvo/): Все адреса EEPROM — в одной шапке скетча: const-константы, #define блоки, enum для журнала и самопроверка раскладки. Ревизия при добавлении полей. - [Кольцевой буфер в EEPROM: журнал последних событий](https://arduin-arsenal.ru/lesson/eeprom/eeprom-kolcevoj-zhurnal/): Журнал последних событий в EEPROM: индекс head, запись по кругу в 32 слота, трёхбайтовое время и почему кольцо бережёт ресурс памяти в 32 раза лучше сдвига. - [Читаем журнал: вывод истории из EEPROM](https://arduin-arsenal.ru/lesson/eeprom/eeprom-zhurnal-istoriya/): Выводим историю из EEPROM от старых событий к новым: обход по модулю, коды словами, время в чч:мм:сс и кнопка печати без завала монитора порта. - [String в EEPROM: длина и байты](https://arduin-arsenal.ru/lesson/eeprom/eeprom-stroka-dlina-bajty/): Храним текст в EEPROM: байт длины плюс до 30 символов, чтение с проверкой, кириллица по два байта и имя устройства, которое переживёт сбой питания. - [Массив в EEPROM: цикл записи значений](https://arduin-arsenal.ru/lesson/eeprom/eeprom-massiv-cikl-zapisi/): Калибровочная таблица в EEPROM: цикл записи с адресной арифметикой addr + i * sizeof(int), чтение по индексу и правка одного элемента без перезаписи соседних. - [Моточасы устройства: счётчик наработки](https://arduin-arsenal.ru/lesson/eeprom/eeprom-motochasy-narabotka/): Моточасы на Arduino: секунды копим в RAM, в EEPROM пишем раз в 6 минут — ячейка живёт больше года, потеря при сбое до шести минут, остаток до обслуживания. - [Расчёт износа: как часто можно писать](https://arduin-arsenal.ru/lesson/eeprom/eeprom-raschet-iznosa-chastota/): Ресурс EEPROM: 100000 циклов на ячейку, раз в 10 секунд — смерть за 278 часов, раз в 6 минут — за год, кольцо из десяти ячеек умножает срок на десять. - [Внешний EEPROM 24C256: память по I2C](https://arduin-arsenal.ru/lesson/eeprom/eeprom-24c256-podklyuchenie/): Подключаем внешний EEPROM 24C256 к Arduino по I2C: адрес чипа 0x50 и пины A0-A2, два байта адреса ячейки, запись и чтение через Wire, когда 1 КБ мало. - [24C256: побайтовая и страничная запись](https://arduin-arsenal.ru/lesson/eeprom/eeprom-24c256-stranitsa-zapis/): Страничная запись в 24C256: страница 64 байта, заворот адреса на границе, пауза 5 мс цикла записи, обёртки writePage и readBytes, скорость против побайтовой. - [Резервные копии настроек: две страницы и чередование](https://arduin-arsenal.ru/lesson/eeprom/eeprom-24c256-rezervnye-kopii/): Две копии конфига в EEPROM и чередование страниц: счётчик версий и CRC8 в конце блока, сбой питания портит только черновик, восстановление целой копии. - [Заводской сброс: кнопка возврата к дефолтам](https://arduin-arsenal.ru/lesson/eeprom/eeprom-zavodskoj-sbros-knopka/): Заводской сброс на Arduino: дефолты в скетче, удержание кнопки три секунды с millis-подсчётом, бип подтверждения, applyDefaults и мягкий рестарт. - [Термостат с памятью: режим сохраняется после сбоя](https://arduin-arsenal.ru/lesson/eeprom/eeprom-termostat-pamyat-rezhima/): Термостат на Arduino с памятью: порог и гистерезис в EEPROM через put и get, кнопки тюнинга с записью по таймеру, безопасное восстановление реле после сбоя. - [Эмуляция EEPROM на ESP32: Preferences](https://arduin-arsenal.ru/lesson/eeprom/eeprom-esp32-preferences-nvs/): Preferences на ESP32: хранилище ключ-значение над NVS, namespace и ключи до 15 символов, дефолты в get, commit в end и перенос скетчей с EEPROM.h. - [EEPROM: настройки, которые не пропадут при выключении](https://arduin-arsenal.ru/lesson/eeprom/eeprom-pervye-nastroyki/): EEPROM на Arduino Uno: 1024 байта, которые не стираются при выключении. EEPROM.read, write и update, ресурс 100000 циклов и яркость, которая помнит всё. - [Счётчик включений и хранение данных по байтам](https://arduin-arsenal.ru/lesson/eeprom/eeprom-schetchik-vklyucheniy/): Счётчик включений на EEPROM: почему пустая память читается как 255, как уложить int в два байта через /256 и %256 и вернуть яркость после старта платы. ## Stepper — шаговые двигатели (https://arduin-arsenal.ru/section/stepper/) Точное позиционирование: как работает шаговый двигатель, драйвер ULN2003, обороты, удержание и нагрев. Уровень: intermediate. Уроков: 65. Обновлён: 2026-09-22. - [Шаговый двигатель: принцип работы по фазам](https://arduin-arsenal.ru/lesson/stepper/stepper-fazy-printsip/): Полюсы, обмотки и шаг 5,625°: физика точного позиционирования шагового двигателя без датчиков — почему вал поворачивается ровно на заданный угол. - [28BYJ-48: самый популярный шаговик в наборах](https://arduin-arsenal.ru/lesson/stepper/stepper-28byj48-anatomiya/): Анатомия 28BYJ-48: пластиковый редуктор 1:64, 2048 полушагов на оборот, питание 5 В и шум — характеристики мотора из наборов и где он реально уместен. - [Драйвер ULN2003: подключение к Arduino](https://arduin-arsenal.ru/lesson/stepper/stepper-uln2003-plata/): Плата ULN2003: четыре светодиода фаз, распиновка IN1-IN4, джампер питания и первый поворот вала — что показывает индикация при работе скетча. - [Дозатор филамента: подача прутка на 28BYJ-48](https://arduin-arsenal.ru/lesson/stepper/stepper-dozator-filamenta/): Роликовый податчик прутка на 28BYJ-48: доза в шагах из окружности ролика, кнопка и тумблер непрерывной подачи, счётчик сантиметров в Serial. - [Автоматические шторы: привод с концевиками и таймером](https://arduin-arsenal.ru/lesson/stepper/stepper-shtory-avtoprivod/): Шторный привод на AccelStepper: ноль по концевику, программные лимиты хода, расписание по часам DS3231, плавный разгон карниза и ручной режим. - [Итоговый проект: поворотный стол для фотосъёмки](https://arduin-arsenal.ru/lesson/stepper/stepper-povorotnyi-stol-foto/): Стоп-моушн стол на 28BYJ-48: 57 шагов на кадр в 10 градусов, пауза на millis, кнопки старт-пауза и сброс, Serial-отчёт угла. Сборка приёмов раздела. - [Слайдер для таймлапса: миллиметры в минуту](https://arduin-arsenal.ru/lesson/stepper/stepper-tajmlaps-slajder/): Слайдер для таймлапса на 28BYJ-48 и винте TR8x8: 256 шагов на миллиметр, скорость 1 мм/мин мимо setSpeed, тумблер старт-пауза и возврат каретки к нулю. - [Калькулятор механики: винт, шаг, скорость](https://arduin-arsenal.ru/lesson/stepper/stepper-kalkulyator-mehaniki/): Калькулятор механики шаговика: свинец винта TR8x2, x8, x16, шагов на мм с микрошагом, Serial-расчёт скорости и потолка 15 RPM, момент на быстром ходу. - [Тестовый стенд: проверяем шаговик и драйвер](https://arduin-arsenal.ru/lesson/stepper/stepper-stend-diagnostiki/): Тестовый стенд шаговика: оборот туда-обратно с хронометражем, полушаги, реверс и счётчик шагов в Serial, светодиод статуса и таблица симптомов и причин. - [Почему нельзя сразу 15 об/мин: разгон и торможение вручную](https://arduin-arsenal.ru/lesson/stepper/stepper-ryvok-razgon-tormozhenie/): Старт сразу на 15 об/мин — гул и щелчки редуктора: считаем первые шаги, строим разгон плавной сменой интервала и зеркальное торможение к цели без библиотек. - [AccelStepper изнутри: счётчик n и торможение по остатку](https://arduin-arsenal.ru/lesson/stepper/stepper-accelstepper-iznutri/): Что AccelStepper делает на каждом шаге: счётчик разгона n, стартовый интервал из ускорения, торможение по остатку пути и смена цели в полёте без ручного учёта. - [Кнопки влево и вправо: ход на девяносто градусов](https://arduin-arsenal.ru/lesson/stepper/stepper-shagi-na-gradus-90/): Кнопки влево и вправо по 90 градусов: ровно 512 шагов на четверть, накопление цели без остановки, скорость ручкой на A0 и лимиты, чтобы столик не уехал. - [Планировщик на millis: мотор едет, остальное живёт](https://arduin-arsenal.ru/lesson/stepper/stepper-millis-planirovshik-shagov/): step() замораживает loop() на весь ход: дробим перемещение на порции, строим millis-планировщик из трёх задач и держим мотор, LED и Serial живыми одновременно. - [Очередь движений: сценарий из задач и конечный автомат](https://arduin-arsenal.ru/lesson/stepper/stepper-ochered-dvizhenij-avtomat/): Сценарий «180°, пауза 2 с, минус 90°» без лапши из delay: движения и паузы лежат в массиве, конечный автомат из трёх состояний ведёт мотор от задачи к задаче. - [Стоп по датчику: концевик на D2 и границы хода](https://arduin-arsenal.ru/lesson/stepper/stepper-stop-po-datchiku-d2/): Концевик на D2 останавливает мотор раньше жёсткого упора: INPUT_PULLUP, проверка после каждой порции, обесточивание обмоток, отъезд назад на 45 градусов. - [Нагрев и удержание: обмотки под током или обесточить](https://arduin-arsenal.ru/lesson/stepper/stepper-tok-uderzhaniya-strategii/): Почему шаговик горячий даже без движения: 200 мА удержания, корпус 65 °C как норма, сторож простоя на millis с обесточиванием катушек и случаи, когда ток нужен. - [Шаговик, серво или моторчик: таблица выбора под задачу](https://arduin-arsenal.ru/lesson/stepper/stepper-servo-dc-kak-vybrat/): Три мотора — три контракта: таблица решений по точности, скорости, нагреву и цене, потолок 28BYJ-48 в 12-15 об/мин и порядок вопросов при выборе за две минуты. - [Винтовая пара: из шагов в миллиметры](https://arduin-arsenal.ru/lesson/stepper/stepper-vintovaya-para-shag-na-mm/): Как перевести шаги в миллиметры: ход винта TR8×8, 256 шагов на миллиметр, тяга в килограммах через момент, самоторможение и скетч подъёмника стола с лимитом. - [28BYJ-48 против NEMA 17: когда хватит пластиковой коробочки](https://arduin-arsenal.ru/lesson/stepper/stepper-byj48-protiv-nema17/): Пластиковый редуктор против стального фланца: момент 0,03 против 0,4 Н·м, ULN2003 против A4988, ток фазы, цена, шум и граница, где каждый мотор сдаётся. - [Полушаг и микрошаг: 4096 против 2048 и что за это платят](https://arduin-arsenal.ru/lesson/stepper/stepper-polushag-mikroshag-cena/): Полушаг удваивает плавность: 4096 позиций против 2048, но половина тактов тянет 71 процента момента, а 1/16 на A4988 держит десятую часть — считаем цену. - [Кормушка, шторка, указатель: расчёт шагов под три проекта](https://arduin-arsenal.ru/lesson/stepper/stepper-tri-proekta-shagi/): Три сценария с готовой арифметикой: порция корма на оборот шнека, ход шторки через концевик и указатель в градусах — числа шагов, время и главные грабли. - [Каретка на GT2-ремне: зубья, шкив и натяжение](https://arduin-arsenal.ru/lesson/stepper/stepper-gt2-remen-karetki/): Ремень GT2 против ходового винта: шкив на 20 зубьев даёт 40 мм за оборот, шаги на миллиметр, натяжение по Гейтсу 27-36 Н, перескок зубьев и люфт реверса. - [Редукция шкивами: момент умножаем, скорость отдаём](https://arduin-arsenal.ru/lesson/stepper/stepper-redukciya-shkivami-moment/): Ремённая передача один к трём умножает момент и делит скорость: арифметика шкивов, КПД зубчатого ремня, люфт ступеней и граница, где редукция бессильна. - [Колёсный привод: путь за оборот, трение и врущая одометрия](https://arduin-arsenal.ru/lesson/stepper/stepper-kolesnyj-privod-trenie/): Робот-платформа на шаговике: путь за оборот колеса, скорость в сантиметрах в секунду, сцепление с полом и почему счётчик шагов завышает пройденный путь. - [Подключение A4988 к Arduino: распиновка, MS1-MS3 и расчёт Vref](https://arduin-arsenal.ru/lesson/stepper/stepper-a4988-shema-podklyucheniya/): Полная карта подключения A4988 к Arduino: VMOT и VDD, поиск пар обмоток, перемычка RST-SLP, деление MS1-MS3 до 1/16, Vref под винтом и порядок первой сборки. - [DRV8825 против A4988: ток, нагрев и 32 микрошага — когда переплачивать](https://arduin-arsenal.ru/lesson/stepper/stepper-drv8825-protiv-a4988/): DRV8825 против A4988: 32 микрошага против 16, Vref 0,5 В против 0,8 В на ампер, ток без радиатора, запас по напряжению и когда доплата окупается. - [Трапецеидальное ускорение: разгон и торможение без срыва шагов](https://arduin-arsenal.ru/lesson/stepper/stepper-trapetsiya-uskorenie-raschet/): Трапеция скорости для шаговика: рампа по v²/(2a), торможение по остатку пути, резонанс и трение, ускорения для NEMA 17 и 28BYJ-48, стенд с тремя фазами. - [AccelStepper: ускорение и мягкий стоп без срыва шагов](https://arduin-arsenal.ru/lesson/stepper/accelstepper-uskorenie/): AccelStepper для 28BYJ-48: FULL4WIRE и HALF4DIR, setMaxSpeed в шагах в секунду, setAcceleration, качели на moveTo и run, мягкий стоп по остатку пути. - [Концевик для шагового двигателя: дребезг и повторяемый ноль](https://arduin-arsenal.ru/lesson/stepper/stepper-homing-koncovik/): Концевик и точность нуля: почему INPUT_PULLUP обязателен, что делает дребезг с фиксацией, отступ 5-10 шагов против инерции и setCurrentPosition(0). - [TMC2208: тишина вместо свиста A4988](https://arduin-arsenal.ru/lesson/stepper/tmc2208-tishina/): TMC2208 в колодке A4988: StealthChop против SpreadCycle, своя таблица MS-пинов, Vref под винтом, ток 1,2 А RMS без радиатора и проверка звука одним скетчем. - [Заслонка вентиляции: шаговик открывает форточку по DHT22](https://arduin-arsenal.ru/lesson/stepper/stepper-zaslonka-ventilyacii/): Заслонка-бабочка на 28BYJ-48: гистерезис двух порогов DHT22, приоткрытие в шагах, удержание позиции без тока — почему шаговик здесь честнее серво. - [Кормушка для питомца: порция по расписанию и кнопка ручной выдачи](https://arduin-arsenal.ru/lesson/stepper/stepper-kormushka-porcii/): Кормушка на 28BYJ-48: порция как четверть оборота шнека, выдача по расписанию на millis, кнопка-байпас с защитой от двойной выдачи и счётчик порций. - [Дозатор воды: клапан, задержка и защита от перелива](https://arduin-arsenal.ru/lesson/stepper/stepper-dozator-vody/): Дозатор воды на Arduino: реле и клапан, автомат состояний на millis, поплавок как стоп-условие и таймаут как вторая линия обороны от перелива. - [Библиотека Stepper: первый поворот вала](https://arduin-arsenal.ru/lesson/stepper/stepper-biblioteka-pervyj-povorot/): Конструктор Stepper(2048, 8, 10, 9, 11), setSpeed в RPM и блокирующий step(): минимальный скетч для 28BYJ-48 и грабли из примеров IDE с фазами. - [Полный и полушаг: режимы работы обмоток](https://arduin-arsenal.ru/lesson/stepper/stepper-polnyi-polushag-rezhimy/): Как переключаются обмотки шаговика: волновой режим, полный шаг и полушаг, такты фаз массивом, момент и плавность. Скетч на digitalWrite без библиотеки. - [2048 шагов на оборот: считаем передаточное число](https://arduin-arsenal.ru/lesson/stepper/stepper-peredatochnoe-chislo-2048/): Откуда у 28BYJ-48 число 2048: 32 шага ротора, редуктор около 63,68:1 и перевод градусов в шаги в коде на long без целочисленных ловушек. Шаг на 0,176 градуса. - [Ограничитель хода: концевики и реверс](https://arduin-arsenal.ru/lesson/stepper/stepper-konczevik-revers/): Два концевика на краях хода: стоп без срыва шагов, отъезд в обратную сторону и гистерезис, который не даёт автомату дребезжать у упора. 28BYJ-48 и INPUT_PULLUP. - [Плавный разгон шаговика: интервал шага на millis](https://arduin-arsenal.ru/lesson/stepper/stepper-plavnyj-razgon/): Трапеция без библиотек: интервал между шагами живёт на micros(), старт медленно, каждые шаги ускоряемся, перед целью тормозим. Почему 800 мкс с места рвёт шаги. - [Два шаговика одновременно: чередование шагов](https://arduin-arsenal.ru/lesson/stepper/stepper-dva-motora/): Две оси в одном loop: у каждой свой таймер и интервал, шаги чередуются за микросекунды. Почему Stepper.step() на двух моторах превращает их в очередь. - [Шаговик теряет шаги: причины и поиск пропущенных](https://arduin-arsenal.ru/lesson/stepper/stepper-propushennye-shagi/): Шаговик проехал меньше, чем считал скетч: срыв по моменту, крутой разгон, просадка, нагрев. Диагноз меткой на валу и возврат в ноль по концевику. - [Блок питания для шаговика: 12 или 24 вольта](https://arduin-arsenal.ru/lesson/stepper/stepper-pitanie-drayvera-bp/): Сколько ампер просит NEMA 17 и зачем запас 1,4-1,5 на БП, почему USB и крона не кормят драйвер, электролит на входе A4988 и что даёт 24 вольта при разгоне. - [Вскрытие 28BYJ-48: смазка и переделка на биполярный](https://arduin-arsenal.ru/lesson/stepper/stepper-byj48-smazka-vskrytie/): Что внутри 28BYJ-48: шестерни, трещины и заветрившаяся смазка, вскрытие защёлок. Переделка на биполярный: перекусили красный — плюс момент, минус гарантия. - [Скорость и момент: setSpeed и срыв шагов](https://arduin-arsenal.ru/lesson/stepper/stepper-sryv-shagov-moment/): Почему шаговик жужжит и не крутит: момент падает с частотой — индуктивность, инерция, вибрация. Разгон ступенями, диагностика и модель момента в симуляторе. - [Нагрев и ток покоя: почему шаговик горячий](https://arduin-arsenal.ru/lesson/stepper/stepper-nagrev-tok-pokoya/): Ток удержания греет шаговик даже в простое: 0,9 Вт в корпусе 28 мм, планка 40-50°C для 28BYJ-48, грехи с термоклеем и поролоном и цена дежурства в батарейках. - [Отключение катушек: экономим питание в простое](https://arduin-arsenal.ru/lesson/stepper/stepper-otklyuchenie-katushek/): Четыре LOW снимают 240 мА удержания: как обесточивание экономит батарейки, что происходит с моментом и позицией вала и когда обесточивать нельзя. - [Потенциометр и вал: ручное управление углом](https://arduin-arsenal.ru/lesson/stepper/stepper-potenciometr-val/): Ручка повторяется валом: map в 2048 шагов, плавное доведение порциями против рывка, мёртвая зона против дребезга покоя и темп погони на millis(). - [Кнопки и угол: повороты на заданный градус](https://arduin-arsenal.ru/lesson/stepper/stepper-knopki-ugol-gradus/): Плюс десять и минус десять градусов с двух кнопок: фронт нажатия, антидребезг на millis(), 5,69 шага на градус и честный Serial-отчёт позиции в шагах. - [Свои функции поворота: moveTo по градусам](https://arduin-arsenal.ru/lesson/stepper/stepper-svoi-funkcii-povorota/): rotateDeg, moveToDeg и home: обёртки над Stepper с качанием на 45 градусов, возвратом в ноль и счётчиком позиции в long, чтобы int не лопнул на 32 767 шагах. - [AccelStepper: установка и отличие от Stepper](https://arduin-arsenal.ru/lesson/stepper/stepper-accelstepper-ustanovka/): Зачем AccelStepper, если есть Stepper: разгон с торможением, неблокирующий run(), драйверы step/dir. Установка через менеджер библиотек и первый скетч с moveTo. - [AccelStepper: maxSpeed, acceleration и run](https://arduin-arsenal.ru/lesson/stepper/stepper-maxspeed-acceleratsiya/): Профиль трапеции: maxSpeed в шагах в секунду, acceleration в шагах в секунду за секунду, run() в каждом проходе loop. Стартовая пара 500 и 1000 для 28BYJ-48. - [run против runTo: неблокирующее движение](https://arduin-arsenal.ru/lesson/stepper/stepper-run-neblokiruemoe/): runToPosition блокирует loop так же, как step(): схема moveTo — run — distanceToGo ведёт вал без запирания, кнопка и светодиод живут в одном цикле без delay. - [Два шаговика синхронно: координатное движение](https://arduin-arsenal.ru/lesson/stepper/stepper-dva-motora-koordinaty/): XY-столик из двух шаговиков: прямая через пропорцию шагов, круг из мелких приращений, AccelStepper с run() в loop и грабли блокирующего step() на двух моторах. - [Homing шагового двигателя: поиск нуля в два прохода](https://arduin-arsenal.ru/lesson/stepper/stepper-homing-nulevaya-tochka/): Homing при старте: микрик на D2 с INPUT_PULLUP, быстрый проезд и медленный финал, отъезд и обнуление счётчика, защита на случай молчащего концевика. - [Лимиты хода: защита от заклинивания](https://arduin-arsenal.ru/lesson/stepper/stepper-limity-hoda-zashita/): Лимиты хода шаговика: программные границы с запасом, концевик конца на прерывании, аварийный стоп кнопкой и что происходит при заклинивании и срыве шагов. - [A4988: драйвер с микрошагом за копейки](https://arduin-arsenal.ru/lesson/stepper/stepper-a4988-step-dir/): Схема подключения A4988 к Arduino: Step и Dir, VMOT 8-35 В, электролит 100 мкФ, ток винтом по Vref, сон и сброс — и почему два провода лучше четырёх. - [Микрошаг: 16 позиций внутри одного шага](https://arduin-arsenal.ru/lesson/stepper/stepper-mikroshag-16-poziciy/): Микрошаг A4988 через MS1/MS2/MS3: деление до 1/16, токи фаз по синусу, 3200 позиций на оборот, плата плавности моментом — и почему точность не растёт в 16 раз. - [NEMA 17: мощный шаговик для серьёзных задач](https://arduin-arsenal.ru/lesson/stepper/stepper-nema17-200-shagov/): NEMA 17: фланец 42 мм, 1,8 градуса и 200 шагов на оборот, ток фазы 0,4-1,7 А против 0,1 А у 28BYJ-48 — как выбрать драйвер под ток и когда мелкий мотор сдаётся. - [Vref на A4988: регулируем ток фаз](https://arduin-arsenal.ru/lesson/stepper/stepper-a4988-vref-tok/): Формула Vref для A4988: 0,8 В на ампер при Rs 0,1 Ом, замер мультиметром на GND и винте, запас 70-80% от номинала мотора и симптомы перегрева и срыва шагов. - [DRV8825 и TMC2209: тише, точнее, холоднее](https://arduin-arsenal.ru/lesson/stepper/stepper-drv8825-tmc2209-shum/): DRV8825: 2,2 А, микрошаг 1/32, Vref полвольта на ампер, минимум 8,2 В. TMC2209: StealthChop тише на 10-20 дБ, 1/256, UART и stall detection. Сравнение с A4988. - [Какой драйвер выбрать: сравнительная таблица](https://arduin-arsenal.ru/lesson/stepper/stepper-vybor-drayvera-tablitsa/): ULN2003, A4988, DRV8825 и TMC2209 в одной таблице: ток, микрошаг, шум, охлаждение и цена — и моё мнение, какой драйвер брать на первый проект. - [Шаговик против серво: что выбрать для задачи](https://arduin-arsenal.ru/lesson/stepper/stepper-shagovik-protiv-servo/): Шаговик против серво по делу: счёт шагов против потенциометра, 90 градусов в секунду против 600, ток удержания и цена. Таблица выбора привода под задачу. - [Униполярный и биполярный: обмотки и провода](https://arduin-arsenal.ru/lesson/stepper/stepper-unipolyarnyj-bipolyarnyj-provoda/): Шесть, пять, четыре провода: униполярная и биполярная схемы, прозвонка обмоток мультиметром, переделка 28BYJ-48 в биполярный и что меняется в драйвере. - [Мини-плоттер из двух шаговиков: рисуем круг](https://arduin-arsenal.ru/lesson/stepper/stepper-mini-plotter-krug/): Координатная машина на двух 28BYJ-48: оси X и Y, круг из синуса и косинуса в массиве координат, нитепривод на макетке и честные ограничения люфта. - [Шаговый двигатель 28BYJ-48 и драйвер ULN2003: первые шаги](https://arduin-arsenal.ru/lesson/stepper/stepper-28byj48-start/): Как шаговый двигатель превращает импульсы в точные шаги: редуктор 1:64, 2048 шагов на оборот, подключение 28BYJ-48 через ULN2003 и первый скетч. - [Скорость и точное позиционирование шаговика](https://arduin-arsenal.ru/lesson/stepper/stepper-skorost-pozicionirovanie/): Скорость шаговика без магии: setSpeed и RPM, почему 28BYJ-48 срывает шаги выше 15 RPM, перевод угла в шаги и повороты туда-обратно без блокировки loop(). ## RTClib — часы реального времени (https://arduin-arsenal.ru/section/rtclib/) Настоящее время без интернета: подключение модуля RTC, установка времени, будильники, точность и батарейка. Уровень: intermediate. Уроков: 62. Обновлён: 2026-09-22. - [Зачем RTC, если есть millis: время после отключения](https://arduin-arsenal.ru/lesson/rtclib/rtc-millis-vs-chasy/): millis() — это аптайм, а не время: обнуление после сброса, уход резонатора до 0,5% в сутки, потерянная дата после отключения питания и чем всё это лечится. - [DS1307 и DS3231: сравнение модулей часов](https://arduin-arsenal.ru/lesson/rtclib/ds1307-vs-ds3231-sravnenie/): DS1307 против DS3231: кварц снаружи против термокомпенсации, минуты ухода в месяц против ±2 ppm, питание 5 В против 3,3–5 В, будильники и цена выбора. - [Подключение DS1307: провода и батарейка](https://arduin-arsenal.ru/lesson/rtclib/ds1307-podklyuchenie-batareika/): Подключаем модуль DS1307 к Arduino по I2C: VCC на 5 В, SDA-A4, SCL-A5, батарейка CR2032, бит останова CH и проверка, что часы живут после отключения. - [Два RTC на шине: резервные часы](https://arduin-arsenal.ru/lesson/rtclib/rtc-dva-rtc-na-shine/): DS1307 и DS3231 по 0x68 на одной шине: почему конфликт адресов, чем спасают TCA9548A и вторая шина, сверка unixtime раз в час и подгонка резервных часов. - [Часы без модуля: эмуляция RTC на millis](https://arduin-arsenal.ru/lesson/rtclib/rtc-bez-modulya-na-millis/): Часы без RTC на millis: завод один раз из Serial, счёт делением и остатком, переход через полночь, дни и честная цена — уход резонатора до 7 минут в сутки. - [Итоговый проект: таймер умной теплицы](https://arduin-arsenal.ru/lesson/rtclib/rtc-teplica-itog/): Итоговый проект: DS3231 ведёт расписание, реле включает лампу и насос, датчик почвы и DHT запрещают перелив и холод — весь проект в одном скетче без delay. - [Обратный отсчёт до даты: Новый год на дисплее](https://arduin-arsenal.ru/lesson/rtclib/rtclib-otschet-do-sobytiya/): Счётчик до полуночи 2026: цель DateTime(2026,1,1), остаток разностью unixtime без TimeSpan, дни и минуты на LCD, зуммер в последние десять секунд. - [Две зоны: местное время и UTC](https://arduin-arsenal.ru/lesson/rtclib/rtclib-dve-zony-vremeni/): Вторая зона поверх DS3231: UTC из unixtime минус смещение, сезонная поправка switch по месяцу и вывод LOCAL 21:05 / UTC 18:05 на дисплее платы. - [Суточный архив: 24 слота температуры](https://arduin-arsenal.ru/lesson/rtclib/rtclib-sutochnyi-arhiv-24-slotov/): Суточная карточка температуры: снимок getTemperature() раз в час в массив на 24 слота, ASCII-график в Serial, минимум и максимум по кнопке, перенос в EEPROM. - [Полевой тест дрейфа: сколько уходит именно ваш модуль](https://arduin-arsenal.ru/lesson/rtclib/rtc-polevoi-test-drejfa/): Измеряем уход часов по-настоящему: эталон с NTP, два замера через неделю, пересчёт секунд в ppm, таблица вердиктов и ступени от подводки до калибровки. - [Два будильника DS3231 и сон: дежурный узел на одном пине](https://arduin-arsenal.ru/lesson/rtclib/rtc-dva-budilnika-i-son/): Два аппаратных будильника тянут один пин INT/SQW: карта регистров A1 и A2, флаги A1F и A2F, цепочка пробуждения спящего узла и обязательный сброс флага. - [Сработать в 18:30: момент, штамп дня и разность unixtime](https://arduin-arsenal.ru/lesson/rtclib/rtc-srabotal-v-1830/): Будильная минута проскочила между пробуждениями: момент через больше-или-равно, штамп дня против повторов, остаток и опоздание разностью unixtime. - [По будням в 7:00: таблица расписаний на все дни недели](https://arduin-arsenal.ru/lesson/rtclib/rtclib-budni-vyhodnye-raspisanie/): Расписание с собственной строкой на каждый день: таблица 7х2, маска «по будням» в один бит, флаг сработки и подвод времени кнопками без ожидания субботы. - [Каждая строка со штампом: журнал событий в Serial](https://arduin-arsenal.ru/lesson/rtclib/rtclib-zhurnal-v-serial/): Журнал событий с метками времени в Serial: анатомия строки, паддинг нулей, уровни INFO и WARN, CSV-режим под локаль Excel и цена опоздавшего штампа. - [Секунда щёлкнула — экран ожил: часы без delay](https://arduin-arsenal.ru/lesson/rtclib/rtclib-chasy-bez-delay/): Событийные часы на LCD и OLED: кадр рисуется в момент смены секунды, loop свободен для кнопок подвода времени, I2C-трафик вдвое ниже, чем у delay(500). - [Полив в 7:00 на 10 минут: окно, флаг и EEPROM](https://arduin-arsenal.ru/lesson/rtclib/rtclib-poliv-rele-700-desyat-minut/): Насос включается по DS3231 в 7:00 на десять минут: окно вместо равенства секунд, флаг уже полил в EEPROM и защита от второго срабатывания при сбое питания. - [Сколько работал насос: unixtime-разница и сводка в полночь](https://arduin-arsenal.ru/lesson/rtclib/rtclib-nasos-narabotka-unixtime/): Считаем наработку насоса разницей unixtime: метка на старте, дельты секунд в копилку суток и сводка в Serial ровно в полночь — без переносов часов и минут. - [Летнее время и RTC: кто должен знать про сдвиг](https://arduin-arsenal.ru/lesson/rtclib/rtclib-perevod-chasov-dst-v-skeche/): DS3231 хранит время как есть, а сезонный сдвиг решает скетч: где жить флагу летнего времени, когда Европа переводит стрелки и почему в России сдвига нет. - [Мини-будильник с зуммером: сравнение HH:MM, флаг и кнопка тишины](https://arduin-arsenal.ru/lesson/rtclib/rtclib-budilnik-zummer-flag/): Будильник на DS3231: сравнение часов и минут каждую секунду, флаг уже прозвенел против повторов и кнопка тишины на D2. Скетч с зуммером на D8 и все грабли tone. - [Обратный отсчёт до даты: дни и часы до события через unixtime](https://arduin-arsenal.ru/lesson/rtclib/rtclib-otschet-dni-chasy/): Обратный отсчёт до Нового года и дня рождения: разность unixtime одним минусом, перевод секунд в дни и часы, потолок int на Uno и ветка для прошедшей даты. - [Установка времени из Serial: команда SET, парсинг и защита ввода](https://arduin-arsenal.ru/lesson/rtclib/rtclib-serial-set-komanda/): Команда SET 2025-01-15 10:30:00 из монитора: парсинг по разделителям, диапазоны вместо веры в юзера, rtc.adjust и честный отказ на кривой ввод. - [Сверка RTC с телефоном: подвод времени по Bluetooth без сети](https://arduin-arsenal.ru/lesson/rtclib/rtclib-sverka-chasov-telefon/): Сверка часов DS3231 со смартфоном: HC-05 на 9600 бод, делитель 1к/2к на линии RX, команда ТЧЧММ из приложения-терминала и эхо-ответ для сверки. Дача без Wi-Fi. - [Восход и закат: солнечная арифметика для света и полива](https://arduin-arsenal.ru/lesson/rtclib/rtclib-voshod-zakat-arifmetika/): Свет и полив по солнцу вместо жёсткого расписания: широта и долгота, угол минус 0,833 градуса, сумерки, полярный день и сверка скетча с калькулятором NOAA. - [29 февраля: високосный год и несуществующие даты](https://arduin-arsenal.ru/lesson/rtclib/rtclib-vysokosnyi-god-29-fevralya/): Будильник на 29 февраля молчит четыре года, 31 июня живёт в регистрах. Правило високосного года одной строкой, тихий перенос на 1 марта и предел 2100 года. - [Будильник в millis-цикле: сравнение DateTime, будни и snooze](https://arduin-arsenal.ru/lesson/rtclib/rtclib-budilnik-millis-budni-snooze/): Будильник на DS3231 без регистров: сравнение DateTime в millis-цикле, расписание по будням, отсрочка snooze на девять минут и ловушка пропущенной секунды. - [Логирование времени: CSV-строка «2025-03-08 14:05:00,temp»](https://arduin-arsenal.ru/lesson/rtclib/rtclib-log-csv-metka-vremeni/): Строка «2025-03-08 14:05:00,23.4» из RTC: склейка полей с ведущими нулями, запись на SD-карту и эхо в Serial, грабли String и десятичной запятой в таблицах. - [Часы на LCD: день недели по-русски и правка кнопками](https://arduin-arsenal.ru/lesson/rtclib/rtclib-lcd-rus-den-nedeli-redaktor/): Часы на LCD 16x2 с DS3231: день недели по-русски из dayOfTheWeek, мигающие двоеточия и правка времени кнопками без ноутбука — автомат режима и adjust. - [DS1307 против DS3231: сравнение и замена модуля](https://arduin-arsenal.ru/lesson/rtclib/ds1307-vs-ds3231/): DS1307 против DS3231: точность ±20-50 ppm против ±2 ppm, ловушка питания 5 В, батарейки CR2032 и LIR2032, общий адрес 0x68 и замена модуля одной строкой. - [Полив по расписанию: RTC + реле по часам](https://arduin-arsenal.ru/lesson/rtclib/rtc-poliv-po-raspisaniyu/): Полив по расписанию: слоты в массиве (час, минута, длительность), окно срабатывания с флагом против повторов, реле на пине 7 и насос 5 В от отдельного питания. - [Перевод часов: летнее/зимнее время без ручной возни](https://arduin-arsenal.ru/lesson/rtclib/rtc-dst-perevod-chasov/): Перевод часов скетчем: последнее воскресенье месяца через day(), корректировка по флагу раз в сутки, ловушка несуществующего часа, UTC вместо локального. - [Аквариум: рассвет и закат ШИМ-светом по времени RTC](https://arduin-arsenal.ru/lesson/rtclib/rtclib-akvarium-shim-rassvet/): Рассвет и закат в аквариуме: рампа яркости 40 минут по часам DS3231, окно светового дня, analogWrite и MOSFET вместо реле, обход кнопкой, ловушки ШИМ на Uno. - [Инкубатор: поворот лотка по таймеру и тревога по температуре](https://arduin-arsenal.ru/lesson/rtclib/rtclib-inkubator-povorot-temperatura/): Инкубатор на DS3231: поворот лотка серво каждые 3 часа без delay, температура кристалла как вторая линия контроля, зуммер за коридором, журнал в Serial. - [Полив двух зон: очередь насоса, таймауты и защита от сухого хода](https://arduin-arsenal.ru/lesson/rtclib/rtclib-poliv-zony-ochered/): Две зоны на одном насосе: очередь millis-автоматом, таймаут зоны и потолок, сухой ход по току ACS712, блокировка в EEPROM, которую не снимает перезагрузка. - [Подключение DS3231: точность и температурная компенсация](https://arduin-arsenal.ru/lesson/rtclib/ds3231-tochnost-i-kompensaciya/): Почему DS3231 уходит на секунды в год, а DS1307 — на минуты в месяц: термокомпенсированный кварц, чтение температуры и служебных регистров по шине I2C. - [RTClib: установка и первый скетч](https://arduin-arsenal.ru/lesson/rtclib/rtclib-ustanovka-pervyi-skech/): Ставим библиотеку Adafruit RTClib через менеджер, проверяем rtc.begin() и lostPower(), устанавливаем время одной строкой и читаем дату в Serial-монитор. - [DateTime: разбор объекта времени](https://arduin-arsenal.ru/lesson/rtclib/datetime-razbor-obekta/): Поля и методы объекта DateTime: год, месяц, день, часы, unixtime, день недели; сравнение моментов операторами и сдвиг на интервал через TimeSpan. - [Будильник на DS3231: сравнение времени и флаг](https://arduin-arsenal.ru/lesson/rtclib/rtclib-budilnik-flag/): Кормушка в 7:30 без шестидесяти повторов: минуты от полуночи, окно срабатывания, флаг fired и сброс после полуночи. Классические ловушки сравнения DateTime. - [Ночь и день по часам: расписание с гистерезисом](https://arduin-arsenal.ru/lesson/rtclib/rtclib-raspisanie-den-noch/): Досветка курятника в 19:50 до 06:10: минуты от полуночи, разворот сравнения через полночь и гистерезис порогов против скачков времени. Реле щёлкает раз в сутки. - [Дрейф кварца RTC: сколько уходит за месяц](https://arduin-arsenal.ru/lesson/rtclib/rtclib-drejf-temperatury/): Полив в 7:00 через месяц поливает в 7:12: арифметика ppm, DS1307 против DS3231 в цифрах, тест против millis и компенсация в скетче. Почему DS3231M не DS3231SN. - [Установка времени: adjust и текущая компиляция](https://arduin-arsenal.ru/lesson/rtclib/rtclib-adjust-ustanovka-vremeni/): Как часы узнают который час: DateTime(__DATE__,__TIME__) и момент сборки, ручная установка шестью числами, зазор компиляции и команда set из монитора. - [unixtime: секунды с 1970 года](https://arduin-arsenal.ru/lesson/rtclib/rtclib-unixtime-epoha/): Считаем от эпохи: зачем unixtime дате, арифметика дней вычитанием, день недели из числа, ловушка 86400 в int и границы 2038 и 2106 годов. Разница дат на long. - [Дни недели и месяцы: форматирование вывода](https://arduin-arsenal.ru/lesson/rtclib/rtclib-dni-nedeli-format/): Пн/Вт/Ср из dayOfTheWeek и красивые даты без библиотек: массивы имён на русском, родительный падеж месяцев, ведущие нули и три формата вывода. - [Часы на LCD: RTC и дисплей вместе](https://arduin-arsenal.ru/lesson/rtclib/rtclib-chasy-na-lcd/): Настольные часы на LCD 16x2 и DS3231 по I2C: раскладка по клеткам, центрирование строки времени, мигающее двоеточие, дата и температура чипа во второй строке. - [Часы на OLED: крупный циферблат](https://arduin-arsenal.ru/lesson/rtclib/rtclib-chasy-na-oled/): Крупные цифры на SSD1306: геометрия шрифта Adafruit_GFX, setTextSize(2), пиксельный setCursor вместо клеток, мигающее двоеточие и цена кадра в байтах. - [Будильники DS3231: два независимых таймера](https://arduin-arsenal.ru/lesson/rtclib/rtclib-budilniki-ds3231/): Аппаратные будильники чипа: регистры Alarm 1 и Alarm 2, режимы от секунды до дня недели, флаги A1F/A2F, общий пин INT/SQW и сброс флага после звонка. - [Прерывание от RTC: пробуждаем Arduino](https://arduin-arsenal.ru/lesson/rtclib/rtclib-sqw-preryvanie-probuzhdenie/): Пин SQW у DS3231 отдаёт честный секундный такт: подключаем его к D2, ловим attachInterrupt по FALLING и будим плату из powerDown ради экономии батареи. - [Расписание на неделю: таймер полива](https://arduin-arsenal.ru/lesson/rtclib/rtclib-raspisanie-nedelya/): Расписание полива по дням недели поверх DateTime: массив плана, утреннее окно, флаг «уже полил сегодня» и проверка подменой времени через rtc.adjust. - [Автополив: RTC, реле и датчик почвы](https://arduin-arsenal.ru/lesson/rtclib/rtclib-avtopoliv-rele-i-pochva/): Автополив на RTC: насос через реле на D7 и датчик почвы на A0 — поливаем по расписанию, только если земля сухая: гистерезис и страховка по времени. - [Свет по расписанию: включение на закате](https://arduin-arsenal.ru/lesson/rtclib/rtclib-svet-po-raspisaniyu/): Окно освещения по часам DS3231 и реле: от часа X до часа Y без щелчков каждую секунду, флаги состояния, граница через полночь и честный разговор про закат. - [Сравнение DateTime: раньше, позже, интервалы](https://arduin-arsenal.ru/lesson/rtclib/rtclib-sravnenie-datetime/): Сравниваем моменты как машины: операторы DateTime на плате, unixtime-разности в симуляторе, хронология из трёх отметок и ловушка беззнаковой разности. - [TimeSpan: длительности и арифметика времени](https://arduin-arsenal.ru/lesson/rtclib/rtclib-timespan-arifmetika/): TimeSpan из RTClib: сдвиг момента на интервал, обратный отсчёт до дедлайна и ловушка hours() у выдержки в 36 часов — плюс unix-арифметика для симулятора. - [Кормушка по расписанию: RTC и серво](https://arduin-arsenal.ru/lesson/rtclib/rtclib-kormushka-servo-raspisanie/): Кормушка на DS3231 и серво: слоты кормления по часам с флагами, интервалы на unixtime и что происходит с millis-расписанием после отключения питания. - [Drift часов: DS1307 против DS3231 в цифрах](https://arduin-arsenal.ru/lesson/rtclib/rtclib-drift-ds1307-ds3231/): Сколько секунд в месяц теряет дешёвый кварц: паспорт ±20 ppm, конденсаторы нагрузки, температура и старение — бюджет ухода и когда дрейф ломает расписание. - [Точность RTC: ppm и секунды за месяц](https://arduin-arsenal.ru/lesson/rtclib/rtclib-ppm-kalkulyator-drejfa/): Переводим ppm в секунды: кварц 32768 Гц, формула дрейфа и калькулятор — сколько на самом деле уходят ±2 ppm у DS3231 и ±20 ppm у дешёвого кварца. - [Батарейка CR2032: ресурс и замена](https://arduin-arsenal.ru/lesson/rtclib/rtclib-cr2032-resurs-i-zamena/): Сколько живёт батарейка CR2032 в модуле DS3231: расчёт ресурса от тока 0,84 мкА, признаки разряда, замена таблетки без потери времени и скетч-полисмен в Serial. - [LIR2032: перезаряжаемая альтернатива и заряд](https://arduin-arsenal.ru/lesson/rtclib/rtclib-lir2032-zaryad-i-lovushki/): LIR2032 против CR2032: напряжение и ёмкость, зарядная ветка с диодом и 200 Ом, расчёт тока заряда, ловушки вздутия и скетч-сторож откатов времени в EEPROM. - [NTP и RTC: синхронизация через ESP32](https://arduin-arsenal.ru/lesson/rtclib/rtclib-ntp-rtc-sinhronizaciya/): Пара ESP32 и DS3231: метка времени из сети, запись в RTC одним вызовом, суточная калибровка и часы, которые не боятся ни перезагрузки, ни моргания света. - [Календарь праздников: годовые таблицы в коде](https://arduin-arsenal.ru/lesson/rtclib/rtclib-kalendar-prazdnikov/): Годовая таблица праздников в массивах: проверка «сегодня праздник?» одним проходом цикла, диапазон январских каникул, отсчёт дней с високосной поправкой. - [Логгер с метками времени: SD плюс RTC](https://arduin-arsenal.ru/lesson/rtclib/rtclib-logger-metki-vremeni/): Каждая строка журнала со штампом YYYY-MM-DD HH:MM:SS: сборка через pad2, close() после записи и почему RTC-штамп переживает сброс, а millis-метка — нет. - [Термометр DS3231: встроенный датчик температуры](https://arduin-arsenal.ru/lesson/rtclib/rtclib-termometr-ds3231/): getTemperature() — термометр внутри часов: шаг 0,25 °C и самонагрев, контроль нагрева корпуса с гистерезисом и бесплатная колонка температуры в журнале. - [Часы DS3231: настоящее время на плате](https://arduin-arsenal.ru/lesson/rtclib/rtc-ds3231-vremya/): Зачем Arduino отдельные часы: модуль DS3231 с точностью ±2 ppm и батарейкой CR2032, установка времени rtc.adjust и чтение rtc.now() в Serial-монитор. - [Часы с будильником: LCD + RTC](https://arduin-arsenal.ru/lesson/rtclib/rtc-budilnik/): Настольные часы с будильником на Arduino: LCD 16x2 и DS3231 на одной шине I2C, флаг срабатывания, ловушка шестидесяти будильников и дневной цикл. ## Arduino IDE: скачать и настроить за 10 минут (https://arduin-arsenal.ru/p/arduino-ide/) Как скачать Arduino IDE 2 с официального сайта, поставить драйвер CH340 для китайских плат, выбрать порт и загрузить первый скетч: разбор частых затыков. **Arduino IDE на русском языке есть?** Да, IDE 2.x автоматически определяет язык системы. Переключить вручную: File → Preferences → Language → Русский, затем перезапуск редактора. **Можно ли программировать ESP32 через Arduino IDE?** Да: File → Preferences → Additional Board URLs, вставьте https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json, затем установите пакеты ESP32 в Boards Manager. Подробнее разобрано в [уроке про ESP32](/lesson/esp32/wifi-begin-podklyuchenie-router). **Почему Arduino IDE бесплатная?** Arduino IDE это open-source ПО под лицензией GPL. Официальный сайт распространяет её бесплатно; скачивайте только оттуда, чтобы не получить модифицированный установщик. **Нужен ли интернет, чтобы работать в Arduino IDE?** Нужен один раз, при первом запуске: IDE скачивает индекс плат и библиотек. Дальше компиляция и загрузка идут по локальным копиям, а обновления приходят только по вашей команде. **IDE 2.x не запускается на старом компьютере, что делать?** IDE 2.x требует Windows 10 и новее, Windows 7 и 8 она не поддерживает. Если система старее или ноутбук очень слабый, ставьте 1.8.19: у неё другие требования, и ваши скетчи откроются без конвертации. ## Распиновка Arduino Uno R3: все выводы на одной схеме (https://arduin-arsenal.ru/p/arduino-uno-raspinovka/) Полная распиновка Arduino Uno R3: 14 цифровых и 6 аналоговых пинов, ШИМ, I2C, SPI, UART, питание. Интерактивная схема с описанием каждого вывода. **Чем Arduino Uno R3 отличается от Nano?** Электроника почти та же, тот же ATmega328P, но Uno крупнее, с разъёмом питания и стандартным форм-фактором шилдов. Nano компактнее и питается только от micro-USB, зато у него есть два дополнительных аналоговых входа A6 и A7. **Можно ли подать 12 В на пин 5V?** Нет. На Vin подавать можно, 7–12 В, а на пин 5V только стабилизированные 5 В. Подача 12 В на 5V сжигает стабилизатор и чип. **Сколько светодиодов можно подключить к Uno?** Каждый пин это один светодиод через резистор 220 Ом, до 15 мА. Больше 8–10 штук только через адресную ленту WS2812, там все светодиоды займут один пин. **Какие пины Uno нельзя занимать?** D0 и D1: это RX и TX того же порта, через который идёт связь с компьютером, и скетч с Serial перестанет загружаться. Остальные цифровые пины свободны, но помните про общий потолок 100 мА и про то, что D10 и D11 заняты SPI. **Почему у Uno нет A6 и A7?** Эти два вывода есть у Nano, а на Uno аналоговых входов ровно шесть: A0–A5. Схемы, где датчик вешают на A6, для Uno не подходят, такие пины там просто отсутствуют. ## Распиновка ESP32: назначение GPIO на одной схеме (https://arduin-arsenal.ru/p/esp32-raspinovka/) Распиновка ESP32 DevKit V1: 25 GPIO, 12-битный АЦП, DAC, сенсорные пины, UART, I2C, SPI. Интерактивная схема, пины-ловушки GPIO 0, 2, 12, 15, питание 3.3 В. **ESP32 работает с 5 В логикой?** GPIO ESP32, это 3,3 В, а толерантность к 5 В не заявлена. Для входов 5 В используйте делитель напряжения или преобразователь уровней. Модули с пометкой HC, например HC-SR04, от 5 В питаются нормально, но их выход нужно делить. **Сколько пинов ШИМ у ESP32?** Почти все GPIO поддерживают LEDC-ШИМ, до 16 каналов с разрешением до 20 бит. В Arduino-среде analogWrite работает на большинстве выводов, в отличие от Uno, где ШИМ только на шести пинах. **Какой АЦП у ESP32 и сколько бит?** Два 12-битных АЦП, значения от 0 до 4095. ADC1 сидит на GPIO 32–39, ADC2 на GPIO 0, 2, 4, 12–15, 25–27 и не работает вместе с WiFi. Линейность неидеальна около нуля, для точных измерений калибруйте или берите ADS1115 по I2C. **Почему бортовой светодиод ESP32 не мигает?** На DevKit V1 светодиод подключён к GPIO 2 и горит при LOW, то есть активен по минусу. Если в скетче выставляете HIGH, лампочка гаснет. Мигайте бортовым светодиодом через LOW либо подключите внешний к GPIO 2 через резистор. **Можно ли использовать все 25 GPIO одновременно?** Нет. Шесть выводов, GPIO 6–11, отданы внутренней флеш-памяти, ещё несколько заняты USB-мостом и режимом загрузки. Реально свободных выводов на DevKit V1 около двадцати, и это с учётом I2C, SPI и UART. ## Библиотека FastLED: скачать и подключить WS2812 (https://arduin-arsenal.ru/p/fastled-skachat/) Как установить библиотеку FastLED: через менеджер библиотек или ZIP с GitHub. Подключение ленты WS2812/NeoPixel, порядок цветов GRB, примеры и правила питания. **FastLED работает с ESP32?** Да, ESP32 и ESP8266 официально поддерживаются. На ESP32 выбирайте пины данных из диапазона GPIO 16–33. Если наблюдаются глюки или сбои, сначала обновите библиотеку: на ESP32 используется свой механизм формирования импульсов, и старые версии FastLED с ним не дружили. **Почему лента светится зелёным вместо красного?** Это порядок цветов: у WS2812B физически GRB. Укажите шаблоном addLeds. Если перепутать RGB и GRB, цвета поедут, но лента работать будет. **Можно ли подключить WS2812 без резистора?** Работать будет, но первый пиксель быстрее деградирует от выбросов в линии данных. Резистор 300–500 Ом стоит копейки, поэтому мы его ставим всегда. **Почему ничего не горит, хотя код написан верно?** Проверьте три вещи: вызывается ли FastLED.show(), подключён ли сигнальный провод к тому пину, который указан в addLeds, и есть ли питание на ленте. Самая частая причина это забытый show(): данные посчитаны, но не отправлены. **Сколько лент можно подключить к одной плате?** Ограничение не в количестве лент, а в токе и в таймерах. На Uno у Arduino один таймер для лент, поэтому несколько лент на разных пинах требуют переноса на другой таймер или перехода на ESP32. По току считайте суммарно: белый пиксель это до 60 мА. ## Подключение DHT11 и DHT22 к Arduino: схема и код (https://arduin-arsenal.ru/p/dht11-podklyuchenie/) Как подключить DHT11 или DHT22 к Arduino: распиновка, резистор подтяжки 10 кОм, библиотека DHT sensor library, код чтения и лечение показаний NAN на 3.3 В. **DHT11 показывает nan. Что делать?** Проверьте пять вещей: питание 5 В, подтяжка 10 кОм между DATA и VCC, правильность ног (лицом к решётке: VCC, DATA, NC, GND), задержку между опросами не меньше секунды и целостность провода данных. **Можно ли подключить два DHT11 к одной Arduino?** Да, на разные цифровые пины (например, D2 и D3), создав два объекта DHT. Протокол у них общий, но адреса у датчиков нет, поэтому каждый сидит на своей линии и они независимы. **Чем DHT лучше DS18B20?** DS18B20 меряет только температуру, зато точнее (около ±0.5 °C), быстрее и в герметичном корпусе для воды. DHT добавляет влажность. Для погодной станции берите оба. **Почему DHT11 не показывает температуру ниже нуля?** Такова его конструкция: рабочий диапазон начинается с 0 °C, и ниже нуля датчик просто не работает. DHT22 уходит до −40 °C и для уличных проектов подходит только он. **Какая библиотека нужна для DHT22?** Та же, что и для DHT11, только в define меняется тип: #define DHTTYPE DHT22. Библиотека DHT sensor library от Adafruit работает с обоими сенсорами. Для ESP32 есть отдельная DHTesp, она стабильнее по таймингу. ## Подключение LCD 16x2 по I2C к Arduino: 4 провода (https://arduin-arsenal.ru/p/lcd-i2c-podklyuchenie/) Подключение LCD 16x2 и 20x4 к Arduino по I2C: схема на 4 провода, адрес 0x27 или 0x3F, библиотека LiquidCrystal_I2C и лечение квадратов вместо букв. **Какой адрес у моего LCD I2C?** Чаще 0x27 или 0x3F. Точный адрес покажет I2C-сканер: короткий скетч перебирает адреса и печатает найденные в Serial Monitor. **Можно ли подключить LCD и DS3231 к одной шине I2C?** Да, I2C для этого и создан: у каждого устройства свой адрес (LCD 0x27, часы DS3231 0x68). Подтяжка обычно уже есть на модулях. **Почему не выводится кириллица?** Контроллер HD44780 хранит свои символы, кириллица возможна через createChar (до 8 своих символов) или через версию библиотеки с русской кодовой страницей. Для полноценного текста проще OLED SSD1306 с русским шрифтом. **Экран показывает квадраты, что делать?** Сначала покрутите потенциометр контраста при включённом питании: квадраты в первой строке почти всегда означают сбитый контраст. Если квадраты во второй строке, проверьте адрес и размер экрана в конструкторе библиотеки. **Можно ли подключить LCD 16x2 напрямую к Arduino, без переходника?** Можно, но это 12 проводов и куча пайки. Прямое подключение оправдано, когда нужна скорость обновления или когда переходника под рукой нет. Для обучения удобнее I2C-модуль: четыре провода и одна библиотека. ## OLED SSD1306 128x64: подключение к Arduino по I2C (https://arduin-arsenal.ru/p/oled-ssd1306-podklyuchenie/) Подключение OLED 128x64 (SSD1306) к Arduino по I2C: 4 провода, адрес 0x3C, библиотеки Adafruit SSD1306 и GFX, первый текст, графика и чёрный экран. **OLED лучше LCD 16x2?** Для графики, шрифтов и анимации да, OLED заметно круче и не требует подсветки. LCD дешевле и читается на прямом солнце. Для меню и текстов, где хватает восьми своих символов, LCD тоже уместен. **Почему на OLED чёрный экран?** Чаще всего не вызван display.display(), а рисунок остался в буфере. Дальше проверьте адрес (0x3C или 0x3D), размер экрана в конструкторе и тип контроллера: для SH1106 нужна другая библиотека. **Как вывести кириллицу на OLED?** Встроенный шрифт Adafruit GFX содержит только латиницу. Для русского текста нужен свой шрифт или библиотека u8g2, где начертания подгружаются отдельным файлом. Это отдельная задача, о ней лучше знать заранее. **Сколько памяти ест OLED на Uno?** Буфер кадра 128 × 64 это 1024 байта, а SRAM у Uno всего 2 КБ. Можно уменьшить буфер, выведя только верхние строки, рисовать по частям или перейти на плату с большей памятью. **Можно ли подключить OLED к ESP32?** Да, и там логика 3,3 В родная. Важно проверить подтяжки SDA и SCL: если они на модуле подняты к 5 В, а плата питается от 3,3 В, вывод получит 5 В. Такие модули либо питают от 3,3 В, либо подтяжки выпаивают. ## Подключение сервопривода к Arduino: SG90 и питание (https://arduin-arsenal.ru/p/servo-podklyuchenie/) Как подключить сервопривод SG90 к Arduino: провода, библиотека Servo.h, управление углом, почему серво дёргается и роняет питание, плавные движения. **Почему сервопривод нагревается в покое?** Серво постоянно потребляет ток для удержания позиции, у SG90 это до 240 мА под нагрузкой. Нагрев в покое нормален. Если греется без нагрузки на середине хода, возможен механический упор, проверьте диапазон write(). **Сколько серво можно повесить на Uno?** Библиотека Servo поддерживает до 12 серво на Uno, но ограничение по питанию важнее: больше двух SG90 требуют внешнего источника 5–6 В на 2–3 А. **Servo.h и ШИМ на пинах 9, 10 вместе работают?** Нет: Servo использует Timer1 и отключает analogWrite на пинах 9 и 10. ШИМ-нагрузки разводите на пины 3, 5, 6 и 11. **Почему серво не доезжает до 180 градусов?** У SG90 заявленный диапазон шире реального: на краях механика упирается в стоп, а при попытке туда дойти серво упирается и гудит. Рабочий диапазон примерно 10–170 градусов, за пределами лучше не ходить. **Можно ли управлять серво с ESP32?** Да, библиотека Servo работает и там, а сигнальный уровень ESP32 в 3,3 В обычно достаточен для сервопривода. Питание привода при этом нужно отдельное, по той же причине, что и на Uno. ## WiFi на ESP32: подключение к сети за 5 минут (https://arduin-arsenal.ru/p/esp32-wifi/) Как подключить ESP32 к WiFi в Arduino IDE: установка пакетов ESP32, WiFi.begin со сканированием сетей, статус WL_CONNECTED, IP и ловля WiFi.h not found. **ESP32 не видит WiFi 5 ГГц?** Это ограничение железа: ESP32 работает только в 2.4 ГГц. Включите на роутере смешанный режим или отдельную сеть 2.4 ГГц. **Как узнать MAC-адрес ESP32?** Вызов WiFi.macAddress() после WiFi.begin() печатает шестнадцатеричный MAC, он же полезен для фильтрации на роутере. **ESP32 теряет соединение через сутки. Что делать?** Добавьте мониторинг WiFi.status() в loop и переподключение с задержкой. Типовая причина в том, что роутер чистит DHCP-аренду: продлите аренду или задайте статический IP. **Почему в мониторе порта мусор вместо текста?** Не та скорость. У ESP32 по умолчанию 115200 бод, а многие открывают монитор на 9600, как для Uno. Переключите скорость в настройках монитора порта. **Можно ли подключиться к скрытой сети?** Да, если указать имя сети прямо в коде. В списке результатов WiFi.scan() такая сеть не появится, но подключение сработает, если имя и пароль верны. ## MQTT на ESP32: PubSubClient, брокер и топики (https://arduin-arsenal.ru/p/mqtt-esp32/) Как подключить ESP32 к MQTT-брокеру: PubSubClient, публикация данных датчиков, подписка на команды, Mosquitto или публичные брокеры, QoS и reconnect. **Какой QoS выбрать в MQTT?** QoS 0 это «огонь и забыть» для телеметрии раз в минуту. QoS 1 гарантирует доставку хотя бы раз, дубликаты возможны, и это режим для команд. QoS 2 даёт ровно один раз, но тяжеловесна. PubSubClient поддерживает только QoS 0 и 1. **MQTT через TLS на ESP32 работает?** Да, через WiFiClientSecure с портами 8883 и 8884. Нужен корневой сертификат брокера и больше памяти. PubSubClient с TLS поднимает максимум полезной нагрузки, следите за размером сообщений. **Как связать MQTT с Home Assistant?** Через MQTT Discovery: устройство публикует конфигурационный JSON в топики homeassistant/.../config с описанием сущностей, и после этого датчики появляются в HA автоматически. **Почему publish() возвращает false?** Чаще всего сообщение не помещается в буфер PubSubClient, у которого по умолчанию 256 байт на весь пакет. Увеличьте буфер через setBufferSize(512) или сократите полезную нагрузку. Другие причины: публикация до установления соединения и некорректный топик. **Нужен ли брокер для одного устройства?** Формально нет, но тогда устройство должно знать адрес каждого, кто с ним общается, и следить за всеми подключениями сам. Брокер снимает эту задачу и добавляет одну сущность, которую нужно поднять и настроить. ## ИК-пульт и IRremote: приём кодов кнопок на Arduino (https://arduin-arsenal.ru/p/irremote-pult/) Как подключить ИК-приемник TSOP4838/VS1838B к Arduino и читать кнопки любого пульта через IRremote 4.x: IrReceiver.begin, decode и decodedIRData.command. **Почему приёмник шумит и ловит мусор?** ИК-приёмник чувствителен к ШИМ-подсветке, энергосберегающим лампам и дросселям блоков питания. Программно отсекайте команды 0x00 и ставьте задержку-дебаунс 100 мс. Физически экранируйте приёмник и питайте его от чистых 5 В. **Можно ли Arduino ПОСЫЛАТЬ ИК-сигналы?** Да: ИК-светодиод через резистор 100 Ом на пин и вызов IrSender.sendNEC(address, command, repeat). Так можно дублировать пульт ТВ. Готовые примеры лежат в папке Sender внутри библиотеки. **Пин IRremote конфликтует с tone() и Servo?** По умолчанию IRremote 4.x занимает Timer2 на Uno, а его ШИМ питает пины 3 и 11. Каждый вызов tone() перенастраивает Timer2, и приёмник оглохнет до перезагрузки. Помогает строка #define IR_USE_AVR_TIMER1 перед include: приёмник уезжает на Timer1, tone() остаётся на Timer2. Плата за это: Servo и ШИМ на пинах 9 и 10 становятся недоступны. **Почему скетч из интернета не собирается?** В нём старая версия API: enableIRIn() и results.value вместо IrReceiver.begin и decodedIRData. Подсказка в заголовке: IRremote.h это вторая версия, IRremote.hpp это четвёртая. Либо перепишите на новый API, либо зафиксируйте в менеджере библиотек версию 2.6.0. **Какая дальность работы приёмника?** У TSOP4838 в прямой видимости десятки метров, у VS1838B обычно меньше. В комнате хватает и тех, и других, а вот на улице дальность падает: ИК не огибает препятствия и затухает на стекле. К приёмнику полезно придвинуть чёрную плёнку или отверстие в корпусе, чтобы боковой засветка не мешала. ## Часы реального времени DS3231: подключение и RTClib (https://arduin-arsenal.ru/p/rtc-ds3231/) Подключение часов DS3231 к Arduino по I2C: библиотека RTClib, установка времени, чтение даты, точность ±2 ppm и батарейка CR2032. Отличие от DS1307. **Какая батарейка нужна для DS3231?** CR2032 (3 В, одноразовая) или LIR2032 (перезаряжаемая, для модулей с зарядной цепью). Без батарейки модуль работает, пока есть питание платы, но время сбрасывается при отключении. **Можно ли синхронизировать время DS3231 с NTP?** Да, на ESP32: получите время по NTP, затем rtc.adjust(DateTime(timestamp)), и точность станет сетевой, а не кварцевой. **RTC возвращает нули. В чём дело?** Скорее всего I2C не видит модуль: проверьте провода SDA и SCL, питание и запустите I2C-сканер. Нули также бывают после lostPower без adjust. **Почему время сбрасывается при перезагрузке?** В коде adjust() вызывается безусловно, и при каждом старте время перезаписывается временем компиляции скетча. Правильный вариант: проверять rtc.lostPower() и корректировать время только при сбое питания. **Можно ли поставить CR2032 в модуль с зарядной цепью?** Не стоит. Модуль с цепью зарядки рассчитан на перезаряжаемую LIR2032, и обычная CR2032 под напряжением заряда может потечь или повредиться. Смотрите на плату: если там есть резистор и диод от VCC к батарейке, батарейка должна быть перезаряжаемой. ## Распиновка Arduino Nano: пины, питание, отличия от Uno (https://arduin-arsenal.ru/p/arduino-nano-raspinovka/) Распиновка Arduino Nano (ATmega328P): 22 цифровых и аналоговых вывода, Mini-USB, питание, FTDI/CH340. Интерактивная схема и сравнение с Uno R3. **Чем Nano отличается от Uno электрически?** Почти ничем: тот же ATmega328P, 2 КБ SRAM, 32 КБ Flash. Различия в форм-факторе, USB-чипе (CH340 или FT232 против 16U2), наличии выводов A6 и A7 и отсутствии разъёма питания. **Почему Nano не прошивается, not in sync?** В девяти случаях из десяти в Tools → Processor выбран ATmega328P, а на плате старый загрузчик. Выберите Arduino Nano (Old Bootloader), скорость загрузчика отличается, 57600 против 115200. **Можно ли питать Nano от 3.7В литиевого аккумулятора?** На 5V можно через повышающий преобразователь, напрямую на VIN нет, там нужно 7–12 В. Для батарейных проектов также подходит вывод 5V от преобразователя Step-Up до 5 В. **Что такое выводы A6 и A7?** Это два дополнительных аналоговых входа, которые есть только у Nano. Они умеют только читать напряжение: цифрового вывода, подтяжки INPUT_PULLUP и прерываний у них нет, поэтому digitalWrite по ним не работает. **Можно ли на Nano ставить шилды от Uno?** Формально нет: у Nano другой форм-фактор и выводы сдвинуты, обычный шилд не сядет. Существуют переходные платы, но проще не усложнять и взять плату под задачу. ## Датчики для Arduino: список популярных модулей и подключение (https://arduin-arsenal.ru/p/datchiki-spisok/) Справочник датчиков для Arduino: DHT11/DHT22, DS18B20, BME280, PIR, ультразвук HC-SR04, фоторезистор, MPU6050. Чем измерять и какие библиотеки нужны. **Какой датчик температуры точнее, DHT22 или DS18B20?** DS18B20 даёт ±0,5 °C и живёт в герметичном корпусе, пригодном для воды. DHT22 точность сопоставима, но корпус открытый, а влажность он измеряет хуже. DS18B20 не меряет влажность вовсе, для климата берут пару или BME280. **Сколько датчиков выдержит одна Arduino?** По I2C до 112 адресов, практично 5–10 модулей. Аналоговых входов на Uno шесть, цифровых 14 с учётом занятых. Питания Uno хватает примерно на 500 мА, тяжёлым датчикам нужен свой источник. **PIR срабатывает сам. Что делать?** Проверьте питание: пульсации источника вызывают ложные срабатывания. Уберите датчик от ИК-источников вроде обогревателей и прямого солнца и выставьте подстроечники чувствительности и времени. Первые секунды после включения PIR калибруется, в этот момент не доверяйте ему. **Arduino не видит датчик по I2C. С чего начать?** Со сканера шины: он покажет адреса, которые реально видны. Если ничего не найдено, проверьте перепутаны ли SDA и SCL, не перепутаны ли адреса (0x76 против 0x77 у BMP280 зависит от перемычки SDO) и требует ли модуль 3,3 В. Маршрут целиком в гайде [сканер I2C](/p/skaner-i2c). **Можно ли повесить несколько DS18B20 на один пин?** Да, это штатный режим 1-Wire. У каждого датчика свой 64-битный адрес, шина различает их по адресу, а не по порядку подключения. Единственное условие: подтяжка 4,7 кОм на линии и не слишком длинные провода, иначе сигнал не пройдёт. ## Ультразвуковой датчик HC-SR04: подключение к Arduino и код (https://arduin-arsenal.ru/p/hc-sr04-podklyuchenie/) hc-sr04 подключение arduino: схема на 4 провода, распиновка Trig и Echo, скетч с pulseIn и таймаутом, таблица характеристик и лечение показаний «0 см». **Какое расстояние измеряет HC-SR04?** По даташиту 2–400 см. Уверенная работа на практике: 3–300 см по ровным твёрдым объектам, стоящим перпендикулярно датчику. Мягкие поверхности вроде одеяла, поролона или ковра и предметы под углом поглощают или уводят эхо в сторону, и показания занижаются или пропадают. Ближе 2 см слепая зона: отправленный импульс и эхо не успевают разлепиться. **Почему HC-SR04 показывает 0?** Три причины в порядке вероятности: перепутаны Trig и Echo, поменяйте местами, сгореть ничего не может; pulseIn вернул 0 по таймауту, потому что эха нет, это нормальная ситуация, обрабатывайте как «пусто»; нет контакта по питанию или GND. Если ноль только на близких дистанциях, проверьте, не попало ли препятствие в слепую зону 0–2 см. **Чем HC-SR04 отличается от HC-SR05 и JSN-SR04T?** JSN-SR04T это водонепроницаемый вариант в металлической колбе с одним «глазом»: слепая зона больше (20–25 см), питание 3.3–5 В, идеален для уличного бака. HC-SR05 близок к классике, но умеет работать одним пином, Trig и Echo объединены. Для обучения берите обычный HC-SR04: под него написано 99% примеров в интернете. **Можно ли подключить HC-SR04 к ESP32?** Да, но Echo отдаёт 5 В, а GPIO ESP32 рассчитаны на 3.3 В. Решения: делитель из резисторов 1 кОм и 2 кОм на линии Echo, готовый преобразователь уровней или модуль HC-SR04P с 3.3-вольтовой логикой. Trig ESP32 может дёргать напрямую: 3.3 В SR04 понимает как HIGH. **Какая библиотека нужна для HC-SR04?** Никакая: пары digitalWrite и pulseIn хватает для любого проекта. NewPing и Ultrasonic добавляют удобства (фильтры, неблокирующий опрос), но на старте только прячут от вас механику измерений. Захотите сэкономить пин, есть схема с одним пином на Trig и Echo через резисторный делитель. ## Макетная плата breadboard: как пользоваться и собирать схемы (https://arduin-arsenal.ru/p/maketnaya-plata-breadboard/) Макетная плата как пользоваться: устройство breadboard, шины питания, правила сборки схем с Arduino, выбор джамперов и грабли новичков с решениями. **Зачем нужна макетная плата?** Собирать и менять схемы без пайки: вечером один проект, разобрали, и макетка снова чистая. Для обучения это главный инструмент: ошибка не значит пережжённую дорожку, исправление это перестыковка провода за пару секунд. Все схемы уроков этого сайта собраны именно под макетку. **Сколько напряжения выдерживает breadboard?** Напряжение не главный лимит, контакты держат и 12 В без последствий. Реальный потолок это ток: пружинные контакты греются и подгорают выше примерно 1 А. Моторы и сервоприводы через макетку не питают, только сигнальные цепи; силовые линии ведут клеммниками или пайкой. **Что означают цифры и буквы на макетке?** Цифры нумеруют строки, буквы a–e и f–j столбики в двух половинах, между e и f проходит жёлоб. Адрес b14 это столбик b, строка 14, пять соединённых отверстий. По краям маркированы шины «+» и «−». Адресация помогает переносить схему с бумаги на плату и обратно. **Почему средние ряды соединены, а крайние нет?** Так задумано конструктивно. Вертикальные пятёрки в центре под ножки компонентов: у микросхемы, воткнутой поперёк жёлоба, каждая нога получает отдельный узел. Горизонтальные шины по краям под питание: до любой точки платы дотягивается один провод. Две разные задачи, два разных рисунка соединений. **Можно ли втыкать ESP32 в макетку?** Да: DevKit ставится поперёк центрального жёлоба, пины распределяются по обеим сторонам. Нюанс в ширине: у некоторых плат ножки не дотягиваются до обеих половин, тогда берите две макетки вплотную или соединяйте проводами male–female. Вставляйте ровно, без перекоса: тонкие ножки гнутся, а перекошенная плата даёт пропадающий контакт. ## DHT22: подключение к Arduino — схема, библиотека DHT, код с примером (https://arduin-arsenal.ru/p/dht22-podklyuchenie/) dht22 подключение к Arduino: распиновка 4 пинов, подтяжка DATA 4.7–10 кОм, библиотека DHT, готовый скетч с примером, таблица отличий от DHT11. **Какая библиотека нужна для DHT22?** «DHT sensor library» от Adafruit плюс её зависимость «Adafruit Unified Sensor», обе ставятся из менеджера библиотек по названию. Тип сенсора задаётся константой в конструкторе: DHT dht(2, DHT22), поменяете на DHT11, и тот же код заработает с DHT11. Альтернативная DHTlib от Rob Tillaart тоже рабочая, но 99% примеров в интернете написаны под Adafruit. **Почему DHT22 показывает nan?** nan означает, что сенсор не ответил, и чаще всего это из-за отсутствия подтяжки на DATA или не того типа в конструкторе. Дальше проверяйте по цепочке: питание на VCC (3.3–5.5 В), DATA на том пине, что указан в DHT dht(PIN, ...), контакт в макетке. Битые значения при верной схеме это симптом слишком длинного провода или опроса чаще двух секунд. **Чем DHT22 отличается от DHT11?** Диапазоном и точностью: −40…+80 °C с шагом 0,1 °C против 0…+50 °C с шагом 1 °C; влажность 0–100 % против 20–80 %. Цена вдвое выше, минимальный интервал опроса 2 с против 1 с. Код одинаковый, отличается только константа в конструкторе. Проект на улицу, в теплицу или инкубатор это всегда DHT22. **Можно ли питать DHT22 от 3.3 В?** Да: рабочий диапазон 3.3–5.5 В, режим 3.3 В штатный для ESP32. Единственное условие: подтяжку на DATA ставить к тому же напряжению, что и питание. Запитали от 3.3 В, резистор идёт на 3.3 В. Подтяжка на 5 В при 3.3-вольтовом питании даст 5 В на GPIO ESP32, это за пределами спецификации. **Как часто можно опрашивать DHT22?** Не чаще одного раза в 2 секунды, это предел даташита, у DHT11 раз в секунду. Само чтение занимает около 250 мс, поэтому паузу ставьте после него. Чаще не быстрее: сенсор вернёт устаревшие значения или nan, а не более свежие данные. ## Питание Arduino: VIN, 5V, 3.3V, USB и батарейки — как запитать плату правильно (https://arduin-arsenal.ru/p/pitanie-arduino/) Питание Arduino Uno: VIN 7–12 В, пины 5V и 3.3V, USB, крона и батарейки — таблица источников, выбор по нагрузке, диагностика просадок и глюков. **Можно ли питать Arduino от кроны 9 В?** Да, но только в круглый разъём DC или на VIN, стабилизатор сам сделает 5 В. На пин 5V нельзя ни в каком виде. Обратная сторона: ёмкость кроны около 550 мА·ч, и половина энергии сгорит в стабилизаторе, так что плате достанется несколько часов работы. Для учебного стенда подойдёт, для автономного проекта лучше 4 × AA или две банки 18650. **Что будет, если подать 9 В на пин 5V?** Плата почти наверняка выйдет из строя: пин 5V соединён с шиной питания напрямую, мимо стабилизатора, и на ATmega328P придёт 9 В при максимуме 6 В. Отказ бывает тихим: плата ещё мигает светодиодом от USB, но аналоговые входы и связь по USB ведут себя непредсказуемо. **Чем запитать серво, чтобы оно не дёргалось?** Отдельным источником 5–6 В на 2–3 А с объединённым с Arduino общим GND. SG90 в движении съедает 650–900 мА пиками, MG996 до 2.5 А: просадка ниже ~4.7 В на общей шине даёт перезагрузки и мусор на LCD. Конденсатор 470–1000 мкФ у серво сглаживает пики, но не заменяет отдельный БП. **Сколько вольт можно подавать на VIN Arduino?** Рабочий диапазон 7–12 В, 9 В это оптимум, выше 12 В стабилизатор заметно греется. Абсолютный предел 20 В, но дотягивать до него незачем: при токе в полампера разница между 12 и 20 В превращается в 4–10 Вт тепла на плате. Ниже 7 В стабилизатор не добирает до 5 В, и плата перезагружается. **Можно ли питать Arduino от повербанка?** Да: USB-выход повербанка даёт 5 В и 1–3 А, для платы с датчиками с запасом. Нюанс: многие повербанки отключают выход, когда ток падает ниже примерно 50–100 мА, а плата в простое ест 30–50 мА. Берите модель с низкотоковым режимом, обычно помеченную для часов и гарнитур, или добавляйте периодическую нагрузку, например мигающий светодиод. ## Симулятор Arduino онлайн: проверьте скетч без платы (https://arduin-arsenal.ru/p/simulyator-arduino-onlayn/) Бесплатный симулятор Arduino в браузере: светодиоды, дисплеи, датчики, дальномер, серво и Serial Monitor. Проверьте скетч без платы, установки и регистрации. **Работает ли симулятор без интернета?** После первой загрузки в основном да: страница, стили и движок кэшируются браузером, а исполнение скетча целиком идёт на вашем устройстве. Гарантии офлайна нет: обновление вкладки без сети может не достать кэш, и страница не откроется. Для урока в классе с капризным Wi-Fi откройте симулятор заранее: уже загруженная вкладка работает автономно. **Чем наш симулятор отличается от Wokwi?** Три практические разницы: не нужна регистрация (в Wokwi аккаунт требуется для сохранения проектов), интерфейс на русском и периферия собирается сама, движок читает код и подключает светодиоды, дисплеи и датчики к нужным пинам без рисования схемы. Зато у Wokwi шире список поддерживаемых библиотек и есть ESP32, для этих задач честнее использовать его. **Можно ли проверить код для ESP32?** Нет: движок эмулирует ATmega328P, микроконтроллер Arduino Uno. WiFi, два ядра, 3.3-вольтовая логика и GPIO-матрица ESP32 не эмулируются. Скетч из digitalWrite и Serial компиляция примет, но поведение портов не повторит. Для ESP32 берите Wokwi или реальную плату: у нас есть распиновка ESP32 и раздел уроков про Wi-Fi на нём. **Сохраняется ли мой скетч?** Да, в localStorage вашего браузера. Панель «Мои схемы» хранит до 20 именованных снапшотов вместе с положениями ползунков датчиков: парктроник загружается с тем же расстоянием до препятствия, метеостанция с той же температурой. На сервер ничего не уходит. Очистка данных сайта в браузере снесёт и схемы, поэтому важный код держите копией в файле. **Почему светодиод на пине 3 тусклый?** Пин 3 один из шести ШИМ-пинов Uno, и если в коде analogWrite(3, 50), диод получает не постоянные 5 В, а импульсы частотой 490 Гц с заполнением 50 от 255, в среднем около вольта, отсюда треть яркости. Это не баг, а честная модель ШИМ: полоса рядом с диодом показывает duty. Нужна полная яркость, digitalWrite(3, HIGH) или аргумент ближе к 255; как устроен ШИМ, разобрано в уроке про analogWrite и яркость. ## Проекты Arduino для начинающих: 25 идей от мигалки до метеостанции (https://arduin-arsenal.ru/p/proekty-arduino-dlya-nachinayushchih/) 25 идей проектов на Arduino Uno: уровень, детали и время сборки. Три проекта с готовым кодом для симулятора и ссылки на уроки с разбором строк. **Какой проект сделать первым?** Мигалку: десять минут и ноль деталей, первая строка таблицы. Дальше светофор из трёх светодиодов на delay, на нём отрабатываются pinMode, digitalWrite и порядок в коде. Ночная лампа это первый проект с датчиком и аналоговым входом. Частая ошибка новичка: начинать с гирлянды WS2812. Красиво, но без понимания цифровых пинов любая ошибка превращается в тупик с библиотеками. **Нужна ли пайка?** Нет: весь первый десяток собирается на макетной плате с dupont-проводами и перемычками. Пайка понадобится намного позже, когда рабочий проект переедет из макетки в коробку, и даже там многие годами живут на винтовых клеммниках. Поэтому проекты из статьи можно сначала пройти в симуляторе, а потом повторить на реальных деталях без единого касания паяльника. **Сколько стоит набор деталей?** Стартовый набор с клоном Uno, макеткой, проводами и десятком модулей обходится примерно в 1500–3000 руб. на маркетплейсах, его хватает на всю таблицу, кроме, может быть, реле и помпы для поливалки. Модули по отдельности стоят 50–300 руб., но россыпью выходит дороже и дольше по доставке. Первый проект вообще бесплатный: бортовой светодиод на плате требует только USB-кабеля. **Можно ли повторить проект без железа?** Да: все три разобранных скетча запускаются в симуляторе на этом сайте, вставьте код и нажмите «Запустить», периферия появится сама. Ограничение одно: реле и помпа не эмулируются, вместо них светится светодиод, а логика переключения отрабатывается полностью. Серво, дисплеи, датчики и зуммер в симуляторе интерактивные: ползунки и кнопки ведут себя как настоящие. **Где брать код, если нужны другие проекты?** В наших уроках: каждый с разбором строк, граблями и проверкой скетча на движке симулятора, старт с раздела «Основы», дальше датчики, дисплеи и сервоприводы. Для чужих проектов правило такое: код с форумов сверяйте с версией библиотеки, API меняется между версиями, и старые скетчи не собираются. Примеры из папки examples установленной библиотеки всегда соответствуют её версии. ## Подключение светодиода к Arduino: резистор, полярность и схема для Uno (https://arduin-arsenal.ru/p/svetodiod-podklyuchenie/) Как подключить светодиод к Arduino Uno: какой резистор нужен и почему, где у диода анод и катод, схемы на один пин и через ШИМ, грабли новичков. **Какой резистор нужен для светодиода на Arduino Uno?** Стандарт это 220 Ом: (5 В − 2 В)/220 Ом ≈ 13,6 мА. Для 330 Ом ток около 9 мА, тише, но с запасом. Точный расчёт: R = (5 В − падение на диоде) / желаемый ток. **Можно ли подключить светодиод без резистора?** Только бортовой L на пине 13, у него резистор уже стоит на плате. Внешний диод без резистора получит десятки миллиампер: сначала ярко, потом деградация кристалла и порт с просевшими характеристиками. Деградация занимает недели, поэтому «работает же» аргументом не является. **Сколько светодиодов можно повесить на одну Uno?** На отдельные пины 8–10 индикаторных с учётом суммарного потолка 100 мА. Больше только через адресную ленту WS2812: десятки диодов с одного пина через библиотеку FastLED. **Что будет, если перепутать анод и катод?** Ничего страшного: диод в обратном направлении ток почти не проводит и просто не загорится. Порт при этом не пострадает. Правда, если напряжение на обратном диоде окажется выше допустимого, кристалл всё же пробьёт. **Почему синий светодиод горит тусклее красного?** У синего и белого падение напряжения выше, 3,0–3,2 В против 1,8–2,2 В у красного. На сопротивлении 220 Ом остаётся меньше напряжения на самом кристалле, и ток получается меньше: около 8 мА против 13,6 мА. Лечится резистором 150 Ом. ## Подключение кнопки к Arduino: INPUT_PULLUP, дребезг и схема без лишних деталей (https://arduin-arsenal.ru/p/knopka-podklyuchenie/) Подключение кнопки к Arduino Uno: схема с INPUT_PULLUP без резисторов, почему кнопка читается наоборот, дребезг контактов и готовый скетч с дебаунсом. **Почему кнопка читается наоборот, нажата это LOW?** Схема с INPUT_PULLUP тянет вход к питанию через внутренний резистор 20–50 кОм, а кнопка при нажатии соединяет его с GND. Нажатие замыкает на землю и читается как LOW. Это нормально: в инверсной логике просто проверяйте == LOW. **Можно ли подключить кнопку без резистора?** Да: при INPUT_PULLUP подтяжка встроена в микроконтроллер, внешний резистор не нужен. Внешние резисторы 10 кОм нужны только для схем с pull-down или когда INPUT_PULLUP занят другой задачей. **Кнопка срабатывает случайно, когда её не трогают. В чём дело?** Вход висит без подтяжки, если в коде стоит pinMode(2, INPUT), и ловит наводки от пальцев и проводов. Проверьте режим: с INPUT_PULLUP случайные срабатывания исчезают, остаются только настоящие нажатия и дребезг. **Как убрать дребезг без delay()?** Запомните millis() в момент нажатия и игнорируйте все изменения, пока с прошло меньше 20–50 мс. Loop() при этом продолжает работать, а кнопка не блокирует остальной код. Полный разбор с кодом в уроке про [debounce](/lesson/osnovy/debounce-knopki). **Можно ли кнопку повесить на любой пин?** Да, любой цифровой. Исключение одно: выводы 0 и 1 заняты последовательным портом, и кнопка на них будет мешать выводу данных в монитор. На Uno это пины со 2 по 13, то есть двенадцать свободных цифровых входов. ## Дисплей TM1637: подключение к Arduino (4 цифры, 2 провода) (https://arduin-arsenal.ru/p/tm1637-podklyuchenie/) Как подключить TM1637 к Arduino: два провода CLK и DIO, библиотека TM1637Display, showNumberDec с двоеточием для часов, яркость и чек-лист для молчащего экрана. **Чем TM1637 отличается от MAX7219?** TM1637 это два провода, четыре цифры (реже шесть), восемь уровней яркости и встроенный сканер кнопок, и он дешевле. MAX7219 это SPI на три провода, восемь цифр или матрица 8×8, ток задаётся одним резистором, он ярче и гибче. Для четырёх цифр в проекте беру TM1637, для матриц и бегущих строк MAX7219. **Можно ли вывести буквы на TM1637?** Частично: через setSegments() с сырыми байтами это A, b, C, d, E, F, H, L, P, U, t и минус. Полного алфавита нет: M, W, K на семи сегментах не рисуются. Для текста берите LCD 16x2 или OLED, там шрифт полноценный. **Сколько пинов Arduino занимает TM1637?** Два цифровых (CLK и DIO) плюс питание. Резисторы и подтяжки не нужны, всё уже на модуле. Два дисплея вешаются на четыре пина независимо: адресов у протокола нет, каждый дисплей требует свою пару линий. **Где взять библиотеку для TM1637?** Менеджер библиотек Arduino IDE: Sketch → Include Library → Manage Libraries, поиск по TM1637Display, автор Avishay Orpaz. Установка в один клик, примеры лежат в File → Examples → TM1637Display. **Двоеточие гаснет после первого показа числа. Почему?** showNumberDec() перезаписывает весь буфер дисплея вместе с разделителем. Каждый кадр выводите через showNumberDecEx(число, 0x40), и флаг 0x40 зажигает двоеточие заново. ## BMP280: подключение барометра к Arduino (давление и высота) (https://arduin-arsenal.ru/p/bmp280-podklyuchenie/) Подключение BMP280 к Arduino по I2C: адрес 0x76 или 0x77, давление в гПа через readPressure, высота readAltitude, точность по даташиту и отличия от BME280. **Чем BMP280 отличается от BME280?** BME280 добавляет датчик влажности (±3%) и обычно в 1.5–2 раза дороже. Давление у них одинаковое: диапазон 300–1100 гПа, абсолютная точность ±1 гПа. Для барометра-высотомера BMP280 хватает, для полной погодной станции берите BME280 или связку BMP280 и DHT22. **Какой адрес у BMP280, 0x76 или 0x77?** Зависит от уровня на пине SDO: к GND адрес 0x76, к VCC или в воздухе 0x77. Большинство китайских модулей с адресом 0x76, но библиотека Adafruit по умолчанию опрашивает 0x77, поэтому адрес указывают явно: bmp.begin(0x76). Точный адрес покажет I2C-сканер. **Насколько точен BMP280?** Относительная точность ±0,12 гПа (около ±1 метра высоты), абсолютная ±1 гПа (±8–9 метров), разрешение 0,16 Па в самом точном режиме. Встроенный термометр служит для температурной компенсации: он показывает тепло самого кристалла, а не воздуха в комнате. **Можно ли предсказывать погоду по BMP280?** Да, по тренду: давление меняется до осадков. Падение на 2–3 гПа за 3 часа к ухудшению, рост к прояснению. Абсолютное значение само по себе неинформативно: норма колеблется от 990 до 1040 гПа в зависимости от циклонов. **Почему высота плывёт на десятки метров?** Абсолютная точность ±1 гПа это ±8–9 метров, плюс давление гуляет с погодой сильнее, чем вы поднимаетесь. Барометрический высотомер верен на коротких отрезках, а высоту над уровнем моря фиксируют GPS или калибровкой по известной точке. ## MPU6050: подключение акселерометра и гироскопа к Arduino (https://arduin-arsenal.ru/p/mpu6050-podklyuchenie/) Подключение MPU6050 (GY-521) к Arduino по I2C: адрес 0x68, углы getAngleX и getAngleY, порог наклона, калибровка оффсетов и дрейф гироскопа: с кодом и схемой. **MPU6050 питается от 3.3 В или 5 В?** Кристалл от 3,3 В, но модуль GY-521 имеет свой стабилизатор: подаёте 5 В на VCC, на чип приходят 3,3 В. Подтяжки SDA и SCL на модуле тоже к 3,3 В, для Uno это нормально. Голый чип без модуля питается строго от 3,3 В. **Чем гироскоп отличается от акселерометра?** Акселерометр измеряет ускорение и статический наклон по вектору гравитации, гироскоп скорость вращения в градусах в секунду. Угол из акселерометра стабилен во времени, но шумит от вибраций; из гироскопа чистый, но уплывает. В проектах их совмещают фильтром. **Как откалибровать MPU6050?** Гироскоп: в полном покое усреднить 300–500 отсчётов и вычесть оффсеты из каждого чтения. Акселерометр: положить датчик в шесть ориентаций, снять минимум и максимум по осям, вычислить центр. Оффсеты удобнее считать один раз и хранить, а не мерить при каждом старте. **Почему угол дрейфует, когда датчик неподвижен?** У гироскопа есть смещение нуля, доли градуса в секунду, и интегрирование скорости в угол накапливает ошибку без предела. Калибровка оффсетов снижает дрейф в разы; полное излечение это фильтр с участием акселерометра: комплементарный, Kalman или Madgwick. **Можно ли подключить два MPU6050 к одной шине?** Да: у первого AD0 на GND, адрес 0x68, у второго AD0 на VCC, адрес 0x69. Оба опрашиваются по очереди, так делают датчики наклона на обеих створках двери или двухосевые платформы. ## Расчет резистора для светодиода: онлайн-калькулятор (https://arduin-arsenal.ru/p/raschet-rezistora-svetodioda/) Калькулятор резистора для светодиода: номинал под 3,3 В, 5 В, 9 В и 12 В. Формула по закону Ома, цветовая маркировка E24, мощность и правила подключения. **Какой резистор нужен для светодиода на 5 вольт?** Зависит от цвета и тока: для красного на 15 мА это 220 Ом, для зелёного 200 Ом, для синего или белого 130 Ом. Формула одна: R = (5 − падение диода) / 0,015. Калькулятор выше считает точнее любой таблицы. **Можно ли ставить резистор больше расчётного?** Да, смело: резистор 470 Ом вместо расчётных 220 Ом просто ограничит ток сильнее, светодиод будет тусклее, но безопаснее. А вот меньше расчётного ставить рискованно: ток превысит план, и начнётся перегрев кристалла и пина. **Почему светодиод греется даже с резистором?** Проверьте номинал: 22 Ом вместо 220 Ом это классика, когда путают кольца (красный-красный-коричневый это 220, красный-красный-красный это 2200). Ещё причина в слишком большом токе для корпуса диода: у 3-мм и 5-мм предел 20 мА длительно. Снизьте ток до 10 мА, нагрев уйдёт, яркость упадёт незначительно. **Нужен ли резистор для адресной светодиодной ленты WS2812?** Общий гасящий резистор не нужен: каждый WS2812 внутри содержит драйвер с собственным ограничением тока. Резистор 300–470 Ом ставят последовательно с линией данных, чтобы защитить вход от звонка на длинном проводе, и это другое назначение. **Что лучше: один резистор на несколько светодиодов или каждому свой?** Каждому свой. При общем резисторе параллельные диоды из-за разброса падений делят ток неравномерно: один жрёт большую часть и греется, второй едва светится. При последовательном соединении общий резистор допустим, через цепь течёт один и тот же ток, но питание должно быть выше суммы падений. ## Подключение реле к Arduino: активный LOW, JD-VCC и нагрузка 220 В (https://arduin-arsenal.ru/p/rele-podklyuchenie/) Как подключить модуль реле к Arduino: активный LOW и щелчок при включении, перемычка JD-VCC, ток катушки 70-90 мА, клеммы COM-NO-NC и правила работы с 220 В. **Почему реле включается командой digitalWrite(LOW)?** На модулях с оптопарой вход устроен как low level trigger: анод светодиода оптрона сидит на VCC, и пин должен принять ток на себя, то есть стать LOW. Существуют и активные-HIGH модули без оптопары, чисто транзисторные, у них наоборот. Проверка за минуту: залейте мигалку с задержкой две секунды, и если реле щёлкает в противофазе с ожиданиями, модуль инвертирован. **Какой ток у катушки реле 5 В и можно ли питать от платы?** У SRD-05VDC-SL-C обмотка около 70 Ом: при 5 В это 70–90 мА, причём ток одинаков и при втягивании, и при удержании, катушка резистивная. Один канал от 5 В Uno нормально, четыре канала это 280–350 мА, и нужен отдельный БП через JD-VCC. **Реле щёлкает, а нагрузка не включается. Что проверить?** Первое, клеммы: фаза должна приходить на COM, нагрузка сидеть на NO, а если перепутали с NC, нагрузка горит в покое и гаснет по команде. Второе, ток нагрузки: выше паспортных 10 А контакты подгорают и искрят. Третье, питание модуля: при просадке ниже 3,75 В катушка не втягивается до конца и гудит, не переключая контакты. **Что даёт гистерезис в скетче с реле?** Два порога вместо одного: включение при 24 °C и выключение при 23 °C, в отсчётах АЦП это 400 и 450. Без зоны датчик с дрожью в пару десятых градуса у порога устроит десятки переключений в минуту, и контакты износятся за недели. Ширина зоны это компромисс: узкая зона клацает, широкая гуляет температурой. **Можно ли управлять модулем реле с ESP32 (3.3 В)?** Да, с оптопарными модулями: VCC это 5 В, а на входе хватает 3,3 В, ток через светодиод оптрона ограничен платным резистором. Учитывайте инверсию: LOW означает включено. Безоптопарные транзисторные модули, рассчитанные на 5-вольтовую логику, с 3,3 В иногда не срабатывают, проверяйте конкретную плату до монтажа в корпус. ## ULN2003 и шаговый двигатель 28BYJ-48: подключение к Arduino (https://arduin-arsenal.ru/p/uln2003-podklyuchenie/) Подключение 28BYJ-48 к Arduino через ULN2003: распиновка IN1-IN4, 2048 шагов на оборот, нагрев чипа, отдельное питание 5 В и скетч полушагов без библиотеки. **Сколько шагов на оборот у 28BYJ-48?** Ротор делает 32 полных шага, редуктор 1:63.684 (округляют до 1:64), на выходном валу получается 2038 полных шагов, в округлении «2048». Полушаговый режим удваивает счёт: 4076 полушагов, угол 0,0879° на полушаг. Разница между 2038 и 2048 около 0,5 процента: за десять оборотов набегает целый шаг. **Какую скорость выдерживает 28BYJ-48 при 5 В?** Надёжно 10–15 об/мин, выше начинается срыв шагов: вал дёргается, мотор звенит и не вращается. Задержка между полушагами ниже примерно 2 мс уже рискованна без плавного разгона. Быстрее только смена мотора: NEMA 17 с драйвером A4988 и питанием 12 В. **ULN2003 сильно греется. Это нормально?** Да: транзистор Дарлингтона теряет около 1 В на насыщении, при двух активных фазах по 100 мА чип рассеивает 0,2–0,4 Вт, и корпус до 50–60 °C это норма. Тревожиться стоит, когда плату нельзя держать пальцем дольше секунды: тогда проверьте последовательность фаз (одновременно должны гореть один-два светодиода, не четыре) и напряжение питания. **Можно ли питать мотор от 5 В Arduino?** Для теста на столе да: 100–200 мА на мотор плюс около 50 мА на плату вписываются в USB-порт впритык. Для постоянной работы нет: просадки на пиках дают срыв шагов и перезагрузки платы. Правильно это отдельный БП 5 В на 1 А к VCC платы ULN2003 и общие минусы с GND Arduino. **Чем заменить ULN2003, если нужен мощнее?** Для 28BYJ-48 ничем: мотор униполярный и создан под такой драйвер. Следующий уровень это биполярные шаговики NEMA 17 с драйверами A4988 или DRV8825: микрошаг до 1/16 и 1–2 А на фазу, но нужна своя логика step и dir. L298N тоже умеет шаговики, но греется заметно сильнее и проигрывает A4988 по всем параметрам, кроме цены. ## Arduino Mega 2560: распиновка, питание и порты (https://arduin-arsenal.ru/p/arduino-mega-raspinovka/) Распиновка Arduino Mega 2560: 54 цифровых пина, 15 ШИМ, 16 аналоговых входов, 4 UART, 256 КБ флеша. Питание 7-12 В, I2C на пинах 20-21 и отличие от Uno. **Сколько пинов и сколько ШИМ у Arduino Mega 2560?** 54 цифровых пина (0–53), из них 15 умеют analogWrite: 2–13 и 44–46. Плюс 16 аналоговых входов A0–A15, они только на чтение. Отдельно выведены I2C (20/21), SPI (50–53) и три дополнительных аппаратных UART. **Чем Mega 2560 отличается от Uno?** Чипом ATmega2560 вместо ATmega328P и всем, что из этого следует: флеш 256 КБ против 32, SRAM 8 КБ против 2, EEPROM 4 КБ против 1, четыре UART против одного, 54 и 16 пинов против 14 и 6. Uno хватает для учёбы и пары датчиков, Mega нужна, когда пины кончились: роборука, матрица, 3D-принтер, логгер с двумя радиомодулями. **Какое питание нужно Mega 2560?** Отладка от USB. Автономка через VIN или круглый разъём: 7–12 В (паспорт допускает 6–20, но стабилизатор линейный и на большой разнице греется). Один пин это 20 мА рабочего тока и 40 мА предел, суммарно через чип около 200 мА. Сервы, ленты и моторы питаются от отдельного БП с общей землёй. **Где на Mega I2C и SPI?** I2C на пинах 20 (SDA) и 21 (SCL), а не на A4 и A5, как у Uno: самая частая причина молчащей шины после переезда. SPI на 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). У плат R3 рядом с AREF есть ещё двухпроводной разъём SDA и SCL для совместимости шилдов. **Сколько кода влезает в Mega 2560?** Флеш 256 КБ, из них 8 КБ уходит загрузчику, скетчам доступно около 248 КБ, в восемь раз больше, чем у Uno. Практический потолок чаще в SRAM: 8 КБ под переменные, строки и буферы. Настройки между выключениями переживает EEPROM на 4 КБ. ## Arduino Pro Mini: распиновка, питание и прошивка через FTDI (https://arduin-arsenal.ru/p/arduino-pro-mini-raspinovka/) Распиновка Arduino Pro Mini: 14 цифровых и 8 аналоговых пинов, RAW и VCC, прошивка через FTDI-адаптер, версии 3.3 В/8 МГц и 5 В/16 МГц, сон до микроампер. **Чем Arduino Pro Mini отличается от Nano?** Главное, USB-разъёма нет: прошивка идёт через внешний USB-UART адаптер на шестиконтактный разъём. Чип тот же ATmega328P, пины те же (плюс A6 и A7). Pro Mini мельче (33×18 мм против 45×18 мм), дешевле и выпускается в версиях 3.3 В/8 МГц и 5 В/16 МГц, а Nano бывает только 5 В. **Как прошить Pro Mini, если нет USB?** Любым USB-UART адаптером (FTDI FT232RL, CP2102, CH340): TXO в RX, RXI в TX, VCC и два GND. В IDE плата «Arduino Pro or Pro Mini» и процессор под вашу версию. Пин DTR через конденсатор 100 нФ дёргает reset автоматически, без DTR жмите reset в момент старта заливки. **Какую версию взять, 3.3 В или 5 В?** Батарейные и врезаемые в стену проекты, датчики 3.3 В, глубокий сон: берите 3.3 В/8 МГц. Скорость важнее, модули 5 В и перенос скетчей с Uno без правок: 5 В/16 МГц. Смешанный набор модулей проще разрулить на 5 В с делителями, чем бороться с 8 МГц. **Сколько потребляет Pro Mini во сне?** Зависит от состояния платы: заводская с регулятором и светодиодом это около 35–60 мкА в power-down, без платного светодиода около 5 мкА, с выпаянными светодиодом и стабилизатором порядка 0,4 мкА. В активном режиме около 3–4 мА у 3.3 В/8 МГц версии и около 15 мА у 5 В/16 МГц. **Можно ли подать 12 В на Pro Mini?** На RAW да: 3.3-вольтовая версия принимает 3.35–12 В, 5-вольтовая 5–12 В. Но стабилизатор линейный и на большой разнице напряжений греется, поэтому для круглосуточной автономки лучше DC-DC преобразователь на VCC. 12 В на VCC это смерть чипа: туда подают только уже стабилизированное питание. ## Цветовая маркировка резисторов: как прочитать номинал по полоскам (https://arduin-arsenal.ru/p/cvetovaya-markirovka-rezistorov/) Цветовая маркировка резисторов: живой декодер полосок, таблица цветов для 4 и 5 колец и тренажёр, который научит читать номинал без шпаргалки. **Что означает золотая полоса на резисторе?** Зависит от позиции. Крайняя справа это допуск ±5 процентов, серебряная это ±10 процентов. В позиции множителя золотое кольцо даёт ×0,1: пара цифр 47 с золотым множителем это 4,7 Ом. В цифрах, то есть на первом и втором кольце, золотой не участвует. **Как определить, с какой стороны читать полоски?** Ищите допусковое кольцо: золотое, серебряное или явно отстоящее от остальных, оно справа. Дополнительно: первая полоса не бывает чёрной, золотой и серебряной. Если кольца по центру, берите тот конец, где полоски плотнее сгруппированы. **Зачем бывают пять полосок?** Точность. У пятиколеечных резисторов три цифры значения, множитель и допуск 1 процент и точнее (коричневый, красный, зелёный, синий, фиолетовый). Их берут в измерительные цепи и делители АЦП. Обычные резисторы с допуском 5 процентов живут с четырьмя кольцами. **Цвета полосок похожи — как определить номинал точно?** Мультиметром в режиме измерения сопротивления. Если его нет, делитель напряжения с известным резистором 10 кОм и analogRead: скетч из статьи посчитает второй резистор сам. Точность такого измерителя измеряется процентами, но перепутать 1,2 и 12 кОм уже не получится. **Как читать SMD-резисторы, там же нет полосок?** По цифрам на корпусе: 472 это 47 × 100 = 4,7 кОм, третья цифра множитель, 103 это 10 кОм, 220 это просто 22 Ом. Буква R заменяет запятую: 4R7 это 4,7 Ом. Это другая система, общая с цветовой только таблица множителей. ## Распиновка ATmega328 (ATmega328P): пины DIP-28 и прошивка через ISP (https://arduin-arsenal.ru/p/atmega328-raspinovka/) Распиновка ATmega328P: все 28 пинов DIP-28, таблица соответствия с Arduino Uno, кварц 16 МГц, AREF, RESET и прошивка голого чипа через ArduinoISP. **Чем ATmega328P отличается от ATmega328?** Только спящими режимами: P — версия picoPower, в power-down она держит около 0.1 мкА против заметно большего у классики. Тактирование, память и распиновка совпадают. Сигнатуры различаются, поэтому программатор иногда требует подтверждения, но прошиваются оба одинаково. **Как прошить ATmega328P, если свободной Uno нет?** Возьмите USBasp — недорогой программатор с разъёмом на MOSI, MISO, SCK, RESET и питание. В IDE он выбирается в списке программаторов. Запасной путь — плата Pro Mini: она стоит на том же чипе и шьётся через переходник USB-TTL. **Сколько памяти у ATmega328P?** 32 КБ Flash под программу (на Uno около 0.5 КБ из них съедает загрузчик optiboot), 2 КБ SRAM под переменные и 1 КБ EEPROM, который переживает выключение. Строки, которые не лезут в SRAM, уводят во Flash через F(). **Какой корпус брать для макетки?** DIP-28: втыкается в макетную плату без пайки и вынимается для прошивки в панельке. TQFP-32 — если делаете свою печатную плату или паяете переходник; зато в нём дополнительно доступны аналоговые входы ADC6 и ADC7 — те самые A6 и A7 с Nano. **Можно ли питать чип от трёх вольт?** По спецификации да — диапазон от 1.8 В. Но кварц 16 МГц гарантированно работает только при 4.5–5.5 В: на трёх вольтах ставьте кварц 8 МГц или оставайтесь на внутреннем генераторе, иначе возможны срывы тактирования. ## Распиновка Arduino Nano Every: пины и отличия от классического Nano (https://arduin-arsenal.ru/p/arduino-nano-every-raspinovka/) Распиновка Arduino Nano Every: таблица соответствия с классическим Nano, ATmega4809 — 48 КБ Flash, 6 КБ SRAM, 20 МГц и грабли со старыми скетчами. **Чем Nano Every отличается от классического Nano?** Чипом и памятью: ATmega4809 — 48 КБ Flash, 6 КБ SRAM, 20 МГц против 32 КБ, 2 КБ и 16 МГц у ATmega328P. USB-часть на mEDBG, прошивка без old bootloader. Форм-фактор тот же, micro-USB вместо mini-USB. Неожиданность одна: ШИМ-пинов пять, а не шесть — D11 стал обычным цифровым. **Что выбрать: классический Nano, клон или Every?** Учиться и собирать простые схемы — классика или дешёвый клон: материалов по 328P больше, весь найденный код заведётся. Если скетч упирается в память, строки, JSON и большие меню, берите Every. Если нужна сеть, берите ESP32: там WiFi на борту основного чипа, а Every обычный микроконтроллер без радиомодуля. **Подойдут ли шилды и макетки от классического Nano?** Да: форм-фактор и колодка совпадают, шилды для Nano и модули с макеткой садятся без изменений. Логика 5 В — та же, сигнальные уровни совместимы. **Почему скетч с DDRB и PORTB не работает на Every?** ATmega4809 устроен иначе: порты A–F с регистрами нового вида — PORTx.DIR вместо DDRx, PORTx.OUT и PORTx.IN вместо PORTx и PINx. Прямые обращения к старым регистрам не компилируются. Замените их на pinMode и digitalWrite либо перепишите под новый синтаксис, а номер порта под конкретный пин возьмите из схемы платы. **Сколько EEPROM у Nano Every?** 256 байт, вчетверо меньше, чем 1 КБ у классики. Если логика хранит настройки в EEPROM по адресам до 1023, на Every она выйдет за границу: либо урежьте раскладку, либо держите данные в SRAM с записью во Flash. ## Распиновка ESP32-C3: пины Super Mini, strapping и отличия от ESP32 (https://arduin-arsenal.ru/p/esp32-c3-raspinovka/) Распиновка ESP32-C3 и Super Mini: 22 GPIO, таблица выводов, strapping-пины GPIO2, 8 и 9, АЦП при WiFi, светодиод на GPIO8 и сравнение с ESP32. **Сколько пинов доступно на ESP32-C3 Super Mini?** На колодке 16 выводов: 13 GPIO (GPIO0–10, GPIO20 и GPIO21) плюс 5V, 3V3 и GND. Полный набор чипа — 22 программируемых GPIO: остальные заняты флеш-памятью (GPIO11–17) и USB (GPIO18/19). **Почему ADC2 не работает при включённом WiFi?** АЦП и радиомодуль делят периферию чипа: при активном WiFi второй АЦП недоступен, и чтение GPIO5/GPIO6 возвращает мусор. ADC1 на GPIO0–4 живёт при WiFi нормально — аналоговые датчики вешайте туда. **Какой пин у бортового светодиода и почему мигалка горит наоборот?** GPIO8, и включается он инверсно: LOW зажигает, HIGH гасит. Тот же пин по умолчанию служит SDA для I2C, поэтому при обмене по шине светодиод подмигивает; шина переносится вызовом Wire.begin(4, 5). **Нужен ли драйвер CH340 для ESP32-C3?** Нет: COM-порт поднимает сам чип через встроенный USB Serial/JTAG, конвертера на плате нет. Если порт не виден, проверьте кабель (зарядный не подойдёт) и опцию USB CDC On Boot в Tools. **Можно ли задействовать GPIO9, если на нём кнопка BOOT?** После загрузки — да, это обычный вход с подтяжкой: скетч видит нажатие как ноль. Но уровень GPIO9 при сбросе выбирает режим загрузки, поэтому кнопка, прижатая в момент включения, отправит плату в прошивку вместо запуска скетча. ## Распиновка Arduino Uno WiFi: Rev2 на ATmega4809 и старая R3 с ESP8266 (https://arduin-arsenal.ru/p/arduino-uno-wifi-raspinovka/) Распиновка Arduino Uno WiFi: Rev2 на ATmega4809 с NINA-W102 и старая R3 ATmega328P+ESP8266. Таблица пинов, WiFiNINA и как не спутать платы при покупке. **Чем Uno WiFi Rev2 отличается от классической Uno?** Чипом и радиочастью: ATmega4809 с 48 КБ флеш и 6 КБ SRAM против 32 КБ и 2 КБ у ATmega328P, плюс WiFi-модуль NINA-W102 на SPI и IMU LSM6DS3. Форм-фактор, логика 5 В и шилды как у классики. Из потерь: EEPROM 256 байт вместо 1 КБ и пять ШИМ-пинов вместо шести. **Какая библиотека нужна для WiFi на Rev2?** WiFiNINA. WiFi101 работает с другим модулем WINC1500, а клоны со старым ESP8266 требуют AT-команды через WiFiEsp. Смотрите на радиомодуль, а не на название платы. **Подойдут ли шилды и макетки от обычной Uno?** Да: колодки и питание совпадают, форм-фактор тот же, логика 5 В. Учтите, что обмен с NINA идёт по SPI, поэтому шилды с активным обменом по шине проверяйте отдельно. **Что за плата UNO R3 WiFi с ESP8266?** Клон старой Arduino Uno WiFi: ATmega328P плюс ESP8266 как WiFi-мост по UART, переключатель выбирает, куда смотрит USB. Это не Rev2: другой процессор, другая библиотека и другой порядок прошивки. **Сколько памяти у Uno WiFi Rev2?** 48 КБ флеш под программу, 6 КБ (6144 байта) SRAM и 256 байт EEPROM у ATmega4809, плюс своя флеш внутри модуля NINA-W102 под его прошивку. По SRAM это втрое больше классики, и меню, буферы и JSON влезают уже спокойно. ## millis() против delay(): почему скетч замирает и как это лечить (https://arduin-arsenal.ru/p/millis-protiv-delay/) Почему скетч на delay() не видит кнопку: разница delay() и millis(), канонический BlinkWithoutDelay, таблица сравнения и живой стенд с потерянными нажатиями **Что такое блокирующий код простыми словами?** Код, в котором процессор занят ожиданием и больше ничего не делает. delay(3000) — это три секунды, когда плата не читает кнопки, датчики и Serial: loop() стоит на строке с delay и ждёт. Неблокирующий код устроен наоборот: он ничего не ждёт, а проверяет «не прошло ли время» и сразу идёт дальше по loop(). **Когда delay() всё-таки допустим?** В setup() — дать датчику прогреться после подачи питания: DHT11 нужен примерно 1-2 с до первого честного замера. В одноразовых тестовых скетчах, где нет ни кнопок, ни датчиков. И при ожидании долгих процессов, где реагировать не на что: конвертация DS18B20 занимает 750 мс, и если чтение одно на весь скетч, delay честно отработает. Как только в loop() попадает кнопка — delay() вычёркивается. **Правда ли, что millis() переполняется через 49,7 дней?** Да: счётчик — unsigned long с потолком 4 294 967 295 мс, это 49,7 суток, после них millis() стартует с нуля. Шаблон с вычитанием now - prev переживает перескок через ноль, а прямое сравнение millis() > prev + interval в момент переполнения провалится. micros() живёт ещё меньше — переполняется каждые 71,6 минуты, это стоит помнить при замерах в микросекундах. **Чем delayMicroseconds() лучше delay()?** По блокировке — ничем: та же заморозка всей программы, только в микросекундах. Его ниша — короткие протокольные паузы: импульс Trig 10 мкс у дальномера HC-SR04, защёлка сдвигового регистра, стробинг матрицы. Точность держится примерно до 16383 мкс; всё, что дольше, — территория millis(). **millis() и прерывания — когда что выбирать?** millis() — опрос: loop() крутится тысячи раз в секунду и сам замечает события, которые живут хотя бы миллисекунду. Прерывание — реакция на фронт сигнала: процессор бросает основной код и сразу бежит в обработчик, поэтому короткий импульс не пролетит мимо даже при занятом loop(). Внутри обработчика delay() запрещён, а millis() не тикает — тайминги считают через millis(), а сверхкороткие импульсы ловят через attachInterrupt(). ## analogWrite() и ШИМ на Arduino: скважность, частота и плавная яркость (https://arduin-arsenal.ru/p/shim-analogwrite/) Что делает analogWrite(): скважность и среднее напряжение ШИМ, частота 490 и 980 Гц по пинам, конфликты tone() и Servo.h и плавный фейдер на millis() **Что такое скважность и чем она отличается от коэффициента заполнения?** Коэффициент заполнения (duty cycle) — доля периода, когда сигнал высокий: analogWrite(9, 128) даёт примерно 50 %. Скважность в строгом радиотехническом смысле — обратная величина: при 25 % заполнения скважность равна 4. В статьях про Arduino оба слова чаще означают одно и то же — процент высокого уровня за период. **Почему на пинах 5 и 6 частота 980 Гц, а не 490?** Пины 5 и 6 сидят на Timer0 — том же таймере, что считает millis(). Он настроен в режим fast PWM с делителем 64: 16 000 000 Гц / 64 / 256 ≈ 976,5 Гц, в справке это округляют до 980. Timer1 и Timer2 работают в phase-correct PWM: 16 МГц / 64 / 510 ≈ 490 Гц. Перенастраивать Timer0 нельзя — сломаются millis(), delay() и все таймауты в скетче. **Чем analogWrite() отличается от analogRead()?** analogRead() — это вход: 10-битный АЦП измеряет напряжение на пине и переводит его в число 0-1023. analogWrite() — выход: 8-битное число 0-255 превращается в прямоугольник со скважностью. Настоящего ЦАП на Uno нет, поэтому «аналоговый выход» — импульсы; честное напряжение выдают только платы с DAC вроде Due. **Можно ли запитать мотор напрямую ШИМом с пина?** Нет: пин Uno отдаёт максимум 40 мА, а даже маленький коллекторный мотор на старте тянет сотни миллиампер — первым включением пин выйдет из строя. ШИМ подаётся на управляющий вход драйвера (L298N, DRV8833) или на затвор MOSFET, а силовой ток идёт мимо платы. Скважность при этом задаёт обороты. **Почему Servo.h ломает ШИМ на пинах 9 и 10?** Библиотека Servo занимает Timer1 целиком под генерацию импульсов 50 Гц, а пины 9 и 10 привязаны именно к Timer1 — их аппаратный ШИМ отключается, как только библиотека берёт таймер под серво. Пины 3, 5, 6, 11 продолжают работать. Похожая история у tone(): она занимает Timer2 и глушит ШИМ на 3 и 11. ## Сканер I2C для Arduino: найти адрес любого устройства за минуту (https://arduin-arsenal.ru/p/skaner-i2c/) Скетч-сканер I2C находит адрес LCD 0x27 или 0x3F, OLED 0x3C и BMP280. Разбор endTransmission, подтяжек 4,7 кОм и семь проверок, когда шина молчит. **Что делает сканер I2C простыми словами?** Перебирает по очереди свободные 7-битные адреса с 8 по 119 и на каждый отправляет пустую посылку: beginTransmission и сразу endTransmission. Устройство, живущее на опрошенном адресе, подтверждает приём — endTransmission возвращает ноль, и сканер печатает адрес. Это единственный честный способ узнать адрес: на платах адаптеров маркировки обычно нет. **Почему для LCD сканер находит 0x27 или 0x3F — и так, и так?** Зависит от чипа на плате-адаптере: PCF8574 с замкнутыми адресными ножками отвечает на 0x27, а PCF8574A при той же разводке — на 0x3F. Чипы функционально одинаковы, производители ставят тот, что оказался на складе. Поэтому в примерах встречаются оба адреса, и сканер снимает вопрос быстрее, чем три прошивки с угадыванием. **Можно ли подключить два одинаковых устройства к одной Arduino?** Только если у них разводятся адресные ножки: у BMP280 это SDO, у PCF8574 — A0, A1, A2, у SSD1306 выбор между 0x3C и 0x3D. Два модуля с одним адресом на одной шине глушат друг друга: ответы сливаются, и сканер покажет один адрес или мусор. Если адрес переключать нечем, как у DS3231 с его зашитым 0x68, ставят мультиплексор шины TCA9548A — он переключает между восемью ветками. **Чем 7-битный адрес отличается от 8-битного?** Часть даташитов указывает байт вместе с битом направления R/W: для записи это 7-битный адрес, сдвинутый влево на один бит — 0x27 превращается в 0x4E. Сканеры и библиотеки работают с 7-битным форматом, поэтому паспортное значение сначала сдвигают вправо: 0x4E даёт 0x27. Признак путаницы — адрес из даташита чётный и сканер его не видит. **Что значит строка Unknown error at address 0x20?** Так старый сканер с Arduino Playground отвечает на код возврата 4: мастер отправил адрес, но посылку никто не принял до конца. Если такая строка сыпется на каждом адресе подряд — проблема не в модуле, а в монтаже: перепутанные SDA и SCL, нет общего GND или подтяжек. Один-два таких адреса между тишиной — вариант нормы: часть чипов отвечает нестандартно. Чинить стоит шину, а не код. ## Семисегментный индикатор Arduino: подключение и распиновка (https://arduin-arsenal.ru/p/seg7-podklyuchenie/) Как подключить семисегментный индикатор к Arduino: распиновка a-g, резисторы 220-330 Ом на каждый сегмент, скетч с bitRead без библиотек и маски цифр 0-9. **Нужны ли резисторы на каждый сегмент или хватит одного?** На каждый. Расчёт простой: красный сегмент съедает 2-2,2 В при расчётных 20 мА, значит от 5 В резистору остаётся погасить около 2,8 В — минимум 140 Ом, на практике ставят 220-330 Ом. Один резистор на общем выводе вроде работает, но ток всех зажжённых сегментов течёт через него: у «1» сегменты вдвое ярче, чем у «8», а на многоразряднике добавляется ещё и мультиплексная скважность. **Как отличить общий анод от общего катода мультиметром?** Режим диодной пробы, один щуп на общий вывод (пара общих ножек звонится накоротко), второй — по сегментам. Засветился сегмент — смотрите полярность: красный щуп был на общем, значит общий анод; на сегменте — общий катод. Прибор покажет падение порядка 2 В. В коде разница сводится к инверсии: катод зажигается HIGH, анод — LOW, схема не меняется. **Сколько пинов занимает четырёхразрядный индикатор — и что дают TM1637 и MAX7219?** Напрямую — двенадцать: восемь сегментных линий (a-g и точка) плюс четыре общих вывода разрядов, и разряды придётся сканировать по очереди самим. TM1637 сокращает обвязку до двух сигнальных пинов, CLK и DIO: чип сам сканирует разряды и держит яркость 0-7. MAX7219 общается по SPI на трёх пинах и тянет до восьми разрядов, яркость лежит в регистре и меняется одним байтом. **Можно ли вывести буквы на семисегментном индикаторе?** Немного можно. Диагоналей у индикатора нет, поэтому часть букв живёт в нижнем регистре: A, b, C, d, E, F — этого хватает для hex-значений; читаются ещё H, L, P, U и знак минус на средней перекладине. Слово целиком не выйдет: сегментов мало. Когда нужен текст, дорога ведёт к LCD и OLED — там символ рисуется матрицей точек, а не семью палочками. **Почему сегменты светятся неравномерно без резисторов или с общим резистором?** Без резистора ток ограничен только возможностями пина (40 мА у Uno): сегмент светится на пределе, греется и со временем тускнеет — все по-разному, разброс между кристаллами никто не отменял. С одним резистором на общем выводе яркость зависит от числа горящих сегментов: ток делится, и «8» тусклее «1». Резистор на каждом сегменте задаёт персональный ток и выравнивает картину. ## Драйвер CH340 для Arduino: скачать и поставить за пять минут (https://arduin-arsenal.ru/p/driver-ch340/) Как поставить драйвер CH340 для Arduino на Windows, Linux и macOS: где скачать без риска, как увидеть USB-SERIAL CH340 (COM3) и почему порт молчит. **Чем CH340 отличается от CH340G?** Это одно семейство мостов от WCH, разница — в корпусе и обвязке. CH340G — классика в 20-выводном корпусе, ему нужен внешний кварц на 12 МГц: именно он стоит на большинстве клонов Nano и Uno. Более свежие CH340C и CH340E несут генератор внутри и в кварце не нуждаются — их ставят в новых ревизиях плат. Функция и драйвер у всей родни одинаковые: тот же CH341SER от производителя. **Почему на Windows 10 драйвер встал сам, а на Windows 7 нет?** Microsoft хранит в каталоге Windows Update подписанную версию драйвера WCH, и Windows 10/11 при подключении незнакомого устройства сами находят её в сети. У Windows 7 штатные обновления закончились в 2020 году, и до каталога она чаще всего не добирается — пакет ставят вручную: CH341SER.EXE с сайта производителя, кнопка INSTALL, переткнуть кабель. Никакой мистики в разнице нет: вопрос лишь в том, кто за вас сходил в каталог обновлений. **Как понять, что драйвер установлен?** Откройте Диспетчер устройств и найдите группу Порты (COM и LPT): там должна жить строка USB-SERIAL CH340 с номером — например, COM3 — и без жёлтого значка. Второй признак: в Arduino IDE пункт Инструменты → Порт стал активным и показывает тот же номер. Жёлтый восклицательный знак означает, что пакет не встал или встал криво — снимите его и поставьте заново. **Безопасно ли качать драйвер с wch.cn?** Да: wch.cn — официальный сайт производителя чипа, нанкинской компании WCH, и CH341SER.EXE оттуда подписан их сертификатом. Сайт по-китайски, но раздел загрузок читается без перевода — для Windows нужен файл CH341SER.EXE или ZIP с ним внутри. Второй легальный путь — вообще ничего не скачивать: Windows 10 и 11 возьмут драйвер из Windows Update. Опасны не китайские официальные файлы, а драйвер-паки с софт-порталов, куда подмешивают рекламные установщики. **Почему порт пропадает при переподключении?** Три типовых виновника. Кабель: переломанная жила у штекера рвёт связь от малейшего шевеления — порт исчезает и всплывает заново. Хаб: дешёвые разветвители и передние панели корпуса недокармливают плату по питанию, и мост отключается. Питание: схема, которая тянет большой ток, при подключении просаживает линию USB — попробуйте гнездо на задней панели материнской платы. И не удивляйтесь смене номера COM: система нумерует порты по порядку обнаружения, у каждой переподключённой платы он может быть своим. ## PlatformIO или Arduino IDE: что выбрать в 2026 году (https://arduin-arsenal.ru/p/platformio-vs-arduino-ide/) PlatformIO или Arduino IDE: что выбрать новичку и когда пора переезжать. Скорость сборки, библиотеки, Serial-монитор и готовый platformio.ini для Uno и ESP32. **Можно ли держать Arduino IDE и PlatformIO на одном компьютере?** Да, и это стандартный сценарий: обе среды живут рядом без конфликтов. Скетчбук у них общий, библиотеки у каждой свои и не спорят за версии, а COM-порт занимает только открытый монитор порта — закрыли панель, порт снова свободен. Многие годами пишут мелочи в IDE 2, а крупные проекты держат в PlatformIO и переключаются по задаче. **Сложно ли перенести готовый скетч из Arduino IDE в PlatformIO?** Сам перенос скучный: содержимое скетча копируется в src/main.cpp, сверху добавляется #include , библиотеки переезжают строками lib_deps с версиями. Две реальные ловушки: заголовок Arduino.h, без которого компилятор споткнётся на первом же Serial, и прототипы функций — обычный C++ не дописывает их за вас, как это делала IDE. Подробный маршрут переезда — в уроке по ссылке выше. **Почему первая сборка в PlatformIO такая долгая?** При первом запуске PlatformIO качает под выбранную плату тулчейн и фреймворк — для AVR это несколько сотен мегабайт, для ESP32 больше. Происходит это один раз: дальше всё лежит в кэше, и каждая следующая сборка стартует мгновенно, пересобирая только изменённые файлы. На лимитном мобильном интернете загрузку лучше делать в домашней сети. **Нужен ли PlatformIO, если я делаю один проект на одной Uno?** Нет. На маленьком скетче из пары файлов Arduino IDE 2 собирает быстрее — конвейеру PlatformIO просто нечего ускорять, а ini-файл и структура папок будут лишней обвязкой. PlatformIO раскрывается, когда в проекте несколько плат, десятки файлов и закреплённые версии библиотек; до этого момента он не даст ничего, кроме интерфейса побогаче. **Как включить русский язык в PlatformIO?** Интерфейс PlatformIO — это интерфейс VS Code: откройте палитру команд, наберите Configure Display Language и поставьте языковой пакет Russian — меню и настройки переведутся сразу. На саму сборку перевод не влияет. Для кириллицы в мониторе порта следите, чтобы скетч и терминал работали в одной кодировке UTF-8, а скорость совпадала со значением monitor_speed. ## Скетч не компилируется: словарь сообщений компилятора Arduino IDE (https://arduin-arsenal.ru/p/sketch-ne-kompiliruetsya/) Что делать, если скетч не компилируется: расшифровка сообщений Arduino IDE — expected ;, not declared, stray 342, No such file — и чек-лист на 8 проверок. **Что значит exit status 1 в Arduino IDE?** Это итоговый код завершения сборки: процесс дошёл до конца и доложил о провале, не называя причину. Причина живёт выше — в первой красной строке панели сообщений: листайте вверх, а не всматривайтесь в подпись. Сама по себе строка exit status 1 не говорит ни о коде, ни о плате — это финальная черта протокола, и лечится она чтением того, что напечатано над ней. **Почему IDE красит строку, где всё написано правильно?** Компилятор замечает проблему, когда началась следующая инструкция: пропущенная точка с запятой краснит строку ниже настоящей, потерянная скобка — вообще конец файла. Сообщение указывает не на виновника, а на место, где разбор споткнулся. Смотрите на строку выше и на баланс скобок в файле целиком — сдвиг на одну строку здесь норма, а не сбой. **Как найти потерянную скобку?** Быстрее всего — автоформатирование: Инструменты → Автоформатирование или Ctrl+T. На несбалансированных скобках оно либо выстроит код так, что перелом станет виден, либо споткнётся — и это тоже подсказка. Второй путь: поставить курсор рядом со скобкой — среда подсвечивает парную; идя так от начала файла, легко найти сироту. Ещё вариант — временно закомментировать половину кода и локализовать блок, где баланс ломается. **Имя написано верно, а компилятор пишет was not declared in this scope. Почему?** Чаще всего это область видимости: переменная объявлена внутри setup() и в loop() её не существует — имя живёт только внутри собственных фигурных скобок. Перенесите объявление в начало файла, до обеих функций, и сообщение уйдёт. Вторая причина: кусок кода случайно вынесен за пределы функций — он должен жить внутри setup() или loop(). Третья: забытая строка include при использовании чужой библиотеки. **Скетч с форума не собирается, хотя автору работал. Что не так?** Обычно версия. Библиотека у вас другой редакции — методы переименованы, и старый вызов даёт has no member named. Библиотеки вовсе нет — отсюда No such file. Плюс буфер обмена: тире и фигурные кавычки из красивого текста форума компилятор не прощает. И проверьте плату: у автора Uno, у вас Nano — память и настройки другие, серое «не выбрана» в меню Плата ломает сборку до первой строки кода. ## ESP8266 распиновка: NodeMCU V3 и Wemos D1 mini (https://arduin-arsenal.ru/p/esp8266-raspinovka/) Распиновка ESP8266 по пинам: NodeMCU V3 и Wemos D1 mini — D0–D8, GPIO, A0, питание. Какие безопасны, чем грозят strap-пины и как подключить плату в Arduino IDE. **Плата не видна в портах — с чего начать проверку?** Три виновника по частоте. Первый — кабель: зарядный шнур передаёт только питание, нужен полноценный USB с обменом. Второй — драйвер CH340: на NodeMCU V3 и D1 mini стоит он, и после установки в диспетчере устройств объявится USB-SERIAL CH340 (COM N). Третий — меню: порт пропадает из списка при каждом переподключении, загляните в Инструменты → Порт заново. Если порт есть, а загрузка виснет на Connecting — зажмите кнопку FLASH на плате и повторите. **Чем ESP8285 и ESP8265 отличаются от ESP8266?** Это близнецы: ESP8265 и ESP8285 — те же чипы, но с флеш-памятью на 1 МБ внутри корпуса, внешняя микросхема не нужна, поэтому модуль выходит компактнее. Прошиваются они как обычный ESP8266: в IDE выбирают Generic ESP8266 Module и выставляют размер флеша 1 МБ. Вся распиновка с этой страницы относится к ним один в один. **Что значит Flash Mode DIO и QIO в меню платы?** Так чип разговаривает с флеш-памятью: QIO гоняет обмен по четырём линиям, DIO — по двум. QIO стартует чуть быстрее, но требует флеш-микросхему, умеющую quad-режим. На NodeMCU и D1 mini оставляйте DIO — значение по умолчанию: с ним прошивка заходит надёжнее всего. Если после смены на QIO скетч перестал стартовать, верните DIO — лечится одним пунктом меню. **Сколько всего GPIO у ESP8266?** У самого чипа 17 цифровых портов: GPIO0–GPIO16. На отладочных платах выведено 11 цифровых — D0–D8, RX, TX — плюс один аналоговый A0. Часть ног чипа (GPIO9 и GPIO10) обычно занята флеш-памятью, поэтому «лишних» пинов не остаётся: на больших схемах экономят через I2C-расширители или сдвиговые регистры. **Можно ли использовать ESP8266 как Arduino?** Да: после установки пакета пишутся те же setup() и loop(), работают digitalWrite, analogWrite (ШИМ — на всех пинах, кроме GPIO16), Wire, SPI и Serial. Отличий немного: логика 3.3 В, аналоговый вход один, для EEPROM нужны begin() и commit(), а SoftwareSerial не нужен — UART аппаратный. Для мигалки, кнопок и WiFi-проектов разница с Uno — только в названии платы в меню. ## ATtiny85 распиновка: пины, Digispark и подключение к Arduino IDE (https://arduin-arsenal.ru/p/attiny85-raspinovka/) Распиновка ATtiny85: DIP-8 по ножкам и плата Digispark (P0–P5), АЦП, ШИМ, I2C и SPI через USI. Ловушки пина RESET и USB, прошивка из Arduino IDE. **Сколько GPIO у ATtiny85 и почему пишут то 6, то 5?** Портов шесть: PB0–PB5. Но PB5 по заводским фьюзам — вход RESET, и занимать его под обычный ввод-вывод можно только ценой потери ISP-прошивки. Поэтому в реальных схемах ATtiny85 — это пять доступных пинов: P0–P4 на Digispark. Шесть — маркетинговое число, пять — инженерное. **Компьютер не видит Digispark при прошивке — что не так?** Так и задумано: постоянного USB-порта у платы нет. Загрузчик micronucleus объявляется в системе только на пять секунд после втыкания платы — и вставлять её нужно ПОСЛЕ нажатия «Загрузить», когда IDE напишет «Plug in device now». Смотрят диспетчер устройств в момент подключения: появится USB-устройство Digispark (иногда как libusb/tiny85). Если ничего не появляется — меняйте USB-кабель и порт: зарядные шнуры без линий данных здесь виноваты чаще всего. **Чем ATtiny85 отличается от ATtiny13 и ATtiny44?** Памятью и ногами. ATtiny13 — младший брат: 1 КБ флеша и 64 байта SRAM, туда влезает только мигалка и пара кнопок. ATtiny44 — тот же класс, что 85, но корпус с 14 ногами: больше портов ценой габаритов. ATtiny85 — золотая середина: 8 КБ флеша и 512 байт SRAM позволяют втиснуть VUSB, датчик и логику управления; на нём и построены Digispark и большинство «умных» безделушек. **Можно ли питать ATtiny85 от батарейки-кроны или литиевого аккумулятора?** Да, диапазон 2.7–5.5 В специально широкий. Литиевый аккумулятор 3.7–4.2 В — идеальный напарник: чип при 3.3 В работает на внутренней частоте 8 МГц без ограничений. Крона (9 В) напрямую запрещена — только через стабилизатор 5 В (L7805 или миниатюрный MCP1700): максимум чипа 5.5 В, превышение сжигает кремний. Для проектов «спать месяц, мигнуть раз» добавьте режим power-down: в нём ATtiny85 потребляет микроамперы. **Почему скетч не влезает во флеш — чип же «на 8 КБ»?** Из 8 КБ флеша на Digispark пара килобайт отдана USB-загрузчику micronucleus, остаётся около 6 КБ под скетч. Библиотеки тяжелеют быстро: SoftwareSerial откусывает ~1.5 КБ, Wire — около килобайта, DigiKeyboard — ещё больше. Средства спасения: убрать Serial-отладку из релиза, не тянуть String-конкатенации (плюс и мусор в 512 байтах SRAM), использовать F()-макрос для строковых литералов, чтобы они жили во флеше, а не в RAM. ## Прошивка NodeMCU: как залить скетч в ESP8266 через Arduino IDE (https://arduin-arsenal.ru/p/nodemcu-proshivka/) Как прошить ESP8266 NodeMCU через Arduino IDE: установка пакета плат, драйвер CP2102 и CH340, настройки порта, первый скетч WiFi-сканер и лечение затыков. **Чем прошивка ESP8266 отличается от загрузки скетча на Arduino?** По ощущениям — ничем: та же кнопка Загрузить. Внутри разница есть: Uno пишет скетч через встроенный загрузчик по протоколу avrdude, а ESP8266 утилита esptool сначала сбрасывает в режим прошивки, потом записывает образ во внешнюю флеш-микросхему, откуда чип читает программу при старте. Поэтому прошивке важнее качество кабеля и скорость порта, а список настроек в меню платы заметно длиннее, чем у Uno. **Можно ли прошить NodeMCU без Arduino IDE?** Да. Готовые прошивки заливаются утилитой esptool (команда write_flash с адресом и файлом .bin) или графическим NodeMCU Flasher под Windows. Бинарники прошивки NodeMCU Lua собирают на nodemcu-build.com, выбирая нужные модули галочками. Но свои скетчи всё равно удобнее писать в Arduino IDE: она и компилирует, и отправляет в плату одной кнопкой, без ручных адресов. **Что такое OTA-прошивка?** OTA (Over-The-Air) — обновление по воздуху: вместо кабеля новая прошивка уходит в плату через WiFi. Первую загрузку всё равно делают по USB, заливая скетч с библиотекой ArduinoOTA; дальше плата объявится в IDE отдельным пунктом в меню портов, и скетчи пишутся через роутер. Вариант Flash Size 4MB (FS:2MB OTA:~1019KB) как раз резервирует под такое обновление лишний сектор флеша. Для ESP32 механика та же — ей посвящён отдельный урок в разделе ESP32. **Почему прошивка грузится медленно?** Главная причина — скорость: 115200 бод — это около одиннадцати килобайт в секунду, и скетч на пару сотен килобайт с WiFi-библиотекой пишется минуту и дольше. Поднять можно до 460800 и 921600, но на дешёвых платах и кабелях запись срывается, поэтому 115200 — золотая середина. Подсобляет прямой порт USB без хаба: просадки питания дают срывы в середине записи. **Как вернуть заводскую прошивку AT?** Скачайте bin-файл AT-прошивки (для модулей ESP-01 чаще берут сборку ai-thinker v1.5.4), замкните GPIO0 на землю перед подачей питания и запишите файл командой esptool write_flash по адресу 0x0 или через ESP8266 Download Tool. После сброса модуль снова отвечает AT-командам на 115200. Учтите: любой скетч из Arduino IDE стирает AT-прошивку безвозвратно — файл для восстановления лучше сохранить заранее. ## Проекты на Arduino для начинающих — часть 2: 10 новых сборок (https://arduin-arsenal.ru/p/proekty-arduino-dlya-nachinayushchih-2/) Что можно сделать на Arduino: 10 новых проектов для начинающих — автополив, подсветка ПК, таймер-куб, протечка, велокомпьютер. Детали, грабли, уроки. **Чем эта подборка отличается от первой части?** Первая часть — учебный фундамент: мигалка, светофор, ночная лампа, термостат, сборки там отрабатывают базовые пины и умещаются в 15–120 минут. Вторая часть — прикладные сборки под бытовые задачи: полив, подсветка, защита от протечек, транспорт и кухня. Схемы сложнее: в одной чаще сходятся два-три модуля — датчик, дисплей и силовая часть. Если вы ещё не собирали ничего на макетке, начните с первой части: там же список стартового набора. **Какой проект из части 2 сделать первым?** Терменвокс или геймпад: детали есть в любом наборе, схеме нужны только аналоговые входы и зуммер, а результат слышен сразу. Дальше берите датчик протечки — первый проект с реальной пользой в квартире. Автополив и подсветку ПК оставьте на момент, когда пройдёте реле и отдельное питание: у них силовая часть, где дешевле сжечь настроение, чем плату, но аккуратность нужна выше. **Все ли проекты можно проверить в симуляторе?** Логика — да: условия порогов, обратный отсчёт, звук и экраны отрабатываются в симуляторе сайта без железа. За кадром останутся шина I2C с реальным MPU-6050, реле с помпой и лента WS2812 с силовым питанием — их проверяйте на живой плате, начав с того же скетча, что гоняли в симуляторе. Так вы отделяете проблемы кода от проблем схемы: если в браузере всё работает, виноват монтаж или питание. **Сколько стоит собрать проекты из второй части?** Терменвокс и геймпад — почти бесплатно: детали есть в стартовом наборе за 1500–3000 руб. Почтовый ящик и протечка добавят ESP8266 — такая плата стоит 300–500 руб. Автополив выйдет примерно в 700–1200 руб. с помпой и реле. Дороже всех подсветка ПК: лента, блок питания и приёмник — от 1000 руб. в зависимости от метража и числа диодов. **Куда смотреть, если проект не заработал?** Начните с раздела курса из таблицы: там тот же сенсор или модуль разобран построчно, с типовыми ловушками. Второй шаг — упростить схему до одного модуля и проверить его отдельно: половина молчащих сборок лечится сменой перемычки или общим GND силовой части. Сторонние скетчи с форумов сверяйте с версией библиотеки: API меняется между версиями, и старый код на свежей библиотеке не собирается. ## Arduino, Raspberry Pi или ESP32: что выбрать для первых проектов (https://arduin-arsenal.ru/p/arduino-vs-raspberry-pi/) Честное сравнение трёх плат — Arduino, Raspberry Pi и ESP32: разница по железу и цене, что берут для датчиков, что для WiFi и Linux, как новичку выбрать под задачу. **Arduino или Raspberry Pi: что выбрать новичку?** Если интерес — электроника, датчики, «чтобы что-то щёлкало» — ардуина: старт дешевле, среда проще, результат виден в первый вечер. Если тянет к программированию в целом — Linux, Python, серверы — малина. По деньгам разрыв пятикратный, по ощущениям это разные хобби. Многие начинают с ардуины и докупают малину, когда проекту нужны экран и сеть. **Можно ли заменить Arduino Raspberry Pi?** Частично. Малина умеет дёргать GPIO: светодиод зажжёт, кнопку опросит. Но аналоговых входов нет — фоторезистор без внешнего АЦП не подключить; 5-вольтовые датчики требуют шифтера уровней, иначе выгорает порт; Linux не обещает точных таймингов — ШИМ для сервопривода дрожит, а микросекундные протоколы вроде адресных лент держать трудно. Для мигалки малина избыточна, для метеостанции в реальном времени — неудобна. **Можно ли заменить Raspberry Pi Arduino?** Нет. У ардуины нет операционной системы, экрана, нормальной сети и гигабайтов памяти: браузер, камера, бот в мессенджере, график температуры на страничке — не её задачи. Максимум — слать показания на компьютер через USB и Serial. Если проект просит Linux, ардуина не заменит его никаким скетчем. **Что дешевле для первых проектов?** Ардуина. Стартовый набор с Uno и горстью датчиков стоит порядка 2–3 тысяч рублей и закрывает десятки проектов; малине нужны плата, блок питания, карта памяти и корпус — в сумме от 10–15 тысяч. Вход в тему бывает и бесплатным: онлайн-симулятор этого сайта гоняет скетчи в браузере, а для малины симулятора нет — нужен настоящий Linux. **А ESP32 — он не заменит обе?** ESP32 закрывает нишу «WiFi на микроконтроллере за копейки»: два ядра, Bluetooth, цена ниже малины в разы — для сетевых датчиков это часто лучший выбор. Но он остаётся микроконтроллером: без ОС, экрана и многозадачности уровня Linux. Схема выбора выходит такая: железо в реальном времени — ардуина или ESP32, компьютер в проекте — малина, а максимум за минимум — связка обеих плат. ## Проекты на ESP32: 8 сборок от простых к продвинутым — WiFi, BLE и deep sleep (https://arduin-arsenal.ru/p/proekty-esp32/) Что можно сделать на ESP32: 8 проектов с WiFi, BLE и deep sleep — веб-сервер, метеостанция, уведомления на телефон. Компоненты, грабли из практики, уроки. **Чем проекты на ESP32 отличаются от проектов на Arduino Uno?** У Uno нет ни WiFi, ни Bluetooth, ни глубокого сна: всё сетевое тянется модулями сверху, съедая пины. У ESP32 радио на борту, памяти в сотни раз больше, а сон до микроампер делает батарейные датчики реальными. Цена этого — логика 3,3 В вместо 5 В и strap-пины, которые при неудачной обвязке мешают загрузке. Учебные сборки на Uno и на ESP32 дополняют друг друга: сначала пины и датчики, потом сеть и батарейки. **С чего начать, если ESP32 — моя первая плата?** Со светодиода из браузера, первого проекта таблицы: деталей почти нет, а на выходе — рабочая страница на плате, что даёт мотивацию быстрее любой мигалки. Перед этим поставьте пакет плат ESP32 в Arduino IDE и прошейте первый скетч по USB. Дальше порядок в таблице выстроен так, что каждый следующий проект опирается на предыдущий: сервер, датчики, сеть, сон, радио. **Что из этого списка можно проверить в симуляторе?** Логику: подключение к WiFi, HTTP-запросы, разбор JSON, тайминги планировщика — движок исполняет их честно. Веб-сервер, глубокий сон, BLE и TLS симулятор рисует моделями с честными оговорками: на них отрабатывается структура скетча и Serial-лог, а финальную проверку делает живая плата. Так вы отделяете проблемы кода от проблем схемы и питания. **Сколько стоит собрать проекты из этой подборки?** Плата ESP32 DevKit на маркетплейсах — примерно 400-700 руб., и первые два проекта больше ничего не требуют. Батарейный датчик и нотификатор добавят банку 18650 с платой TP4056 — ещё 300-500 руб. Лента WS2812B с блоком питания и буфером — от 800 руб. в зависимости от метража. Дороже одного набора выходит только тот случай, когда всё покупается россыпью с разных складов: берите стартовый комплект с ESP32 внутри. **Почему плата перезагружается, когда включается WiFi?** Почти всегда это питание, а не код: радиомодуль на передачу кидает пики до 240 мА, и просевшая рельса будит встроенный детектор, который валит плату со строкой Brownout detector was triggered в мониторе. Лечение по порядку: нормальный USB-кабель с толстыми жилами, зарядка с честным ампером на выходе, при внешнем питании — блок с запасом и конденсатор у входа. Отдельно проверьте, что ничего силового не висит на пине 3V3. ## Arduino Mega 2560 PRO: распиновка, питание и встраивание (https://arduin-arsenal.ru/p/mega-2560-pro-raspinovka/) Распиновка Arduino Mega 2560 PRO: 38×55 мм, те же 54 пина и 4 UART, прошивка через USB-TTL переходник, питание 5 В или Vin 6-9 В и отличия от R3. **Чем Mega 2560 PRO отличается от классической Mega 2560?** Начинкой — ничем: тот же ATmega2560 на 16 МГц, 54 цифровых пина, 16 аналоговых входов, четыре UART и 256 КБ флеша. Разница в обвязке: у PRO габариты 38×55 мм против 101×53 мм, выводы в два плотных ряда, нет USB-разъёма, нет колодки питания и нет поддержки шилдов. Скетч переезжает без правок, а вот прошивка и питание идут через другие двери — переходник и силовые пины. **Как прошить Mega 2560 PRO, если на ней нет USB?** Через USB-TTL адаптер на 5 В: TX адаптера к пину 0 (RX0), RX — к пину 1 (TX0), 5 В и земля на силовые пины. Для авто-ресета соедините DTR адаптера с Reset через конденсатор 0,1 мкФ. Если DTR нет, жмите кнопку Reset в момент, когда среда переходит к заливке. В меню выбирается тот же пункт Arduino Mega or Mega 2560. **Можно ли питать плату напрямую 5 вольтами?** Да, это штатный путь для финальной сборки: стабилизированные 5 В подают на пин 5V, питание проходит мимо платных стабилизаторов. Если источник выдает 6-9 В, заводите его на Vin — дальше работает линейный стабилизатор. Одновременно кормить и 5V, и Vin нельзя, как и держать на пине 5V сразу переходник и блок питания. **Влезает ли Mega 2560 PRO в макетную плату?** В одну — нет: два ряда пинов расходятся шире, чем пролёт над центральной канавкой. Плату размещают на двух макетках по сторонам, собирают схему перемычками папа-мама или сразу паяют на перфборд — для финальных сборок это задуманный сценарий. Классической Mega не подходит даже такая схема: её гребёнки шире самой макетки. **Какой USB-TTL адаптер выбрать для прошивки?** Любой на 5 В с выводом DTR: CH340 — самый дешёвый, CP2102 — стабильнее на высоких скоростях, FT232RL — классика с джампером 3,3/5 В. Для Mega 2560 PRO выставляйте 5 В. Драйвер зависит от чипа адаптера: CH340 ставится отдельным пакетом, CP2102 и FT232RL обычно подхватываются системой сами. ## ESP32 против ESP8266: выбираем плату под проект — сценарии и грабли (https://arduin-arsenal.ru/p/esp32-ili-esp8266/) Сравнение ESP32 и ESP8266 по пинам, АЦП, DAC, памяти и току: когда хватает NodeMCU, когда нужен Bluetooth и два ядра, и чем грозят strap-пины при переезде. **Что взять для первого WiFi-проекта?** Если в проекте нет Bluetooth, больших ответов сервера и параллельных задач, берите ESP8266: NodeMCU или Wemos D1 mini закрывают датчик с отправкой показаний и WiFi-розетку за двести с хвостом рублей. Плата прошивается из той же Arduino IDE, скетчи пишутся как для Uno. ESP32 оправдан, когда уже виден потолок по памяти или нужен BLE — переплата небольшая, но и задачи под неё пока нет. **Перенесётся ли скетч с ESP8266 на ESP32 без правок?** Основная логика — да: digitalWrite, delay и WiFi-клиент переезжают почти без правок. Точки переноса: подписи D4 и компания меняются на номера GPIO, единственный A0 превращается в выбор из нескольких АЦП-каналов, EEPROM заменяется на Preferences, SoftwareSerial не нужен — UART аппаратный. Обратный переезд сложнее: 50 КБ памяти и одно ядро заставляют упрощать код. **Почему второй АЦП ESP32 молчит при включённом WiFi?** АЦП у ESP32 два контроллера: ADC1 и ADC2. ADC2 аппаратно делит время с WiFi-модулем, и пока радио работает, его каналы не читаются — analogRead возвращает нули или мусор. Решение простое: аналоговые датчики вешать на каналы ADC1 (GPIO32-39), а ADC2 оставлять проектам без радио или согласиться на измерения в паузах между передачей. **Сколько плата живёт на батарейках?** Сам чип в глубоком сне ест около 10 мкА у ESP32 и 20 мкА у ESP8266 — при пробуждении раз в минуту пальчиковые батарейки растягиваются на месяцы. Но отладочная плата во сне тянет 10-20 мА из-за регулятора и USB-моста, то есть в сотню раз больше чипа. Для батарейных сборок берут голый модуль или плату без лишней обвязки, а на 8266 ещё и ставят перемычку D0→RST, иначе из сна плата не выйдет. **Плата не стартует после сборки — что проверить первым?** Strap-пины. На ESP8266 это тройка GPIO0, GPIO2 и GPIO15: первому на старте нужен HIGH, второму — HIGH или воздух, третьему — LOW. На ESP32 добавляется GPIO12: подтяжка к питанию переключает флеш на 1.8 В, и плата уходит в цикличный ребут. Проверка простая: обесточьте сборку и запустите голую плату — ожила, значит, ищите виновника среди служебных пинов; молчит даже голая — смотрите кабель и питание. ## Стартовый набор Arduino для начинающих: состав, цены и грабли (https://arduin-arsenal.ru/p/starter-nabor-arduino/) Какой стартовый набор Arduino купить новичку: клон Uno с CH340 против оригинала, состав нормального набора, цены на осень 2025 и грабли маркетплейсов. **Клон Arduino Uno — это законно?** Да: Arduino — проект с открытыми схемами и открытым софтом, и клоны пользуются этим правом десятилетиями. Торговая марка «Arduino» защищена, поэтому на плате ты увидишь «UNO R3» без логотипа и названия бренда. По схемотехнике это та же плата: ATmega328P, тот же загрузчик, те же пины — для учёбы разницы нет, а драйвер для чипа CH340 ставится один раз. **Хватит ли дешёвого набора за 1000-1500 рублей?** Плате — да, составу — нет: внутри обычно мини-макетка, десяток-другой спутанных перемычек и россыпь модулей без резисторов и документации. Светофор и ночной светильник соберёшь, дальше начнётся докупка: нормальная макетка, пачка проводов, номиналы резисторов. После докупок дешёвый набор выходит дороже нормального — считай сразу полную стоимость входа, а не цену в корзине. **Зачем в наборах блок питания, если плата питается от USB?** Затем, что хорошо продаётся: первые месяцы БП из набора — мёртвый груз. USB-порт отдаёт 500 мА, а типовые учебные сборки едят десятки миллиампер; даже серво при старте тянет максимум пару сотен. Свой блок питания понадобится, когда дойдёт до лент WS2812, помп и мощной нагрузки через реле — тогда бери его под конкретную задачу, а не тот, что положили в коробку маркетологи. **Что купить вторым, когда набор освоен?** Мультиметр — самая полезная покупка после набора: прозвонка, напряжение, ток, проверка резисторов. Дальше по направлению проектов: ESP8266 или ESP32 добавят WiFi за 200-400 рублей, реле-модуль откроет бытовую нагрузку, лента WS2812 — свет. Экраны побольше, GSM-шилды и шаговые двигатели бери только под конкретную сборку: без задачи они лежат годами. **Как проверить набор при получении?** Первым делом кабель: если плата светится, а порт в системе не виден, поменяй его на заведомо рабочий, который умеет обмениваться с компьютером, прежде чем грешить на драйвер. Дальше залей тестовую мигалку и собери светофор из двух диодов — так разом проверятся макетка, перемычки и резисторы. Неисправную макетку или мёртвый модуль магазин меняет по гарантии, но заметить это нужно в первые дни — проверку не откладывай. ## Библиотека AccelStepper: установка, пример кода и плавный разгон (https://arduin-arsenal.ru/p/accelstepper-podklyuchenie/) Как установить AccelStepper и чем она лучше Stepper.h: скетчи для 28BYJ-48 и NEMA17 с A4988, setMaxSpeed, setAcceleration, потолок 4000 шагов в секунду. **Чем AccelStepper лучше штатной Stepper.h?** Три отличия: движение без блокировок — run() возвращает управление после каждого шага; встроенный разгон через setAcceleration() без ручных трапеций; поддержка полушага HALF4WIRE, на котором 28BYJ-48 получает 4096 позиций на оборот вместо 2048. Бонусом — несколько моторов параллельно из одного loop(). **Почему мотор гудит, но не крутится?** Классика двух затыков: провода ULN2003 подключены по порядку IN1-IN2-IN3-IN4, а фазы мотора идут крест-накрест — нужен порядок IN1, IN3, IN2, IN4. Вторая причина — нулевая скорость по умолчанию: без setMaxSpeed() библиотека не шагает вовсе, даже с заданной целью. **Какая максимальная скорость у AccelStepper?** На Uno при 16 МГц — около 4000 шагов в секунду на один мотор: столько успевает подсчёт профиля разгона. 28BYJ-48 этот потолок не достигает никогда — редуктор упирается в 10-15 об/мин (примерно 700-1000 полушагов в секунду), а вот NEMA17 с A4988 или TMC2208 берёт тысячи микрошагов в секунду. **runToPosition() блокирует loop()?** Да: это обёртка, которая крутит run() в цикле до достижения цели. Для setup() — привести механизм в исходную точку — она удобна, в рабочем loop() держите связку moveTo() + run() и проверяйте distanceToGo(): код остаётся живым, а очередь движений растёт без блокировок. **Подойдёт ли AccelStepper для NEMA17 с A4988 или TMC2208?** Да, режим DRIVER: конструктор принимает пины STEP и DIR, счёт ведётся в микрошагах — при делении 1/16 один оборот NEMA17 равен 3200 единицам. Не забудьте выставить ток драйвера подстроечником по Vref и питать мотор от отдельного источника с общим GND с Arduino. ## Watchdog в Arduino: wdt_enable, таймауты и ловля зависаний (https://arduin-arsenal.ru/p/watchdog-arduino/) wdt_enable(WDTO_8S) и wdt_reset() в неблокирующем цикле: таймауты от 15 мс до 8 секунд, ловушка старых загрузчиков с вечной перезагрузкой и сторож на ESP32. **Что делает wdt_enable(WDTO_8S)?** Включает аппаратный сторож ATmega328P с интервалом восемь секунд: если за это время программа не вызвала wdt_reset(), чип выполняет полный сброс, как по кнопке RESET, только без человека. Восемь секунд — потолок таймаута на этой плате: длиннее интервал выбрать не из чего. **Почему ардуино перезагружается сама каждые восемь секунд?** Сторож включён, а wdt_reset() не вызывается: забыли добавить строку, loop() блокирован delay() длиннее таймаута или датчик завис посреди прохода. Диагностика: уберите wdt_enable() — перезагрузки прекратились, значит, виноват сторож; проверьте, что wdt_reset() стоит первой строкой loop(), а сам цикл укладывается в интервал. **После watchdog-сброса плата перезагружается бесконечно — что делать?** Это старый загрузчик: Optiboot на Uno гасит сторож после сброса, а загрузчики клонов Nano и стоковой Mega 2560 — нет, и чип уходит в бесконечный круг «бутлоадер — сброс». Кнопка RESET обычно вырывает плату из цикла; надёжное лечение — прошить Optiboot через Tools → Burn Bootloader и программатор Arduino as ISP. **Работает ли watchdog во время delay()?** Да, счёт идёт: delay() не кормит сторожа, это плотная петля ожидания внутри ядра. delay(10000) при WDTO_8S гарантирует перезагрузку. Для коротких пауз считайте это фичей: сторож честно сообщает, что проход loop() разросся сверх нормы. **Есть ли watchdog на ESP32 и ESP8266?** Есть, но не через : у ESP32 — задачный сторож esp_task_wdt (esp_task_wdt_add() подключает задачу, esp_task_wdt_reset() кормит), у ESP8266 SDK кормит программный сторож сама между проходами loop(). Смысл тот же: не уложился в интервал — получи перезагрузку. ## TMC2208: подключение к Arduino, Vref и замена A4988 (https://arduin-arsenal.ru/p/tmc2208-podklyuchenie/) Как подключить TMC2208 к Arduino: скетч STEP/DIR, таблица Vref для шунтов 0,11 и 0,1 Ом, микрошаг и UART-режим, замена A4988 без правок кода и грабли. **Можно ли вставить TMC2208 вместо A4988 без переделок?** Физически да: ENABLE, STEP, DIR и фазы обмоток на тех же ногах, скетч работает без правок. Но перепроверьте три вещи: перемычки (таблица у 2208 начинается с 1/8, а не с 1/1), ток по Vref (множитель 0,71 вместо 1,25) и охлаждение — при токе выше ампера нужен радиатор и поток воздуха. **Какой Vref выставить под мой мотор?** 70-80% паспортного тока фазы. Умножьте нужный ток RMS на 1,41 для шунтов 0,11 Ом или на 1,28 для 0,1 Ом: мотору на 1,7 А соответствует винт на 1,69-1,92 В. Замер — мультиметром: красный щуп на винт подстроечника, чёрный на GND, моторы отключены. **Почему TMC2208 тише, чем A4988?** Чоппер StealthChop сглаживает пульсации тока в обмотке, которые у A4988 звучат свистом, а интерполяция добивает каждый импульс до 1/256 микрошага. Тишина работает на низких и средних скоростях; на верхней трети диапазона момент проседает, и звук может вернуться — это штатное поведение, а не брак. **Обязателен ли UART-режим для TMC2208?** Нет: в standalone перемычки MS1-MS2 и винт Vref закрывают базовые задачи. UART нужен, когда ток и микрошаг меняются из прошивки, хочется родное деление 1/256 или осей больше двух. Детекции заклинившего вала у 2208 нет — это территория TMC2209 с DIAG-выходом и StallGuard. **Чем TMC2208 отличается от TMC2209?** Диагностикой и потолком тока: у 2209 есть выход DIAG и StallGuard — драйвер сам сообщает о заклинившем вале без концевиков. Для тихой оси с обычным ходом базовой 2208 хватает; переплата за 2209 оправдана, когда нужен homing без концевиков или повышенный ток. ## ADS1115: подключение к Arduino, 16-битный АЦП и усиление PGA (https://arduin-arsenal.ru/p/ads1115-podklyuchenie/) Как подключить ADS1115 к Arduino по I2C: 16 бит против 10 у Uno, адреса 0x48-0x4B через ADDR, таблица gain от ±6,144 до ±0,256 В и скетчи на Adafruit_ADS1X15. **Чем ADS1115 лучше встроенного АЦП Arduino?** Разрядность и шаг сетки: 16 бит против 10, то есть 187,5 мкВ на ступень против 4,88 мВ на A0 — в 26 раз мельче уже на широком пределе, а на GAIN_SIXTEEN и все 7,8 мкВ. Плюс PGA, дифференциальные пары и до 4 чипов на двух проводах I2C. Обратная сторона — скорость: потолок 860 отсчётов в секунду и накладные расходы на I2C-обмен. **Какой I2C-адрес у ADS1115 и как его поменять?** Базовый — 0x48 при ADDR на земле. Ножка ADDR перекидывает чип на 0x49 (к питанию), 0x4A (к SDA) или 0x4B (к SCL). Адрес передаётся в begin(): ads.begin(0x49). После любой смены проверьте шину сканером — он должен показать оба чипа, если их два. **Gain 6,144 В — значит, на вход можно подавать 6 вольт?** Нет, и это самая дорогая ошибка с чипом. ±6,144 В — масштаб, на который натягивается сетка, а допустимый диапазон входа задаёт питание: не ниже земли и не выше VDD+0,3 В. При питании от 5 В шестивольтовый сигнал на вход поставит защитные диоды, и чип замолчит до перетыкания питания. Такое напряжение сначала садят на делитель. **Почему в однополярном режиме не все 16 бит?** Старший разряд знаковый, а при измерении входа против земли отрицательных значений не бывает — он простаивает, и остаётся фактически 15 бит: счёт от 0 до 32767. Полные 16 бит с диапазоном от −32768 до 32767 доступны в дифференциальном режиме, когда сравниваются два входа между собой. **ADS1115 или ADS1015 — что выбрать?** Библиотека одна и та же, различаются разрядность и скорость: ADS1115 — 16 бит и до 860 отсч/с, ADS1015 — 12 бит и до 3300 отсч/с. Для термопар, шунтов и прочих милливольтовых сигналов берите ADS1115 — там точность решает. ADS1015 уместен, когда нужно быстро опрашивать канал, а младшие четыре бита не жалко. ## BH1750: подключение к Arduino, адреса и люксметр своими руками (https://arduin-arsenal.ru/p/bh1750-podklyuchenie/) Как подключить BH1750 к Arduino по I2C: адреса 0x23 и 0x5C через ADDR, режимы с шагом от 0,5 люкса, скетчи на библиотеке BH1750 и люксметр за вечер. **Какой I2C-адрес у BH1750 и как подключить два датчика?** 0x23, когда ADDR прижата к земле — на готовых модулях она подтянута заводом; 0x5C, когда ADDR сидит на питании. Для второго датчика перекиньте его ADDR на плюс и укажите адрес в begin(). После сборки прогоните сканер шины: оба адреса должны показаться, молчание любого — повод проверять провода, а не библиотеку. **BH1750 или фоторезистор — что выбрать?** Зависит от вопроса. «Включить реле, когда стемнеет» решает фоторезистор за копейки и один аналоговый вход. Люксы нужны там, где цифры сравниваются между собой: журналы данных, досветка растений по норме, сравнение мест у окна, контроль засветки. BH1750 снимает проблему калибровки, но едет по I2C и стоит дороже. **Почему на прямом солнце показания замирают?** Шестнадцатибитный счётчик упёрся в максимум: 65535 отсчёта — это около 54600 лк при заводском MTreg, а солнце на открытом небе выжимает 80000-100000. Прибор не предупреждает, число просто стоит. Лечение — снизить регистр MTreg до 31 и поднять потолок примерно до 120000 лк. И помните про 0x11: поллюксовый потолок вдвое ниже, для улицы он не годится. **Какая точность у BH1750?** По паспорту около ±20 % — для бытового люксметра нормально, фабричные приборы того же класса живут с тем же разбросом. Сильная сторона чипа не абсолютная точность, а повторяемость: одинаковые условия дают одинаковые числа, и именно это делает возможными сравнения и логи. Спектральная чувствительность близка к человеческому глазу, поэтому на узкоспектральных светодиодных лентах возможен уход. **Нужна ли библиотека или можно обойтись голым Wire?** Можно без неё: опкод через beginTransmission, пауза на замер, requestFrom на два байта, сборка слова и деление на 1,2 — пятнадцать строк, и каждый байт виден. Библиотека BH1750 от Christopher Laws сжимает то же самое до begin() и readLightLevel(), плюс умеет менять MTreg функцией setMTreg(). Полный разбор с ловушкой перепутанных байтов — в уроке про датчик на голом Wire. ## tone() против ШИМ: конфликт таймеров Arduino Uno и способы развести их (https://arduin-arsenal.ru/p/tone-konflikt-tajmerov/) Почему tone() глушит ШИМ на пинах 3 и 11: карта таймеров Arduino Uno, соседство с Servo.h и ИК-приёмником, пять решений с ценой каждого — от noTone до Mega. **Какие пины ШИМ пропадают из-за tone() на Arduino Uno?** Пины 3 и 11 — оба сидят на Timer2, который tone() перестраивает под частоту ноты. Пока нота звучит, analogWrite на них мёртв; после ноты регистры остаются перекроенными, пока свежий analogWrite не вернёт режим ШИМ. Пины 5 и 6 (Timer0) и пара 9-10 (Timer1, если серво нет) звук не трогает. **tone() и Servo.h вместе — это конфликт?** Штатная пара уживается: tone() живёт на Timer2, Servo.h — на Timer1, и пересекаться им нечем. Конфликт начинается, если звук пересаживают на Timer1 (библиотека Tone, TimerOne) — серво дёргается на каждом кадре по 20 мс. Вторая мина — ИК-приёмник: Irremote и tone() хотят один и тот же Timer2, выбирайте что-то одно. **Почему после noTone() диммер не оживает сам?** noTone() только останавливает звук: счётчик остаётся настроенным под ноту, а не под ШИМ. Возврат яркости — свежий analogWrite() на тот же пин: он перестроит регистры Timer2 обратно. Перезагрузка платы лечит то же самое, но это дороже по времени. **Можно ли иметь звук и ШИМ на пинах 3 и 11 одновременно?** На одном таймере — нет: счётчик один, и каждый владелец перекраивает его под себя. Рабочие варианты: унести звук на любой цифровой пин (штатному tone() подходит хоть D2, хоть D8), унести ШИМ на пины 5 и 6 или развести во времени — нота в паузах, свет в остальное время. **Как обстоят дела с таймерами на Mega 2560?** Таймеров шесть (0-5), и карта другая: tone() по-прежнему берёт Timer2, но глушит ШИМ пинов 9 и 10; Servo.h первым делом занимает Timer5 (пины 44-46), оставляя Timer1, Timer3 и Timer4 свободными. Конфликты случаются реже, но таблицу занятости придётся перечитать — привычная раскладка Uno на Mega не работает. ## DHT22 на улице: датчик зимой, защита от непогоды и монтаж (https://arduin-arsenal.ru/p/dht22-ulica/) DHT22 на улице зимой: диапазон −40…+80 °C против нуля у DHT11, кожух от росы и солнца, подтяжка на длинном проводе, сравнение с DS18B20 и BME280, скетчи. **Выдержит ли DHT22 минусовую температуру ниже −30 °C?** Паспорт AM2302 — от −40 до +80 °C, и обычная зима средней полосы помещается в него целиком. Оговорки две: после ледяной ночи сенсор обновляет цифры ленивее, и главный враг не мороз, а роса и иней при переходе через ноль — от них защищает вентилируемый кожух, а не перенос датчика в дом. **Можно ли оставить DHT11 на улице, если закрыть его козырьком?** Козырёк решает только капли сверху. Диапазон DHT11 — 0…+50 °C, поэтому при первом морозе он отдаёт nan, а после оттепели с окислившимися выводами часто не оживает вовсе. Для крытого балкона, где столбик не уходит ниже нуля, — можно; для улицы — нет. **Почему нельзя просто завернуть датчик в пакет или закрыть банкой?** Без обмена с атмосферой внутри чехла живёт собственный микроклимат: влажность занижена, реакция на смену погоды растягивается на часы. Рабочий вариант — перфорированный кожух с продувом снизу; герметизируется только ввод кабеля, лучше с петлёй, по которой капли стекают мимо. **DHT22 показывает не то, что прогноз погоды. Кто врёт?** Чаще никто. Относительная влажность зависит от температуры, а метеостанции меряют в защитных клетках на высоте два метра над открытым полем. Датчик у тёплой стены под козырьком честно меряет свой угол двора: расхождение в один-два градуса и до десяти процентов влажности — норма места, а не поломка. **Что выбрать на улицу: DHT22, DS18B20 или BME280?** Только температура и длинный кабель — DS18B20: зонд в гильзе и шина до тридцати метров. Температура плюс влажность за разумные деньги — DHT22 в перфорированном кожухе, мой основной вариант. Давление и прогноз циклонов — BME280, но он дороже и требует 3,3-вольтовой логики на Uno. ## IRremote: скачать библиотеку и запустить пример на 4.x (https://arduin-arsenal.ru/p/irremote-skachat-biblioteka/) Как скачать IRremote через менеджер библиотек или ZIP с GitHub, чем 4.x отличается от 2.x: минимальный скетч IrReceiver и пять строк миграции. **Где официально скачать IRremote для Arduino?** Менеджер библиотек внутри Arduino IDE — самый короткий путь; оттуда библиотека ведёт к официальному репозиторию ArminJo/Arduino-IRremote на GitHub, где лежат и zip-архивы релизов для ручной установки. Лицензия MIT, мейнтейнер Armin Joachimsmeyer. Каталоги-агрегаторы лучше пропускать: среди них ходят замороженные копии 2.x и пересобранные архивы с чужими правками. **Почему библиотека не находится в менеджере?** Проверьте точность запроса: IRremote одним словом. Если список пуст — обычно закрыт сетевой доступ (офисные и школьные прокси) либо стоит старая IDE с устаревшим списком; тогда качайте zip релиза с GitHub и ставьте через Скетч → Подключить библиотеку → Добавить .ZIP библиотеку. И не перепутайте строки в результатах: нужна запись с авторами shirriff, z3t0, ArminJo, а не IRremoteESP8266 — тот предназначен для ESP-плат. **Скетч из интернета выдаёт IRrecv does not name a type — что не так?** Скетч написан под 2.x, а у вас установлена 4.x: старое API вынесено, и компилятор не знает IRrecv. Миграция занимает пять строк: заголовок .hpp, IrReceiver.begin() вместо enableIRIn(), IrReceiver.decode() без &results, decodedIRData.command вместо results.value. Откатывать версию ради этого не стоит: вместе со старым API вернутся старые баги, а переезд всё равно предстоит. **Работает ли IRremote на ESP32 и ESP8266?** Да, свежие 4.x собираются под ESP. Но рядом живёт самостоятельный форк IRremoteESP8266 со старым словарём — его берут, когда скетч уже написан под него. Нюанс по версиям: в ченджлоге основной библиотеки у 4.5.0 отмечено, что ESP-платформа не работала, поэтому на ESP держите версию свежее этой. **Можно ли проверить пульт без платы?** Да, в симуляторе самоучителя: виртуальный пульт шлёт те же команды, что и настоящий из набора, и скетч с IrReceiver.begin, decode и decodedIRData.command исполняется прямо в браузере. Физики несущей 38 кГц там нет, но логику кнопок, адрес-фильтр и switch удобно отрабатывать на том же самом коде, который потом уйдёт в плату. ## LiquidCrystal_I2C: библиотека для LCD 1602 — скачать, адреса, первый скетч (https://arduin-arsenal.ru/p/liquidcrystal-i2c-biblioteka/) Как скачать LiquidCrystal_I2C для LCD 1602 по I2C: адреса 0x27 и 0x3F, сканер шины, минимальный скетч с lcd.init() и print(), контраст подстроечником. **Экран горит, но текста нет — с чего начинать?** По порядку: крутануть синий подстроечник при включённом питании; если вместо букв ряд квадратов в первой строке — дисплей не инициализирован, проверить lcd.init(); если стекло пустое совсем — контраст или питание. Дальше — весь маршрут от питания до шины, он собран в уроке про молчащий LCD из текста выше. **Контраст не настраивается даже подстроечником — в чём дело?** Чаще всего панель недокормлена напряжением: переходник переваривает 3,3 В, но стеклянная панель рассчитана на 5 В, и при питании от 3,3 вольта символы не проявляются вовсе — характерно для ESP32. Подайте 5 В на VCC переходника. И не путайте две вещи: подсветка (перемычка) и контраст (подстроечник) — независимые контуры. **Какой адрес указывать в конструкторе LiquidCrystal_I2C?** 0x27, если на переходнике PCF8574, и 0x3F, если PCF8574A; замкнутые площадки A0–A2 сдвигают адрес внутри диапазона чипа. Вместо разглядывания маркировки запустите сканер — он напечатает фактический адрес за один прогон, и именно его значение вставляйте в конструктор. **Как подключить второй дисплей 1602 к той же Arduino?** Дать экранам разные адреса: у первого замкнуть площадку A0 (получится соседний адрес), второй не трогать — или взять переходники на разных чипах, 0x27 и 0x3F. В скетче два объекта LiquidCrystal_I2C, каждый со своим адресом. Схему и скетч на два экрана разобрал отдельный урок — ссылка в тексте выше. **Чем LiquidCrystal_I2C отличается от обычной LiquidCrystal?** Снаружи почти ничем: print, setCursor и курсор на месте. Внутри — обмен через расширитель PCF8574 по двум проводам вместо шести-одиннадцати линий, плюс функции init() и backlight(). Скорость обмена ниже, но для текста это неощутимо. Если в проекте уже разведено параллельное подключение, переезд на I2C освобождает пины — про это отдельный урок. ## Сервопривод SG90: подключение к Arduino, характеристики и питание (https://arduin-arsenal.ru/p/sg90-servo-podklyuchenie/) Как подключить SG90 к Arduino: провода коричневый-красный-оранжевый, ток покоя и стопора, скетч Servo.h с плавным ходом и сравнение с MG90S и MG996R. **Почему SG90 дрожит и гудит, даже когда стоит на месте?** Вал держит контур: серва пятьдесят раз в секунду слушает импульсы и подтягивает угол к цели, поэтому тихий гул в покое — норма. Хрипеть и дёргаться она начинает на просевшем питании или когда электроника мечется внутри мёртвой зоны. Порядок лечения: конденсатор и нормальный БП, затем detach() в простое — рог освобождается, гул уходит, ток падает с ~10 мА удержания почти до нуля. **Что будет, если вал SG90 упрётся в препятствие?** Стопор: мотор упирается в стенку редуктора, ток взлетает до 650-700 мА и держится ровно, пока вал не освободят. Корпус греется, пластиковые шестерни хрустят — пара минут под упором, и зуб срезан. Спасают границы угла в коде по реальным упорам, концевик или таймаут для механики, которая может заклинить. **SG90 крутится только на 180 градусов — это неисправность?** Это формат: импульсы 1000-2000 мкс размечают ход в 0-180°, и у многих партий фактический размах меньше — 150-170°. Существуют версии с размахом 270°, а «SG90 360» — модификация непрерывного вращения: у неё write() задаёт скорость и направление вместо угла, среднее положение означает стоп. **Можно ли питать SG90 от 5V-пина Arduino?** Одну серво с лёгкой нагрузкой — да, и то не от самого худшего USB-кабеля. Две серво, MG996R или любое плечо с грузом — нет: просадка ниже порога сброса валит контроллер на первом же ходе. Рабочая схема — отдельный БП 5-6 В с общим GND и конденсатор 470-1000 мкФ у разъёма серво. **Сколько SG90 можно подключить к одной Arduino Uno?** По сигналам — до дюжины: Servo.h держит 12 серво на одном Timer1, пин каждой — любой цифровой. По току всё скромнее: от 5V-пина платы живут одна-две лёгкие серво, дальше — внешний блок 5-6 В и общая земля. Считайте бюджет: каждые 100 мА движения съедают пятую часть бюджета порта. ## Пьезоизлучатель Arduino: подключение зуммера, active против passive и мелодии (https://arduin-arsenal.ru/p/piezo-zummer-podklyuchenie/) Как подключить пьезоизлучатель к Arduino: активный против пассивного, ток 20-30 мА, резистор 100 Ом, частоты нот для tone() и сравнение с динамиком 8 Ом. **Чем отличается активный зуммер от пассивного?** Внутри активного сидит генератор: подали 5 В — он сам пищит своей частотой, у большинства корпусов около 2-2,3 кГц, и управлять можно только вкл/выкл. Пассивный — излучатель без электроники: от питания молчит, а звучит на той частоте, которую задал tone(). Тест питанием различает их за десять секунд: ножки в 5V и GND — запищал сам, значит активный; щёлкнул — пассивный. Для мелодий годится только пассивный. **Можно ли подключить зуммер напрямую к пину Arduino?** Пьезо-пищалку с током 20-30 мА — да: пин Uno отдаёт до 40 мА, а резистор 100 Ом последовательно подрежет пиковый ток заряда керамики. Громкие корпуса с током 80-150 мА напрямую вешать нельзя: ножка перегреется, плата уйдёт в перезагрузки — им нужен транзисторный ключ с базой через 1 кОм. И помните про полярность: пассивному всё равно, у активного переполюсовка убивает генератор внутри. **Почему зуммер пищит постоянно и не выключается?** tone(pin, freq) без третьего аргумента играет ноту до noTone(pin) — вечно, если noTone никто не вызвал. Лечение: либо третий аргумент в миллисекундах (tone(BUZZER, 1000, 200) затихнет сам), либо noTone(BUZZER) после сигнала. Вторая причина редче: у low-level модуля пищание включается LOW — проверьте, что скетч держит на сигнальной ноге, прежде чем менять железо. **Как играть мелодию на пьезоизлучателе?** Нужен пассивный излучатель: ноту задаёт частота в tone(). Первая октава: до 262 Гц, ре 294, ми 330, фа 349, соль 392, ля 440, си 494. Соберите массивы частот и длительностей и играйте циклом, оставляя щель тишины 20-30 мс между нотами, иначе они сливаются. Активный зуммер на мелодиях бесполезен: у него одна зашитая нота, и никакие частоты в коде её не изменят. **Сколько тока ест зуммер и выдержит ли пин?** Типовые пьезо-пищалки и небольшие активные корпуса едят 20-30 мА: пин Uno отдаёт до 40 мА на ножку при комфортных двадцати, так что резистор 100 Ом и прямое включение — штатная схема. Громкие корпуса на 90+ дБ тянут 80-150 мА — только через транзистор. Считайте и общий бюджет чипа: 200 мА на всю Uno, и зуммер в этой копилке не единственный жилец. ## Фоторезистор Arduino: подключение, делитель напряжения и ночник на LDR (https://arduin-arsenal.ru/p/fotorezistor-podklyuchenie/) Подключение фоторезистора к Arduino: делитель с 10 кОм, шкала 0-1023, порог день/ночь с гистерезисом 50 единиц и ночник, который не мигает в сумерках. **Как подключить фоторезистор к Arduino?** Делителем: фоторезистор от 5V к пину A0, резистор 10 кОм от A0 на землю, средняя точка — сигнал. analogRead(A0) вернёт число 0-1023 в зависимости от освещённости. Если поставить датчик нижним плечом — от A0 к GND, а резистор сверху, — шкала перевернётся: светло будет означать малые числа. Оба варианта рабочие, выбирайте тот, при котором порог в коде читается естественно. Пошаговую сборку с расчётом плеч — в уроке про фоторезистор и ночник. **Какой резистор нужен к фоторезистору?** Для популярного GL5528 — 10 кОм: компромисс между чувствительностью в темноте и на свету. Логика подбора простая: резистор берут того же порядка, что сопротивление датчика при рабочем освещении. GL5528 при 10 люкс держит 8-20 кОм — отсюда и десять килоом: в сумерках средняя точка стоит посередине шкалы, и порог срабатывает в самом чувствительном месте. Поставите 1 кОм — шкала сожмётся у земли, 100 кОм — уедет к потолку, и оба крайних варианта потеряют половину диапазона. **Чем отличается LDR от фотодиода?** Скоростью и честностью сигнала. Фоторезистор меняет сопротивление за десятки миллисекунд, фотодиод отвечает за микросекунды — на порядки быстрее, поэтому передачу данных светом строят на фотодиодах и фототранзисторах. Фотодиод линеен по току, но требует обвязки; LDR нелинеен, зато подключается двумя деталями и не имеет полярности. Для порога «светло или темно» скорость не важна — там фоторезистор вне конкуренции по цене. **Почему значение всегда 1023?** Три типовые причины. Первая: нет нижнего резистора — средняя точка притянута к 5V через датчик, и АЦП видит питание. Вторая: шкала перевёрнута — датчик стоит в нижнем плече, и «всегда 1023» просто значит «сейчас темно». Третья: сигнал ушёл в другой пин, а A0 висит в воздухе. Проверка за минуту: накройте датчик ладонью — если число меняется, дело в перевёрнутой шкале и знаке сравнения; если стоит как вкопанное — ищите отсутствующее плечо делителя. **Как сделать ночник на фоторезисторе?** Схема — делитель из первого вопроса, плюс светодиод через резистор 220 Ом на любой цифровой пин. В коде два порога с гистерезисом: включать, когда значение упало ниже 250, выключать, когда поднялось выше 300 — зазор в 50 единиц держит режим и не даёт свету мигать в сумерках. Для плавного разгорания подставьте analogWrite с map() на ШИМ-пин. Полный скетч с расчётом плеч — в уроке про автоматический ночник, версия с меню и памятью режима — в итоговом проекте раздела. ## Симулятор Arduino Nano онлайн: скетчи в браузере без платы (https://arduin-arsenal.ru/p/simulyator-arduino-nano/) Запуск скетчей для Arduino Nano в браузере: мигалка, кнопка, потенциометр. Чем Nano V3 отличается от Uno и что эмулирует симулятор. Проверьте плату до покупки. **Можно ли запустить скетч для Nano в браузере без платы?** Да. В симуляторе на этом сайте код исполняется интерпретатором прямо в браузере: мигалка, кнопка, потенциометр, серво, LCD — всё то же, что на настоящем Nano. Сетевые и таймерные вещи эмулируются честно оговорённым образом. Скачивать и ставить ничего не нужно. **Чем Arduino Nano отличается от Uno?** Чипом ATmega328P и памятью платы совпадают, скетчи взаимозаменяемы. Nano меньше в два раза, втыкается в макетку как DIP-деталь, использует USB-конвертер CH340 (требует драйвер) и имеет два дополнительных аналоговых входа A6/A7, работающих только на чтение. Uno дороже, но живучее у новичка. **Почему компьютер не видит Arduino Nano?** В 9 случаях из 10 это отсутствие драйвера CH340: плата висит в диспетчере устройств как USB2.0-Serial. Ставится драйвер CH341SER за две минуты. Если порт появился, но заливка падает по таймауту — выберите процессор ATmega328P (Old Bootloader) в меню Tools. **Что нельзя проверить в симуляторе?** Физику: дребезг контактов, наводки, просадки питания, нагрев, работу конкретного клона платы. Также не проверяются USB-загрузка и драйверы — это часть Arduino IDE. Всё, что живёт в коде, симулятор исполняет честно, поэтому логику скетча доводят до ума в браузере, а железные сюрпризы ловят уже на макетке. **Сколько стоит Arduino Nano и где его брать?** Клоны на ATmega328P с CH340 стоят 350-500 рублей на маркетплейсах, оригинал Arduino Nano — в разы дороже. Для учёбы клон подходит без оговорок: чип тот же. Берите сразу два — второй выручит, когда первый встретит 5V с GND, и поверьте, у новичка эта встреча случается. ## Симулятор ESP32 онлайн: WiFi и GPIO без платы (https://arduin-arsenal.ru/p/simulyator-esp32/) Запуск ESP32-скетчей в браузере без платы: мигалка на GPIO2, WiFi в эмуляции, опасные пины DevKit V1. Что симулятор покажет честно — разберём по таблице. **Можно ли запустить ESP32-скетчи без платы?** Да, в симуляторе: GPIO, WiFi-статус-машина и Serial исполняются в браузере, сеть эмулируется — подключение за пару секунд и фиксированный IP. Для обучения сетевой логике этого достаточно; энергетику, антенны и шум АЦП проверяют только на живой плате. **Почему светодиод на ESP32 не мигает от скетча для Uno?** На DevKit V1 встроенный светодиод висит на GPIO2, а не на 13. Пин 13 у ESP32 — обычный GPIO без светодиода на борту. Поменяйте номер пина в скетче на 2 — мигалка заработает и в симуляторе, и на плате. **Какие пины ESP32 опасны?** Три группы: входы без выхода GPIO34-39 (digitalWrite там мёртв), страпповые GPIO0, 2, 5, 12, 15, чей уровень при включении выбирает режим загрузки, и все пины вообще против 5-вольтовых сигналов — логика платы 3.3 В. Полная карта с флажками — в распиновке DevKit. **Что эмулирует симулятор сети?** WiFi.begin() подключает плату за одну-две секунды, WiFi.status() проходит через ожидание до WL_CONNECTED, localIP() возвращает фиксированный адрес. Логика ожидания и таймаутов отрабатывается как на железе. Отказов роутера, падений 5 ГГц и SSL-ошибок в эмуляции нет — это территория настоящей платы. **Нужен ли драйвер для ESP32 DevKit V1?** Да: USB-UART мост CP2102 (на клонах иногда CH340) требует драйвера, иначе COM-порт не появится. Ставится за две минуты, поведение и лечение совпадают с Nano на CH340. Если порт есть, а заливка висит на Connecting… — удержите кнопку BOOT при старте прошивки. ## Wokwi на русском: обзор симулятора и русская альтернатива (https://arduin-arsenal.ru/p/wokwi-russkiy-alternativa/) Wokwi не переведён на русский: интерфейс и ошибки на английском. Честный обзор Wokwi и сравнение с русским симулятором: без регистрации, скетчи из уроков. **Есть ли Wokwi на русском языке?** Нет: интерфейс, документация и сообщения об ошибках только на английском. Русскоязычные обзоры существуют, но сам стенд не переводился. Если английский пока мешает, удобнее начать с русскоязычного симулятора и перейти на Wokwi позже — синтаксис скетчей один и тот же. **Чем наш симулятор лучше Wokwi?** Он не лучше по охвату деталей — он короче по пути для новичка: русский интерфейс, без регистрации, каждый урок несёт скетч, который исполняется прямо на странице, ошибки объясняются по-русски. Wokwi выигрывает в числе плат, компонентов и приборов — там сильнее стенд для ESP32 и Pico. **Можно ли в Wokwi работать без регистрации?** Да, гостевой режим позволяет собирать схемы и запускать скетчи, но проект не сохранится: после закрытия вкладки диаграмма потеряется. Для сохранения нужен аккаунт Google или GitHub. В нашем симуляторе регистрация не нужна вообще — прогресс лежит в браузере. **Что выбрать школьнику 12-14 лет?** Для кружка и первых месяцев — симулятор с русским интерфейсом и уроками: меньше барьеров, план обучения готов. Tinkercad тоже подходит, если в классе есть учитель, владеющий Autodesk. Wokwi — вариант для старших, кто спокойно читает по-английски и уже перерос мигалку. **Переносятся ли скетчи между симуляторами?** Да, без правок в базовых случаях: язык Arduino везде один, pinMode, digitalWrite, Serial и библиотеки Servo, LCD, DHT работают одинаково. Отличия появляются на экзотике — регистрах, прерываниях с таймерами, WiFi-стеке: там поведение зависит от глубины эмуляции конкретного стенда. ## Arduino Mega 2560: проекты и что можно собрать (https://arduin-arsenal.ru/p/arduino-mega-2560-proekty/) Что собрать на Arduino Mega 2560: 54 пина, 4 UART, 256 КБ флеш. Гирлянды, клавиатуры, станки, связь двух плат. Когда Uno мало и Mega окупается — таблица. **Чем Arduino Mega 2560 отличается от Uno?** Только масштабом: ATmega2560 даёт 256 КБ флеша, 8 КБ SRAM, 54 цифровых пина, 16 аналоговых входов и 4 аппаратных UART против 32 КБ, 2 КБ, 14 пинов, 6 входов и 1 UART у Uno. Частота та же 16 МГц — быстрее Mega не считает, она вмещает больше. Логика 5 В и загрузка скетчей идентичны. **Какие проекты имеют смысл на Mega 2560?** Стенды с десятками светодиодов и кнопок, матричные клавиатуры с панелями ввода, станки на двух-трёх степперах с концевиками и экраном, устройства с несколькими UART-устройствами: GPS, Bluetooth, вторая плата одновременно. В светодиодных гирляндах на WS2812 Mega не нужна — там Uno тянет сотни пикселей по одному пину. **Можно ли заменить Mega сдвиговыми регистрами и оставаться на Uno?** Да, до определённого момента: 74HC595 добавляет выходы за три пина, мультиплексор CD4051 размножает аналоговые входы. Но второй аппаратный UART регистрами не делается — SoftwareSerial на скоростях выше 9600 ненадёжен. Если проекту нужны 2+ UART или много памяти, честнее взять Mega. **Почему скетч на Mega заливается дольше?** Объём прошивки и проверка флеша больше: даже пустой bootloader у ATmega2560 занимает 8 КБ, а полная заливка с верификацией гоняет до 256 КБ. Полминуты на «Uploading…» — норма. Если заливка падает по таймауту, проверьте выбранную плату (Arduino Mega or Mega 2560) и порт. **Влезет ли Mega в макетную плату?** Нет: колодки платы стоят шире, чем шаг рядов стандартной беспаячной макетки, и длинная сторона перекрывает дорожки. Подключение — перемычками мама-папа или двумя макетками по бокам. Компактная Mega 2560 Pro с тем же чипом садится в макетку напрямую — она разобрана в отдельной шпаргалке. ## Макетная плата: как пользоваться беспаячной макеткой (https://arduin-arsenal.ru/p/maketnaya-plata-boolean-kak-polzovatsya/) Как пользоваться макетной платой: дорожки под пластиком, шины питания, разрыв посередине и пять ошибок, из-за которых схема не светится. Проверьте макетку. **Как соединены отверстия в макетной плате?** Средняя зона: пять контактов каждого столбика между собой — один узел. Шины «+» и «-» по краям — длинные полосы, вся полоса один узел. Центральный жёлоб разделяет половины столбиков для микросхем. У многих плат шины разорваны посередине — половины не связаны, проверьте прозвонкой. **Почему схема на макетке не работает?** Первые подозреваемые: провод в мёртвую половину разорванной шины, деталь в соседний столбик вместо нужного, отсутствие общей земли между платой и внешним блоком, перевёрнутая полярность светодиода, усталая пружинка. Прозвоните шины, проверьте узлы, потом смотрите код — в этом порядке. **Какую макетку купить для первых проектов?** Среднюю на 400-830 точек с цельными шинами и самооклеивающейся основой, плюс набор перемычек и пару маленьких плат для мобильных схем. Разбор форматов и комплектов — в шпаргалке по макетным платам. Большая плата на 1660 точек нужна, когда проекты перерастают одну полосу. **Нужно ли паять детали на макетке?** Нет, в этом её смысл: детали и перемычки держатся пружинками и переиспользуются сколько угодно. Пайка появляется позже — для постоянных конструкций на перфборде или печатной плате, когда схема отлажена и макеточная версия собирается в постоянную. **Можно ли повредить макетку неправильным подключением?** Саму макетку — почти невозможно: она просто металл и пластик. А вот поданное 12 В на шину при детали, рассчитанной на 5 В, сожжёт деталь, а короткое замыкание 5V на GND может поджарить стабилизатор платы Arduino. Макетка выживет, электроника — не факт, поэтому питание проверяют до включения. ## Стартовый набор Arduino: что купить в 2026 году (https://arduin-arsenal.ru/p/nabor-arduino-dlya-nachinayushih/) Какой стартовый набор Arduino купить в 2025: три бюджета от 2 до 12 тысяч, таблица с ценами и вердиктом. Модули, которые пригодятся, и мёртвый груз в наборах. **Какой стартовый набор Arduino купить в 2025?** Либо детали по списку: Uno-клон, макетка, перемычки, резисторы, светодиоды, кнопки, потенциометры — бюджет 2-2,5 тысячи рублей. Либо готовый набор «16 в 1», если подарок и не хочется собирать список — но половина модулей в нём обычно лежит мёртвым грузом. Рабочий расширенный список с серво, дальномером и LCD укладывается в 5-6 тысяч. **Uno или Nano для первого набора?** Uno: 5-вольтовая логика, колодки под перемычки без пайки, толстая плата переживёт новичка. Nano дешевле и втыкается в макетку, но требует драйвер CH340 и тоньше в отладке. Вторым шагом Nano покупается как раз для макетных проектов — а первым лучше Uno. **Какие модули в наборах бесполезны?** По моему опыту и опыту читателей: датчик пламени, геркон, датчик удара, ИК-приёмник с пультом и джойстик-модуль — лежат невостребованными у большинства. Не бесполезны, но преждевременны: RFID, GSM-модули, шаговые двигатели с драйверами — у них свой порядок изучения после базовых датчиков. **Нужен ли паяльник на старте?** Нет: весь первый год проекты собираются на беспаячной макетке. Паяльник появляется, когда схема отлажена и её хочется перенести на перфборд или печатную плату — обычно через 3-6 месяцев. Исключение — дешёвые модули с отваливающимися проводами, где паяльник чинит заводской брак. **Что докупить к набору из 16 в 1?** В первую очередь то, чего в наборах нет: мультиметр, макетный блок питания 3,3/5 В, второй набор перемычек папа-мама и коробку с ячейками. Дальше — под интерес: WS2812 для света, DS3231 для часов, ESP32 для WiFi. Питание отдельно от USB спасает от перезагрузок платы при старте серво. ## Мультиметр для Arduino: как проверять схему и плату (https://arduin-arsenal.ru/p/multimetr-dlya-arduino/) Мультиметр для Arduino: прозвонка перемычек, замер напряжения и тока, проверка резистора светодиода. Типовые смерти платы и порядок проверки схемы за 10 минут. **Какой мультиметр купить для Arduino?** DT-830B за 400-600 рублей: напряжение, ток до 10 А, сопротивление и прозвонка закрывают весь учебный план. Дорогие модели с автодиапазоном и True RMS удобнее, но на обучении разницы нет. Сразу возьмите запасной комплект щупов — на дешёвых клонах они рвутся первыми. **Как проверить перемычку мультиметром?** Режим прозвонки (динамик), щупы на оба конца перемычки: пищит — целая, молчит — обрыв внутри изоляции. За минуту перебирается весь набор, и половина «неработающих схем» у новичков решается заменой одной перемычки. Прозвонка делается на обесточенной схеме. **Как измерить ток потребления схемы Arduino?** Только в разрыв цепи: вынуть провод питания, переставить красный щуп в гнездо 10А, щупы в разрыв. Щупы параллельно источнику в режиме тока — это короткое замыкание. Плата в покое ест 45-50 мА, серво при старте — до 700 мА: эти цифры объясняют перезагрузки от USB. **Как проверить резистор светодиода?** Режим Ω, щупы на ноги: 220 Ом покажет красный-красный-коричневый код. Если прибор молчит или показывает мегаомы — резистор не тот. Проверка занимает десять секунд и спасает светодиод: с 220 Ом от 5 В он ест около 15 мА, а с перепутанным резистором — или тусклый, или мёртвый. **Мультиметром можно проверить саму плату Arduino?** Частично: прозвонка 5V-GND до включения ловит короткое замыкание, замер напряжения на шинах показывает просадки, ток в разрыве питания — потребление. Полная диагностика чипа требует программатора, но для типовых смертей — КЗ, переполюсовка, перегрузка — этих трёх измерений достаточно. ## Arduino IDE 2 на русском: установка и настройка (https://arduin-arsenal.ru/p/arduino-pro-na-russkom/) Arduino IDE 2 (бывший Pro IDE) на русском: где включить русский язык, чем IDE 2 лучше 1.8, автодополнение и отладчик. Проверьте настройку скетчем из симулятора. **Существует ли отдельный Arduino Pro IDE?** Нет: экспериментальный Pro IDE 2019 года перерос в обычную Arduino IDE 2.x, и отдельного дистрибутива «Pro» давно нет. Качайте свежую IDE 2 с arduino.cc — это и есть тот самый редактор с автодополнением и отладчиком. Старые ссылки на Pro IDE ведут либо на IDE 2, либо в никуда. **Как включить русский язык в Arduino IDE 2?** File → Preferences → поле Language вверху диалога → «Русский» → OK → перезапуск IDE. В свежих версиях языковой пакет вшит; если русского в списке нет — IDE 2 ставит языковой пакет из каталога расширений по ссылке в том же диалоге. Скачивать файлы локализации вручную не нужно. **Работает ли отладчик с Arduino Uno в IDE 2?** Нет: у ATmega328P нет аппаратного отладочного интерфейса, который IDE 2 поддерживает. Точки останова работают с ESP32 и платами SAMD. Для Uno отладку делают через Serial-печать — методика показана в уроках раздела IDE и в симуляторе, где Serial-монитор живёт рядом с платой. **Чем IDE 2 лучше старой 1.8.19?** Современный редактор с вкладками, живым автодополнением и подсветкой ошибок до компиляции, отдельной панелью монитора порта и отладчиком на поддерживаемых платах. Старая версия легче и запускается на слабых ноутбуках — её держат для древних библиотек. Для новых проектов берите IDE 2. **Плата не видна в портах после установки — что делать?** В девяти случаях из десяти это китайский клон с чипом CH340, для которого нужен отдельный драйвер: после установки в диспетчере устройств появится USB-SERIAL CH340, и порт подхватится. Вторая причина — зарядный кабель без линий данных. Полный разбор — в шпаргалке по драйверу CH340. ## Tinkercad Arduino на русском: возможности и альтернатива (https://arduin-arsenal.ru/p/tinkercad-arduino-na-russkom/) Что умеет Tinkercad Circuits и почему его нет на русском: ограничения Autodesk, сравнение с бесплатным русским симулятором без регистрации и аккаунта. **Есть ли Tinkercad на русском языке?** Нет: интерфейс, справка и встроенные уроки — только на английском, Autodesk локализацию Circuits не выпускал. Русскоязычные статьи о Tinkercad существуют, но сам инструмент не переведён. Если английский пока мешает, начните с русскоязычного симулятора и вернитесь в Tinkercad позже при желании. **Tinkercad бесплатный или нет?** Бесплатный, но с обязательной регистрацией через Autodesk: без аккаунта вы не сохраните схему и не вернётесь к проекту на другом компьютере. В нашем симуляторе аккаунта нет вообще — код и прогресс живут в браузере устройства. **Можно ли в Tinkercad симулировать ESP32 или WiFi?** Нет: из плат доступна только Arduino Uno, WiFi-модулей и MQTT в палитре нет. Для беспроводных задач подойдёт наш симулятор с ESP32 DevKit и эмуляцией HTTP/MQTT либо Wokwi с настоящим WiFi-стеком — сравнение в обзоре онлайн-симуляторов. **Что лучше для ребёнка 10-12 лет?** То, где ребёнку не нужен переводчик: русский интерфейс, ошибки по-русски и готовые уроки сокращают путь до первого работающего устройства с часа до десяти минут. Tinkercad хорош как второй инструмент — когда ребёнок уже пишет скетчи и хочет красивую 3D-сцену. ## SimulIDE на русском: симулятор электроники и Arduino (https://arduin-arsenal.ru/p/simulide-rus-simulyator/) SimulIDE — бесплатный офлайн-симулятор AVR и PIC. Разбираем установку, компиляцию AVR-GCC, минусы интерфейса и сравнение с браузерным симулятором на русском. **Есть ли SimulIDE на русском?** Нет: интерфейс и справка только на английские, официальных русификаторов проект не выпускал. Русскоязычные видеообзоры есть на YouTube, но внутри программы всё по-английски. Если язык мешает, удобнее стартовать в русскоязычном браузерном симуляторе. **SimulIDE бесплатный?** Да, полностью бесплатный и без рекламы, распространяется как портативная сборка для Windows и Linux. Регистрация не нужна. Единственная «плата» — настройка тулчейна AVR-GCC для компиляции Arduino-скетчей. **Можно ли загрузить в SimulIDE скетч из Arduino IDE?** Да: скомпилируйте скетч в Arduino IDE с выгрузкой hex (Export Compiled Binary) и привяжите hex к модели ATmega в SimulIDE. Базовые библиотеки — Servo, LiquidCrystal, EEPROM — работают; сложные зависимости вроде FastLED или IRremote встречают отказом на этапе линковки. **Что выбрать новичку: SimulIDE или браузерный симулятор?** Новичку — то, что запускается в один клик и объясняет по-русски: браузерный стенд с уроками. SimulIDE берите позже, когда захочется копнуть аналоговую электрику: вольтметры, делители, токи. Навыки скетчей переносятся один в один. ## Proteus для Arduino: симуляция плат в профессиональной среде (https://arduin-arsenal.ru/p/proteus-arduino-simulyator/) Proteus VSM для Arduino: что умеет профессиональная среда, когда покупка оправдана, чем заменить бесплатно — таблица Proteus, SimulIDE и браузерного симулятора. **Proteus бесплатный или нет?** Платный: полноценные лицензии Labcenter стоят десятки тысяч рублей, демо-версия не сохраняет проекты. Бесплатных официальных версий нет — «русские сборки» с торрентов нарушают лицензию и нестабильны. Бесплатная альтернатива для учёбы — SimulIDE и браузерные симуляторы. **Как подключить Arduino к Proteus?** Модели плат ставятся пакетами: официальный пэк с Labcenter или сторонние библиотеки ARDUNIO.LIB/ARDUINO.IDX, которые копируются в каталог LIBRARY и подключаются через компонентную базу. Дальше скетч компилируется в hex в Arduino IDE, hex указывается в свойствах модели платы — и симуляция исполняет код на схеме. **Какие библиотеки Arduino работают в Proteus?** Базовые — Servo, LiquidCrystal, Stepper, EEPROM, SoftwareSerial — работают надёжно. Экзотика вроде FastLED, IRremote или RTClib встречает проблемы на этапе линковки и в моделях периферии; для сложных проектов остаётся путь «симуляция логики в браузерном стенде — железо — Proteus под плату». **Что лучше для новичка вместо Proteus?** Тот инструмент, который запускается за минуту и объясняет по-русски: браузерный симулятор с уроками. Proteus учит трассировке плат — это второй-третий год занятий. Симуляция самого Arduino в Proteus не даёт новичку ничего сверх того, что даёт бесплатный стенд, кроме английского интерфейса и цены. ## Arduino для школьников: курс для кружка и цифровой школы (https://arduin-arsenal.ru/p/cifrovaya-shkola-arduino-kurs/) Как вести кружок Arduino без закупки железа: браузерный симулятор на русском, готовые уроки со скетчами и программа на 8 занятий с результатом после каждого. **Подойдёт ли курс без набора Arduino?** Да, вся восьмёрка занятий проходит в браузерном симуляторе: у каждого ребёнка своя плата на экране, код запускается кнопкой, железо не нужно. Реальный набор покупайте позже — к моменту, когда ребёнок сам пишет скетчи и просит свою плату. **С какого возраста можно вести занятия?** Рабочий диапазон — 10-14 лет: в 10 дети идут по мигалке и светофору с учителем рядом, к 14 самостоятельно доходят до конечного автомата и датчиков. Чтение технического английского не требуется — интерфейс, ошибки и подсказки на русском. **Нужны ли установка и регистрация на школьных компьютерах?** Нет: сайт открывается в обычном браузере, аккаунт не нужен, установка не нужна — важно для школьных машин, где права администратора ограничены. Прогресс и скетчи живут в браузере устройства, домашняя работа открывается на любом компьютере. **Как перейти с симулятора на реальную плату?** Скетчи переносятся без правок: язык Arduino везде один. Ставится Arduino IDE, плата подключается по USB, код со страницы урока копируется в редактор и загружается в плату. Сборку схемы на макетке разбирает отдельный урок — с типовыми ошибками полярности и подтяжки. ## iarduino: наборы и модули — честный обзор и с чего начать (https://arduin-arsenal.ru/p/iarduino-nabory-obzor/) Разбор линейки iarduino: клоны Uno и Nano, стартовые наборы, шилды и модули. Что лежит в коробке, сколько стоит и чем набор выгоднее списка покупок по частям. **iarduino — это оригинальная Arduino или клон?** Клон, как и почти всё на рынке: оригинальные Uno делает итальянская Arduino.cc и стоят они 3500-5000 ₽. Платы iarduino собраны на том же чипе ATmega328P, совместимы с Arduino IDE на уровне скетчей и стоят в 3-4 раза дешевле. Для обучения разницы в поведении нет. **Что выгоднее: стартовый набор или детали по отдельности?** По деньгам — детали: наш список выходит в 1800-2400 ₽ против 2800-4500 ₽ у наборов. По времени — набор: одна покупка, всё в коробке в тот же вечер. Правило простое: подарок и быстрый старт — набор; осознанная покупка под конкретный проект — список. **Можно ли учиться по вашему курсу с набором iarduino?** Да, целиком: курс не привязан к бренду, а симулятор закрывает первые разделы вообще без железа. Единственная развилка — дисплей: если в наборе LCD без I2C-модуля, уроки по 4-проводному подключению и уроки по I2C читаете параллельно, схема отличается тремя проводами. **Какой набор iarduino взять: базовый или продвинутый?** Базовый: в продвинутом половина компонентов (OLED, RTC, шаговик) понадобится вам не раньше середины курса, а переплата 2000-3000 ₽ лежит мёртвым грузом. Докупите модули, когда дойдёте до соответствующих уроков — так каждый модуль сразу встречается со своим скетчем. **Нужен ли драйвер для плат iarduino?** Да: USB-чип CH340 (стандарт для клонов) не ставится в Windows из коробки. Драйвер ставится один раз, после чего плата видна в списке портов. Без связи по USB скетчи не загружаются — это первая проверка любой новой платы. ## Робот на Arduino своими руками: машинка для начинающих (https://arduin-arsenal.ru/p/robot-na-arduino-svoimi-rukami/) Как собрать машинку на Arduino: платформа с двумя моторами, драйвер L298N или TB6612, питание от 18650, цены деталей и скетч-заготовка первого заезда. **Можно ли подключить моторы напрямую к пинам Arduino?** Нельзя: пин отдаёт максимум 20-40 мА, а TT-мотор при старте тянет 400-700 мА — пин выгорает за минуты, иногда за секунды. Между платой и мотором всегда стоит драйвер: L298N, TB6612 или хотя бы транзисторный ключ для одного направления. **Какой драйвер выбрать: L298N или TB6612FNG?** Для первой машинки — L298N: клеммы, борда с регулятором 5 В и полная совместимость с уроками. TB6612 эффективнее (меньше греется, выше КПД), но мелкий и без клемм — берите его, когда готовите вторую, более собранную платформу или гоняете 4WD. **Сколько стоит робот на Arduino по минимуму?** 2100-3100 ₽: плата-клон 700-1100 ₽, драйвер 150-250 ₽, шасси 2WD 350-600 ₽, батарейный блок с 18650 700-950 ₽, провода и преобразователь 400-600 ₽. Датчики и серво добавят 200-400 ₽, но на первый заезд они не нужны. **От какого напряжения питать робота?** Оптимум — 7,4 В от двух 18650 последовательно: хватает и моторам, и плате через Vin или buck на 5 В. От 9-вольтовой «Кроны» машинка поедет, но батарея сдохнет за 15-20 минут — у неё нет тока на два мотора. USB-питание годится только для отладки кода с колёсами в воздухе. **С чего начать обучение под робота?** С симулятора и раздела «Основы»: digitalWrite, кнопка, millis — это весь базовый словарь первого заезда. Дальше — уроки по L298N и ШИМ, и только после этого сборка железа. Так вы придёте к машинке с готовой логикой, а не с багажом «оно едет, но не знаю почему». ## Часы на Arduino: TM1637, OLED и DS3231 (https://arduin-arsenal.ru/p/chasy-na-arduino/) Часы на Arduino: табло на TM1637, OLED 0.96 или LCD 1602, точный ход через DS3231, таблица сравнения дисплеев и рабочий скетч с millis в симуляторе. **Часы на Arduino будут идти точно?** На чистом millis() — уйдут на минуты за неделю: керамический резонатор платы не про точность. С модулем DS3231 ход держится в пределах секунд за год, а время не сбрасывается при выключении питания — для постоянных часов модуль обязателен. **Что лучше для часов: TM1637, OLED или LCD?** Для «только время» — TM1637: дёшево, крупные цифры, минимум кода. Для времени плюс даты и температуры — OLED 0.96. Для станции с показаниями датчиков и меню — LCD 1602. Все три питаются от тех же 5 В и вешаются на два провода данных. **Как завести время на DS3231?** Одной строкой при прошивке: rtc.adjust(DateTime(F(__DATE__), F(__TIME__))) записывает момент компиляции скетча. Дальше эту строку убирают или оставляют за условием lostPower() — иначе каждый сброс платы перезаписывает время. Модуль запоминает установку на батарейке CR2032. **Почему двоеточие на TM1637 не мигает или пропало?** Бит двоеточия живёт в байте кадра, и любой обычный showNumberDec его затирает — выводите время только через showNumberDecEx с 0x40 в каждом обновлении. Если и это не помогло, проверьте тип модуля: у часовых версий с 16 пинами двоеточие горит постоянно и кодом не управляется. **Можно ли собрать часы без модуля RTC вообще?** Да, на millis(): в скетче выше время задаётся константами и тикает само. Минусы — сброс при отключении питания и дрейф в минуты за неделю. Для экспериментов и таймеров этого хватает, для постоянных часов — DS3231 за 130-220 ₽ закрывает обе проблемы. ## Термометр-гигрометр на Arduino: DHT22 + дисплей (https://arduin-arsenal.ru/p/termometr-gigrometr-arduino/) Термометр-гигрометр на Arduino с DHT22 и LCD 1602: схема, реле вентилятора с гистерезисом, таблица DHT11 против DHT22 и рабочий скетч в симуляторе. **DHT11 или DHT22: что взять для комнатного прибора?** Для комнаты хватит DHT11: погрешность ±2 °C глазом не различается, а цена втрое ниже. DHT22 нужен, когда показания управляют реле или идут в лог: точность ±0,5 °C, минусовые температуры и шаг 0,1 °C превращают игрушку в измерительный прибор. **Почему скетч читает датчик только раз в 2 секунды?** Это физика DHT22: между измерениями датчику нужно примерно 2 секунды на подготовку показаний. Частые запросы возвращают пустые значения (NaN), которые ломают логику порога. Опрос реже раза в 5 секунд тоже вреден — пропустите резкий скачок. **Зачем гистерезис на реле вентилятора?** Без него температура около порога болтается на десятые градуса, и реле стрекочет включениями — контакты выгорают за недели. Два порога (включение 27 °C, выключение 25 °C) дают реле спокойствие: между ними система не дёргается, сколько бы температура ни колебалась. **Можно ли вывести на LCD по-русски?** Штатный знакогенератор HD44780 кириллицы не содержит: вариант — латиница, свои глифы через createChar (их всего восемь на кадр) или библиотека с русскими шрифтами. Для прибора на полке я пишу T= и Vlazhnost: два коротких слова влезают и понятны всем. **Датчик показывает NaN — датчик сломан?** В девяти случаях из десяти это проводка: DATA перепутана с VCC, обрыв или плохой контакт, отсутствует подтяжка 10 кОм. Начните с проверки распиновки и запуска раз в 2 секунды, и только потом списывайте датчик — DHT живуч, особенно при бережной пайке. ## Симулятор Arduino для слабого ПК и старого ноутбука (https://arduin-arsenal.ru/p/simulyator-arduino-dlya-slabogo-pk/) Симулятор Arduino, который летает на старом ноутбуке: без установки, регистрации и компиляции. Почему Wokwi тормозит, таблица требований и скетч на пробу. **Какой симулятор Arduino самый лёгкий для старого ПК?** Тот, что не компилирует скетч и не рисует 3D-сцену: браузерный симулятор с интерпретатором. Страница статическая, ничего не ставится, запуск мгновенный. Wokwi тяжелее из-за GCC в WebAssembly и сети, Tinkercad — из-за WebGL-сцены, Proteus — из-за установки и лицензии. **Wokwi тормозит на моём ноутбуке — что делать?** Проверьте интернет: часть операций Wokwi уезжает в облако, и слабый канал чувствуется сильнее слабого процессора. Дальше — закрыть лишние вкладки и упростить сцену. Если ожидание всё равно раздражает, ведите логику скетчей в нашем симуляторе, а Wokwi оставьте для ESP32 и сложных стендов. **Наш симулятор работает без интернета?** После первой загрузки страница кэшируется браузером и открывается офлайн: она статическая, сервер для исполнения скетчей не нужен. Прогресс и сохранённые проекты живут в браузере того же устройства — аккаунта нет по определению. **Потянет ли ноутбук с 2 ГБ ОЗУ Arduino IDE?** Да, если взять версию 1.8.19 в портативной сборке: она в разы легче 2.x и запускается даже с флешки. Черновую работу ведите в симуляторе, а IDE открывайте только для загрузки скетча в плату — так самый тяжёлый шаг сокращается до одного в день. **В чём подвох лёгкого симулятора?** В честном потолке эмуляции: нет компиляции настоящим GCC, нет регистров и таймерных прерываний, набор компонентов ограничен тем, что нужно для учёбы. Для первых месяцев это фильтр шума, а не ограничение. Когда упрётесь в потолок, переходите на Wokwi или реальное железо — скетчи переносятся без правок. ## Arduino обучение онлайн бесплатно: разбор форматов и маршрут (https://arduin-arsenal.ru/p/arduino-onlain-obuchenie-besplatno/) Как учить Arduino онлайн бесплатно: разбор YouTube, курсов и текстовых самоучителей, честная таблица форматов, маршрут первого месяца и скетч для проверки базы. **Можно ли выучить Arduino бесплатно и без железа?** Основы — да: симулятор исполняет те же скетчи, что реальная плата, и ошибки те же. Первый месяц вообще не требует покупок. Железо понадобится для электрики, пайки и питания — но к тому моменту вы уже будете знать, что именно покупать и зачем. **Сколько времени занимает обучение с нуля?** При часе-двух в день: база (мигалки, кнопки, аналоговые входы, Serial, millis) — около месяца, уверенный любитель с самостоятельными проектами — полгода. Ускорители: практика руками каждый день и готовая последовательность уроков вместо хаотичных роликов. **Что лучше для старта: YouTube или текстовый самоучитель?** Текст — для теории и повторения, видео — чтобы увидеть, как держать плату и куда что втыкать. Главный вопрос не в формате, а в руках: без набранного на клавиатуре кода любой формат превращается в сериал. **Нужно ли знать английский или программирование заранее?** Нет: словарь Arduino — пара десятков слов вроде pinMode и digitalWrite, они вводятся по ходу с переводом. Язык программирования — упрощённый C, которому учат с нуля на первых уроках. Школьная математика на уровне пропорций закрывает девять десятых расчётов. **Бесплатные курсы Arduino — это развод?** Не развод, но маркетинг: бесплатным бывает первый модуль или вебинар, дальше — тариф. Это честно и иногда полезно. Проверяйте одно: даёт ли фрагмент работу руками, а не только слайды. Полный бесплатный маршрут без регистрации собран на этой странице выше. ## Экран LCD 2004 I2C: подключение к Arduino (https://arduin-arsenal.ru/p/ekran-lcd-2004-i2c-podklyuchenie/) Как подключить LCD 2004 по I2C к Arduino: таблица проводов, адрес 0x27 или 0x3F, контраст, библиотека LiquidCrystal_I2C, скетч 20×4 и лечение пустого экрана. **Какой адрес у LCD 2004 I2C — 0x27 или 0x3F?** Зависит от чипа переходника: PCF8574 даёт 0x27, PCF8574A — 0x3F. Не угадывайте — прогоните сканер I2C за минуту: он напечатает точный адрес, который останется подставить первым аргументом в конструктор. **LCD 2004 показывает только чёрные квадраты — что делать?** Квадраты во всех строках — выкручен контраст: крутите подстроечник обратно, пока не проступят символы. Квадраты только в первой строке — экран не инициализирован: проверьте адрес сканером, SDA/SCL и то, что lcd.init() выполняется в setup(). **Чем скетч для 2004 отличается от скетча для 1602?** Одной строкой: LiquidCrystal_I2C lcd(0x27, 20, 4) вместо lcd(0x27, 16, 2). Остальной код одинаков, но помните про предел: двадцать символов на строку, двадцать первый уедет вниз и сместит вывод. **Можно ли подключить LCD 2004 к ESP32?** Да, код тот же, шина на других пинах: SDA — GPIO21, SCL — GPIO22, адрес ищется тем же сканером. Переходники чаще всего хотят 5 В питания при 3,3-вольтовой логике ESP32 — связка обычно работает, но надёжнее модуль с уровневым преобразователем. **Сколько экранов LCD 2004 можно повесить на одну шину?** Два и больше: у каждого переходника свой адрес, джамперы A0–A2 на плате смещают его по диапазону чипа. Питание и SDA/SCL общие, в скетче — два объекта lcd с разными адресами. Разбор шины с двумя устройствами есть в уроках раздела LCD. ## Библиотеки iArduino на русском: описание и где брать (https://arduin-arsenal.ru/p/iarduino-biblioteka-russkiy/) Где брать библиотеки iArduino и их wiki: таблица модуль-библиотека, отличия от Adafruit, честный разбор русских команд и скетч-идея обёртки на Arduino API. **Где скачать библиотеки iArduino?** На wiki.iarduino.ru: страница каждого модуля содержит ссылку на архив с библиотекой, плюс репозитории бренда на GitHub. В менеджере библиотек Arduino IDE семейство тоже находится по запросу «iarduino». Ставьте либо ZIP через меню Sketch — Include Library — Add .ZIP, либо прямо из менеджера: маршрут с картинками разобран в уроке про библиотеки. **Что такое iarduino_I2C_connect и зачем она нужна?** Базовый файл семейства: общая обвязка шины I2C — адресация, чтение и запись регистров. Модули линейки (дисплеи, датчики, расширители) сидят сверху и тянут его как зависимость. Без неё I2C-библиотеки iArduino не компилируются, поэтому она ставится первой — обычно автоматически, вместе с остальными. **Правда ли, что в библиотеках iArduino русские команды?** Не совсем: имена функций в коде латиницей — gettime(), check(), иначе компилятор C++ и подсказки IDE работают плохо. По-русски всё вокруг: вики, примеры, комментарии в исходниках и пояснения к ошибкам. Для новичка это и есть главное — он читает по-русски и быстро доходит до работающего скетча. **Чем библиотеки iArduino лучше Adafruit и чем хуже?** Лучше — для модулей бренда: русская вики, примеры под конкретное железо, минимум настройки. Хуже — для всего остального: сообщество маленькое, ответы на ошибки ищутся в основном по-английски, а код привязан к модулям линейки и при смене железа переписывается под стандартные драйверы. У Adafruit наоборот: справка на английском, зато поддержка на весь интернет. **Можно ли проверить скетч с iarduino-библиотекой в вашем симуляторе?** Нет: браузерный симулятор не компилирует сторонние библиотеки — они ставятся на реальную плату. Идею скетча проверяйте на чистом Arduino API, как в примере на этой странице: ручка и шкала показывают перевод сырья в понятные единицы. Разбор самих модулей бренда с ценами лежит в обзоре наборов iArduino. ## Симулятор Arduino на телефоне: что работает с телефона (https://arduin-arsenal.ru/p/simulyator-arduino-na-telefone/) Что реально делать с Arduino с телефона: читать уроки, запускать скетчи, тапать кнопку. Таблица телефон против ноутбука и разбор приложений из Play Market. **Можно ли изучать Arduino без компьютера, только с телефона?** Первые месяцы — да: читать уроки и запускать скетчи в браузерном симуляторе с телефона реально, стенд тапается пальцем. Стена встанет на длинных скетчах и на прошивке реальной платы — для неё нужен компьютер с USB, телефон не прошивает. **Работает ли симулятор на iPhone и iPad?** Да: страница статическая, интерпретатор исполняет скетч без компиляции, Safari тянет это как обычный сайт. На iPad удобнее всего — код и стенд помещаются рядом. В обоих случаях после первого открытия страница кэшируется и открывается без сети. **Имеет ли смысл ставить приложения-эмуляторы Arduino из Play Market?** С осторожностью: качество в категории плавает от рабочих компиляторов до рекламы с блокнотом. Смотрите свежие отзывы, проверяйте поддержку ATmega328P и Serial, ничего не покупайте до первого собранного скетча. Браузерный вариант проще: без установки, без подписок и с русскими пояснениями. **Почему Wokwi на телефоне тормозит, а ваш симулятор нет?** Wokwi компилирует скетч настоящим GCC в WebAssembly и рисует тяжёлую сцену — на телефоне это память и батарея. Здесь компиляции нет: интерпретатор исполняет код сам, страница лёгкая и работает офлайн после первого открытия. Потолок тот же, что на большом экране: сторонние библиотеки и регистры — мимо. **Где хранятся мои проекты с телефона и переедут ли они на ноутбук?** В браузере того устройства, где работали: аккаунта у сайта нет, на сервер ничего не уходит. Перенос между телефоном и ноутбуком — руками: скопируйте текст скетча в письмо или заметку и вставьте на другом устройстве. Пара минут, зато без регистраций и синхронизаций. ## Arduino Uno R3: что купить для старта — минимальный список (https://arduin-arsenal.ru/p/arduino-uno-r3-kupit-chto-nuzhno/) Что купить к Arduino Uno R3: список из семи позиций с ценами, набор против самосбора, чип ATmega328P, драйвер CH340 и скетч-проверка деталей после покупки. **Можно ли учиться на клоне Uno R3, а не на оригинале?** Да: честный клон собран на том же ATmega328P и работает со всеми уроками без правок. Отличия — в разъёмах и качестве пайки, а не в логике. Единственная разовая возня — драйвер CH340: ставится один раз, после чего клон в IDE неотличим от оригинала. **Что обязательно должно входить в стартовый набор?** Плата на ATmega328P, кабель USB A–B, макетка, джамперы, светодиоды с резисторами 220 Ом, кнопки с резисторами 10 кОм и потенциометр. Если в перечне набора этого нет, а вместо него датчики пламени и пищалки — это набор для галочки: базу придётся докупать отдельно. **Почему плата с CH340 не видится в Arduino IDE?** Система не знает чип без драйвера: поставьте CH340 с сайта производителя и переткните кабель. Дальше выберите плату Uno и порт — обычная загрузка. Windows 10-11 нередко ставит драйвер сама; тогда причина пустого списка портов — кабель: некоторые провода заряжают, но не передают. **Хватит ли кабеля от телефона?** Почти никогда: у Uno разъём USB типа B, квадратный, как у старых принтеров. Микро-USB и Type-C от телефонов физически не втыкаются. Кабель A–B стоит копейки, но берите с жилами потолще — тонкие зарядные провода режут стабильность загрузки. **Uno R3 или сразу Mega — что купить новичку?** Uno R3: все самоучители, схемы и разборы написаны под неё, а отладка на меньшем числе пинов дисциплинирует. Mega берут под конкретный проект с кучей датчиков и экранов — как только такой проект у вас на столе, вы это знаете, и советовать тут уже нечего. ## Wokwi или Tinkercad: какой симулятор Arduino выбрать (https://arduin-arsenal.ru/p/wokwi-vs-tinkercad/) Wokwi против Tinkercad лоб в лоб: платы, компоненты, WiFi, библиотеки, аккаунты. Таблица «что умеет каждый», сценарии выбора и грабли переезда между стендами. **Что лучше для новичка: Wokwi или Tinkercad?** Оба англоязычные, поэтому выбор зависит от задачи и возраста. Tinkercad проще по сцене и годится для первого занятия на Uno с базовым набором деталей — но требует аккаунта Autodesk. Wokwi мощнее: больше плат, компонентов и приборов, работа без регистрации. Если английский пока мешает, стартуют на русскоязычном стенде и переходят на любой из двух позже — синтаксис скетчей общий. **Можно ли перенести схему из Tinkercad в Wokwi?** Схему — нет: форматы диаграмм несовместимы, и рисунок придётся собрать заново мышкой, обычно это десять минут на простую цепь. Скетч переносится один в один — язык Arduino у стендов общий. Поэтому порядок переезда такой: копируете код, пересобираете схему, запускаете. **Какой из них умеет ESP32 и WiFi?** Только Wokwi: там симулируются ESP32 с WiFi и Bluetooth, Raspberry Pi Pico, Mega и Nano. Tinkercad ограничен одной Arduino Uno, сети в его палитре нет вовсе. Для беспроводных проектов выбор предопределён: Wokwi или настоящий стенд. **Нужна ли регистрация в Wokwi и Tinkercad?** В Wokwi — нет: гостевой режим позволяет собирать и запускать проекты без аккаунта, вход нужен лишь для сохранения в облаке. В Tinkercad регистрация обязательна: без аккаунта Autodesk схема не сохранится и не переедет на другой компьютер. Школьным кружкам этот момент стоит проверять заранее — фильтры провайдеров иногда режут регистрацию. **А ваш симулятор где в этом сравнении?** Третьей стороной, без претензии на победу в таблице: интерфейс на русском, регистрация не нужна, периферия собирается сама по коду из урока, скетчи исполняются прямо на страницах почти 1200 уроков. Платы — линейка ATmega и ESP32. Потолок — глубина приборов: там честнее Wokwi, зато путь первого месяца короче. ## Тест кнопки в симуляторе Arduino: проверяем без платы (https://arduin-arsenal.ru/p/simulyator-test-knopki/) Проверка кнопки без Arduino: схема с INPUT_PULLUP в браузерном симуляторе, тестовый скетч, пять проверок за десять минут и что покажет только живое железо. **Можно ли проверить кнопку без самой Arduino?** Да: логика кнопки — digitalRead, подтяжка, счёт нажатий — целиком проверяется в браузерном симуляторе. Понадобятся схема из кнопки и провода, скетч с INPUT_PULLUP и открытый монитор порта. На настоящую плату остаются только физические проверки: дребезг, износ контактов и наводки. **Почему кнопка в схеме читается как LOW?** Схема с INPUT_PULLUP тянет вход к 5 В через внутренний резистор, а нажатие замыкает пин напрямую на GND — читается LOW. Логика инвертированная, и это нормально: в скетче сравнивайте с LOW, а не с HIGH, тогда половина путаницы исчезает ещё в симуляторе. **Покажет ли симулятор дребезг контактов?** Нет: дребезг — физика настоящих механических контактов, и в эмуляции его нет, счётчик всегда чистый. На живой плате тот же скетч насчитает 3-7 срабатываний вместо одного. Лечится паузой 20-50 мс или debounce-таймером, поэтому после симулятора короткий тест на плате обязателен. **Какой скетч нужен для теста кнопки?** Минимум такой: pinMode с INPUT_PULLUP, Serial.begin(9600) и в loop() счётчик фронтов — печать строки только в момент перехода от отпущено к нажато. Тогда монитор показывает не поток, а ровно столько строк, сколько было нажатий, и любой сбой виден сразу. **Перенесётся ли тестовый скетч на реальную плату?** Да, без правок: INPUT_PULLUP, digitalRead и Serial — стандартные функции, схема та же, кнопка между пином 2 и GND. Разница всплывёт только в поведении: добавится дребезг настоящих контактов, с которым тестовая delay(10) справляется на черновом уровне. ## FLProg и Arduino: визуальное программирование без кода (https://arduin-arsenal.ru/p/flprog-arduino/) FLProg — русский визуальный конструктор Arduino: блоки FBD и лестничная логика вместо кода, скетч для Arduino IDE. Что умеет, где потолок и чем опасен. **FLProg бесплатный или платный?** Бесплатный: полный функционал без подписок, ключей и платных редакций. Программа распространяется свободно, скачать её можно с официального сайта проекта. Учитывайте, что это десктопное приложение под Windows — в браузере и на планшете оно не работает. **Работает ли FLProg под Linux?** Официально программа выпускается под Windows. Под Linux её запускают через wine, но готовых сборок нет, и учебный процесс на такой связке я бы не строил: грабли wine к Arduino отношения не имеют. Для не-Windows машин честнее браузерный симулятор или код в IDE. **Заменяет ли FLProg Arduino IDE?** Нет: IDE остаётся обязательным звеном — именно она компилирует сгенерированный скетч и заливает его в плату, в ней же живёт монитор порта. FLProg достраивает перед IDE визуальный этап. Без установленной Arduino IDE проект не собрать, поэтому устанавливают обе программы. **Что выбрать новичку: FLProg или сразу код?** Зависит от задачи и сроков. Реле, полив, свет по датчику — FLProg закроет за вечер и без C++. Проекты с прерываниями, тонкими таймингами и сложной логикой быстрее выйти кодом: паутина блоков читается хуже строк. Хороший компромисс — стартовать визуально, а сгенерированный .ino разбирать как учебник и постепенно переходить к правкам руками. **Можно ли проверить проект FLProg без платы?** Внутри самой FLProg — нет: симуляции у конструктора нет, проверка только на живой плате. Обходной манёвр: сгенерированный .ino — обычный скетч, и если он без редких библиотек, его можно вставить в симулятор с Uno — наш стенд или Wokwi. Это проверит логику, но не заменит железный тест с реальными датчиками и реле. ## Эмулятор светофора на Arduino: проверьте логику без платы (https://arduin-arsenal.ru/p/simulyator-svetofora/) Эмулятор светофора на ардуино в браузере: фазы и тайминги на millis(), таблица состояний, кнопка пешехода и типовые промахи — до сборки схемы на макетке. **Можно ли проверить светофор на ардуино без платы?** Да: вся логика светофора — фазы, тайминги, кнопка пешехода — живёт в коде и проверяется в браузерном эмуляторе. Понадобятся скетч на каркасе «флаг плюс millis()» и открытый монитор порта. На плату выносятся только физика: ток ламп, дребезг кнопки, драйверы. **Какие тайминги фаз ставить в учебном светофоре?** Рабочая вилка из урока: зелёный 5000 мс, жёлтый 2000, красный 5000, при запросе пешехода зелёный не короче 2000 мс. Жёлтый короче двух секунд не ставьте: это минимальный запас, за который водитель успевает среагировать. Меняйте числа свободно — автомат переживёт, лишь бы перезапуск таймера жил рядом со сменой состояния. **Почему нельзя совмещать жёлтый с красным?** В настоящем светофоре жёлтый всегда стоит между зелёным и красным и означает «приготовиться к смене». Совмещённые огни ломают этот язык: водитель не различает «готовься» и «стой». В учебном автомате причина структурная: каждое состояние — одно горящее слово, переходы — по таблице, и склейкам там просто нет места. **Чем эмулятор отличается от урока со светофором?** Урок даёт полный разбор: теорию автомата, схему с пинами, скетч и живой сим на своей странице. Эта страница — методика проверки: пять контрольных тестов фаз, расшифровка монитора, типовые промахи и граница «эмулятор видит / только макетка». Порядок такой: методика здесь, сборка — в уроке. **Эмулирует ли браузер нажатие кнопки пешехода?** Да: кнопка в стенде ставит флаг zapros, и автомат отрабатывает укороченный зелёный по всем правилам. Дребезга в эмуляции нет — нажатие всегда чистое, флаг взводится ровно раз. На настоящей кнопке добавьте debounce, иначе одно нажатие будет считаться несколькими. ## Симулятор сервопривода: тест SG90 без платы и без сборки (https://arduin-arsenal.ru/p/simulyator-servo/) Проверка сервопривода SG90 в браузере: угол 0-180°, импульс 544-2400 мкс и sweep-скетч без сборки. Таблица «симулятор видит / только железо» и грабли теста. **Можно ли протестировать сервопривод без Arduino?** Сигнальную часть — да: угол, ширину импульса 544-2400 мкс, кадр 20 мс и поведение sweep-скетча браузерный симулятор показывает честно, потому что это чистая арифметика библиотеки Servo.h. Ток, дёрганье от помех, люфт и нагрев в эмуляции не живут — их проверяют только на живой плате с настоящим питанием. **Что показывает симулятор SG90?** Стенд крутит угол от 0 до 180° и пересчитывает его в ширину импульса: 0° — 544 мкс, 90° — около 1472, 180° — 2400 мкс, кадр повторяется каждые 20 мс. Есть режим Sweep и разбор кадра: видно, что команда — короткая посылка на фоне паузы, а не постоянный уровень. **Какой скетч поставить для первого теста серво?** Классический Sweep: #include , sv.attach(9) в setup() и в loop() два цикла for — от 0 до 180 и обратно с паузой 60 мс на шаг. Ровный ход и чистые края означают, что привод жив; тот же текст на плате правок не требует. **Почему серво дёргается на плате, если в симуляторе ход ровный?** Симулятор не воспроизводит физику: помехи от двигателя, просадку питания на старте, плохой общий GND, изношенные шестерни. Начните с питания — отдельный источник 5-6 В на серво с общим минусом платы, — затем смотрите конденсатор у разъёма и длину проводов; полный разбор ведёт урок про дёрганье серво из блока ссылок. **Насколько точны углы 0 и 180 на реальном приводе?** Условно: у каждой партии свои упоры, фактический размах часто 150-170°, и write(180) может упереться валом в край с перегрузом. Для механизмов ставьте рабочую вилку уже — например, импульсы 1000-2000 мкс — и калибруйте границы конкретного экземпляра. ## Wokwi: импорт своих скетчей и diagram.json (https://arduin-arsenal.ru/p/wokwi-import-sketchej/) Wokwi: вставляем скетч в sketch.ino, разбираем diagram.json, библиотеки из реестра и импорт zip или gist. Чек-лист переезда из Arduino IDE за десять минут. **Как перенести скетч из Arduino IDE в Wokwi?** Проще всего копипастой: создайте проект нужной платы, откройте вкладку sketch.ino и вставьте текст своего скетча целиком, компиляция запускается кнопкой Play. Импорт .zip-проекта и ссылок на gist и GitHub тоже поддерживается — на момент проверки; он требует правильной структуры файлов. **Что такое diagram.json в Wokwi?** Это текстовое описание схемы проекта: поле parts перечисляет платы и модули, connections задаёт связи между выводами с цветами проводов. Файл правится мышкой на диаграмме или напрямую в редакторе; на чужих примерах его удобно читать как шпаргалку по сборке. **Можно ли загрузить в Wokwi свой .zip проект?** Да, импорт архива поддерживается — на момент проверки; названия пунктов интерфейса меняются, ищите Import в меню создания проекта. Переезд не гарантирован: структура папки должна совпадать с ожиданиями сервиса, а каждая библиотека обязана найтись в реестре Wokwi, иначе компиляция упрётся в отсутствующий #include. **Почему проект в Wokwi не собирается после переезда?** Самая частая причина — библиотека вне реестра Wokwi: проверьте все #include. Дальше идут платформенные отличия — скетч под ESP32 на Uno не соберётся — и правка diagram.json руками со сломанной связью. Диагностика компилятора англоязычная, и расшифровка сводится к первым строкам лога. **Перенесётся ли схема из Tinkercad в Wokwi?** Нет: форматы диаграмм несовместимы, схему придётся пересобрать мышкой — на простом стенде это десять минут. Скетч при этом ходит между стендами без правок; подробное сопоставление возможностей двух сервисов ведёт отдельное сравнение Wokwi и Tinkercad. ## Симулятор датчика температуры: проверьте DHT11, DHT22 и DS18B20 без платы (https://arduin-arsenal.ru/p/simulyator-datchika-temperatury/) Симулятор датчика температуры в браузере: живые показания DHT11 и DHT22 на стенде, скетч-проба чтения и таблица «симулятор видит / только железо». **Можно ли проверить DHT11 без ардуино?** Да: логика чтения и порогов проверяется в браузерном симуляторе — датчик на стенде крутится ползунками, скетч печатает в мониторе порта. Разброс, нагрев от руки и срывы контакта показывают только реальная плата и настоящий датчик. **Почему DHT22 опрашивают не чаще раза в 2 секунды?** Датчику нужно время на измерение: у DHT22 интервал между чтениями — 2 секунды, DHT11 хватает одной секунды. Спешка ломает обмен, и библиотека возвращает nan. В модели датчик всегда успевает, поэтому фильтр в скетче нужен всё равно — на плате без него будут пустые строки. **Что симулятор делает с DS18B20?** Движок понимает OneWire и DallasTemperature: requestTemperatures() честно занимает 750 мс — это время конверсии при 12 битах, а getTempC() отдаёт значение ползунка с мелким шумом. Паразитное питание в модели не отличить от нормального, эту тонкость проверяют на сборке. **Почему в браузере фильтр nan не срабатывает?** Потому что модель датчика всегда готова ответить, даже если опрашивать её чаще разрешённого. Это не поломка, а особенность эмуляции: срывы чтения в реальности происходят от спешки, плохого контакта и конденсата. Пишите фильтр сразу — на плате он понадобится. **Насколько можно верить цифрам в симуляторе?** Логике — полностью: интервалы, пороги и состояния исполняются как на плате. Точности — нет: DHT11 гуляет на ±2 °C, DHT22 на ±0,5 °C, а модель показывает ровные значения. Финальную сверку порогов делайте с реальным термометром рядом. ## Эмулятор LCD 1602 онлайн: проверьте текст и I2C без железа (https://arduin-arsenal.ru/p/emulyator-lcd-1602/) Эмулятор LCD 1602 в браузере: сетка 16×2, подсветка и курсор, кириллица и бегущая строка без железа. Таблица «эмулятор видит / только плата» и грабли дисплея. **Можно ли проверить LCD 1602 без ардуино?** Да: текст, раскладка по знакоместам, курсор и подсветка проверяются в браузерном эмуляторе — движок исполняет LiquidCrystal_I2C как на плате. Контраст потенциометром, квадраты от сбоя инициализации и реальная шина I2C остаются железу. **Почему на экране одни квадраты?** Так выглядит незаконченная инициализация: не вызваны lcd.init() и backlight(), либо взят чужой адрес переходника. Обычные адреса — 0x27 и 0x3F. В эмуляторе init() живой, поэтому квадраты там не случатся, — а на сборке их лечит скан шины I2C. **Как вывести русские буквы на LCD 1602?** Два пути: библиотека-перекодировщик (LCD_1602_RUS и родня) или свои глифы через createChar — восемь слотов 5×8. Часть русских букв совпадает с латиницей и печатается напрямую. В браузере проверяйте раскладку, сами пиксели — на плате. **Что эмулятор делает с createChar?** Принимает вызов без возражений, но пиксели на сетке не рисует — это честная граница эмуляции. Позиции, где глиф должен стоять, проверяются печатанием-заглушкой, а сам вид глифа — только на настоящей матрице. **Пойдёт ли скетч с эмулятора на настоящий дисплей?** Да, без правок: тот же адрес переходника, те же init, setCursor и print. На сборке добавятся контраст потенциометром и подтяжки шины I2C — текстовая часть уже выверена в браузере, включая бегущую строку. ## Чем заменить Tinkercad: 4 честные альтернативы для Arduino (https://arduin-arsenal.ru/p/alternativa-tinkercad/) Чем заменить Tinkercad: наш стенд на русском без регистрации, Wokwi, SimulIDE и Proteus — сравнение по семи критериям и сценарии «берите X, если…». **Что выбрать вместо Tinkercad для ребёнка?** Наш стенд: русский интерфейс, без регистрации и установки, четыре платы и стенд с проводами — плюс самоучитель, где каждый следующий шаг расписан. Если английский не барьер, Tinkercad с его обучающими схемами тоже рабочий вариант. **Есть ли Tinkercad на русском?** Нет, интерфейс Tinkercad существует только в английском виде, и русской локализации в планах не видно. Обходные пути и сравнение с русскоязычным стендом разобраны в лендинге про Tinkercad на русском — там же, где и ограничения аккаунта Autodesk. **Какой симулятор ардуино работает без интернета?** SimulIDE: офлайн-приложение, лёгкое даже для слабого ПК, плата подгружается hex-файлом из Arduino IDE. Proteus тоже работает офлайн, но он платный и требователен к железу. Браузерные инструменты без интернета не запускаются. **Wokwi лучше Tinkercad?** Зависит от задачи: Wokwi гибче, плат больше, диаграмма схемы хранится текстом; Tinkercad мягче ведёт новичка и бесплатнее для школьных аккаунтов. Прямое сопоставление обеих сторон — с таблицей и сценариями выбора — лежит в отдельном лендинге. **Можно ли готовиться к макетке на симуляторе?** Да, и это лучший порядок: логика, пороги и раскладка экранов проверяются в браузере, затем та же схема собирается на реальной макетке. За экраном останутся ток, шум, дребезг и нагрев — их проверяет только железо. ## Эмулятор RGB-светодиода онлайн: подберите цвета без платы (https://arduin-arsenal.ru/p/emulyator-rgb-svetodioda/) Эмулятор RGB-светодиода в браузере: смешение трёх каналов 0-255, палитра оттенков и «дыхание» до пайки. Таблица «симулятор видит / только железо». **Можно ли проверить RGB-светодиод без ардуино?** Да: смешение каналов, палитра, пороги и эффекты проверяются в браузерном эмуляторе — стенд рисует оттенок из трёх кодов 0-255 и печатает их рядом. Ток канала, перепутанный анод с катодом и неравномерность яркости показывают только реальная сборка и кристаллы. **Почему цвета в симуляторе и на плате разные?** Скорее всего, у вашего экземпляра общий анод: канал включается нулём, а гаснет при 255, и лечится это инверсией 255 - x в функции setColor. Стенд рисует прямую логику общего катода и инверсию не моделирует — поэтому «наоборот» в браузере и «на месте» на плате это одна и та же строка кода. **Какие пины брать под RGB на Uno?** Только пины с ШИМ: на Uno это 3, 5, 6, 9, 10 и 11 — они отмечены тильдой. Три канала занимают три таких пина, классический набор — 9, 10 и 11. Пин без ШИМ превратит плавные переходы в мигание: analogWrite на нём умеет только 0 и 255. **Сколько резисторов нужно RGB-светодиоду?** Три, по одному на каждый цветовой канал, обычно 220-330 Ом; общий провод остаётся без резистора. Прямое падение у красного кристалла около 2 В, у зелёного и синего около 3 В, поэтому каналы светят не одинаково — не пытайтесь выровнять их одним общим резистором. **Подойдёт ли палитра из симулятора для ленты WS2812?** Да, как справочник оттенков: коды каналов 0-255 у всех RGB-источников одной природы, тройка из лаборатории пишется в ленту через FastLED без пересчётов. Только не забывайте про розоватый белый дешёвых кристаллов: финальную сверку тёплых оттенков делайте на железе, а приёмы дыхания для ленты разобраны в уроке про FastLED. ## Wokwi: симулятор Raspberry Pi Pico — RP2040 в браузере (https://arduin-arsenal.ru/p/wokwi-raspberry-pi-pico/) Wokwi для Raspberry Pi Pico: RP2040 в браузере, MicroPython и C/C++, что переедет от ардуинщика без переучивания и что придётся осваивать заново. **Можно ли запустить ардуино-скетч на Pico в Wokwi?** Да, на момент проверки Wokwi собирает ардуино-скетчи для Pico через ядро arduino-pico: setup()/loop(), digitalWrite и Serial на месте. Библиотеки проверяйте пробным запуском — часть ардуино-классики ещё не знает про RP2040. **Чем Raspberry Pi Pico отличается от Uno?** Чипом и уровнями: RP2040 с двумя ядрами на 133 МГц, 264 КБ ОЗУ и 2 МБ флеша против 8-битного AVR на 16 МГц с 2 КБ ОЗУ. Логика 3,3 В без толерантности к 5 В, ADC 12-битный, ШИМ почти на любом пине, прошивка файлом через BOOTSEL. **Какой язык выбрать для Pico — MicroPython или C/C++?** Для знакомства — MicroPython: REPL отвечает сразу, цикл правки короткий. Для тяжёлых проектов и ардуино-привычек — C/C++ через Arduino-ядро: знакомые setup()/loop() и библиотеки. Оба пути Wokwi держит в браузере. **Поддерживает ли Wokwi Pico W с Wi-Fi?** На момент проверки — да, плата Pico W в каталоге есть, и сетевые сценарии в браузере моделируются упрощённо. Реальный роутер, пинг и антенну покажет только железо — как и у любого симулятора сети. **Переживёт ли мой скетч переезд с Uno на Pico?** Голова проекта — да: пороги, расписания, автоматы. Обвязку перепроверьте: GP-нумерация вместо номеров Uno, аналоговые шкалы другой ширины, входы боятся 5 В. Порядок переезда скетчей и diagram.json разобран в отдельном лендинге про импорт. ## Симулятор зуммера: проверьте tone() и мелодии без пьезо (https://arduin-arsenal.ru/p/simulyator-zummera-onlajn/) Симулятор зуммера в браузере: tone() и noTone() из скетча, мелодия по массиву частот и сирена до покупки пьезо. Таблица «симулятор слышит / только железо». **Можно ли проверить tone() без ардуино и пьезо?** Да: браузерный симулятор исполняет tone() и noTone() как на плате — зуммер на стенде гудит нужной нотой, ритм и мелодии слышны через кнопку динамика в панели. Громкость, резонанс корпуса и разницу активного и пассивного излучателя покажет только железо. **Как включить звук зуммера в симуляторе?** Нажмите кнопку с иконкой динамика в панели симулятора: звук по умолчанию выключен. Зуммер при этом ставится на стенд сам — по первому вызову tone() в скетче, пин берётся из кода. **Какие частоты умеет tone() на Uno?** От десятков герц до 65535 Гц — частота хранится в 16-битном целом без знака. Ухо слышит диапазон примерно 20 Гц - 20 кГц, пьезокерамика не звучит ниже 50 Гц, а резонанс корпуса обычно лежит на 2-4 кГц — там излучатель громче всего. **Почему в симуляторе два зуммера звучат вместе, а на плате нет?** Так и задумано: у звукового таймера Uno один, tone() умеет ровно одну ноту за раз — второй вызов снимает первый. Модель стенда честно оговаривает это как границу: браузер держит параллельные зуммеры, плата — нет, поэтому аккорды проверяйте на железе. **Может ли зуммер сломать ШИМ на других пинах?** На Uno — да, косвенно: tone() занимает Timer2, и пока нота звучит, аппаратный ШИМ на пинах 3 и 11 молчит; после noTone() и свежего analogWrite всё оживает. В симуляторе конфликт не воспроизводится — карта таймеров и лечения разобраны в уроке про tone и таймеры. ## Симулятор потенциометра онлайн: ползунок 0-1023 без платы (https://arduin-arsenal.ru/p/simulyator-potenciometra/) Симулятор потенциометра в браузере: ползунок 0-1023 на аналоговом входе, проверка map() и порогов без платы. Таблица «симулятор видит / только железо». **Можно ли проверить потенциометр без ардуино?** Да: браузерный движок исполняет analogRead() как на плате — ползунок отдаёт 0-1023, скетч считает map() и пороги, монитор печатает значения. Шум живого ADC, подрагивание ручки и износ дорожек покажет только настоящая сборка. **Почему в симуляторе значения ровные, а на плате дрожат?** Модель стенда дискретная: ползунок — число без шума. Живой ADC на Uno дрожит на ±2 единицы, дорожки потенциометра добавляют свою рябь. Поэтому пороги, найденные в браузере, на плате сверяют Serial.print и при желании глушат фильтром среднего. **Какие пины занимает потенциометр?** Один аналоговый вход: A0-A5 на Uno и Nano, у Mega их больше. Деталь в каталоге стенда ставится только на аналоговые входы — цифровые пины для analogRead() не подходят в принципе. **Как пересчитать 0-1023 в привычные 0-255?** map(x, 0, 1023, 0, 255) — стандартный ход под analogWrite(). Пересчёт целочисленный: на нижних значениях часть единиц съедается, тонкости разобраны в уроке про map() и приведение типов. Для нелинейных диммеров берите разбор нелинейного map(). **Ползунок «Датчик на входе» — это что?** Автодеталь движка: когда скетч читает analogRead() с пина, а ручной потенциометр на него не ставили, движок сам вешает на вход ползунок 0-1023. Для быстрой пробы удобнее него ничего нет; хочется сценария с деталью на макетке — добавьте потенциометр из каталога. ## Эмулятор фоторезистора онлайн: LDR на стенде без платы (https://arduin-arsenal.ru/p/emulyator-fotorezistora/) Эмулятор фоторезистора в браузере: ползунок света 0-100 %, показания analogRead 0-1023 и пороги «темно/светло» для ночника. Таблица «симулятор / железо». **Можно ли проверить фоторезистор без ардуино?** Да: ползунок света 0-100 % на стенде питает analogRead() как живая деталь — пороги, гистерезис и ветки ночника проверяются в браузере. Нелинейность шкалы, влияние номинала делителя и люксы покажет только настоящая сборка. **Почему в симуляторе таблица линейная, а на плате нет?** Модель движка переводит проценты света в число по прямой формуле, без физики фоторезистора. Реальная LDR-шкала нелинейна и зависит от резистора-делителя: свой «свет → значение» снимают Serial.print на плате, а симулятор отвечает за логику порогов. **Какой порог ставить для ночника?** Свой. В браузере — по таблице стенда: ползунок вниз, смотрите, где скетч щёлкнул. На плате — по Serial.print своего экземпляра: число «темно» у окна и в шкафу разное. Стартовый ориентир 300 проверьте на своём делителе. **Чем эмулятор LDR отличается от датчика BH1750?** Целями. LDR в симуляторе — про логику порогов «темно/светло», BH1750 — про люксы: он отдаёт освещённость готовым числом и калибровки не требует. Для ночных светильников хватает LDR, для замеров света — цифровой датчик. **Почему у ползунка 0-100 %, а analogRead отдаёт 0-1023?** Ползунок меряет свет в процентах, плате нужно число: каждые 10 % — примерно 102 единицы, 40 % → 409. Пересчёт делает движок; в скетче вы всегда видите готовые 0-1023, как с настоящей детали. ## Wokwi: анатомия diagram.json — читаем файл схемы руками (https://arduin-arsenal.ru/p/wokwi-diagram-json-anatomiya/) Анатомия diagram.json в Wokwi: поля version, author, editor, parts, connections, формат связей и грабли ручной правки. Когда файлом быстрее мыши. **Что такое diagram.json в Wokwi?** Текстовое описание схемы проекта: пять полей верхнего уровня (version, author, editor, parts, connections), а у каждой детали — type, id и attrs. Редактор читает файл и рисует диаграмму; править его можно мышкой на диаграмме или руками в редакторе. **Почему Wokwi не принимает мой diagram.json?** Почти всегда файл перестал быть валидным JSON: лишняя запятая, кавычки не те, задвоенный id. Прогоните текст через любой JSON-валидатор — он укажет строку. Дальше проверьте имена: type только из каталога Wokwi, пины — те, что реально есть у детали. **Где брать имена типов деталей?** В diagram.json готовых примеров и в официальной документации Wokwi: все имена на момент проверки начинаются с wokwi-. Свойства детали (attrs) тоже проще подсмотреть у работающего примера: поменяли цвет светодиода мышкой — посмотрели, что изменилось в файле. **Что значит четвёртый элемент в строке connections?** Служебный массив опций связи: сервис записывает туда свои пометки, в руках он обычно пустой — [ "uno:13", "led1:A", "red", [] ]. Первые три элемента — источник, приёмник и цвет провода. **Когда править файлом быстрее, чем мышкой?** Всегда, когда правок много или они одинаковые: переименование id, клонирование узлов, перенос схемы, аудит связей, git-история. Одиночную деталь проще поставить мышкой — файл для этого не нужен. ## Эмулятор сервопривода онлайн: проверка Servo.h-скетча без платы (https://arduin-arsenal.ru/p/emulyator-servoprivoda/) Эмулятор сервопривода в браузере: угол 0-180, плавное качание, потенциометр как ручка и крайние положения без питания. Таблица «симулятор / железо». **Можно ли проверить скетч с сервоприводом без ардуино?** Да: движок исполняет attach(), write(), writeMicroseconds() и read() построчно — игла на стенде встаёт в тот угол, что заказал скетч. Качание, потенциометр-ручка и крайние положения проверяются без платы. Ток, гудение и нагрев живого привода в браузере не живут. **Какой угол у серво сразу после attach()?** 90°: движок стартует с середины шкалы, как библиотека Servo.h на плате. Нужен другой старт — первым же write() после attach(). Ноль сам по себе не поставится. **Почему в симуляторе рог не дрожит и не гудит?** Модель знает угол, а не привод: джиттер, гудение в покое и нагрев при удержании — физика железа, в эмуляцию они не входят. Скрипящее и греющееся серво — это уже макетка: туда выносят питание и detach() в простое. **Движок поймёт analogWrite() вместо Servo.h?** Поймёт: без объекта Servo угол считается из ШИМ — 255 даёт 180°, 127 около 90°, 0 даёт 0°. Но на плате так делать не стоит: серво ждёт импульсы 50 Гц, а не быстрый ШИМ. Фолбэк придуман для скетчей без библиотеки, не для железа. **Чем этот стенд отличается от теста SG90?** Там проверяют деталь: слайдер угла, арифметика импульса 544-2400 мкс, кадр 20 мс. Здесь проверяют ваш скетч: движок исполняет код, а игла показывает результат каждой строки. Порядок такой: логика — здесь, привод — в тесте, питание — на макетке. ## Симулятор семисегментного индикатора: цифра из seg7 в браузере (https://arduin-arsenal.ru/p/simulyator-semisegmentnogo-indikatora/) Симулятор семисегментного индикатора в браузере: сегменты a-g от digitalWrite, общий анод инверсией, рядом TM1637. Таблица «модель / железо». **Можно ли проверить семисегментный индикатор без ардуино?** Да: деталь в каталоге стенда принимает HIGH и LOW на семь пинов a-g так же, как живой индикатор принимает уровни. Собирайте любые цифры и буквы, проверяйте таблицу сегментов и порядок пинов — без макетки, резисторов и пайки. **Почему сегменты в симуляторе не тускнеют?** Модель логическая: сегмент горит или погашен, без полутонов. Физику — тусклые цифры, когда ток делится между зажжёнными сегментами, — в эмуляцию не закладывали: резистор на сегмент и реальную яркость проверяют на плате. **Как зажечь цифру 4?** Сегменты b, c, f, g — в байте это 0b01100110. Разложите байт по пинам a-g через bitRead и digitalWrite — на стенде загорятся ровно четыре сегмента. Вся таблица 0-9 есть в пробном скетче выше. **Где в симуляторе двоеточие?** У голого семисегментника его нет — четыре разряда и двоеточие живут в TM1637, отдельной детали каталога. Заявите в скетче TM1637Display — дисплей встанет на стенд, а 0x40 в showNumberDecEx зажжёт двоеточие. **Общий анод — что менять в коде?** Уровни: анод питает сегменты, значит зажигание — LOW, гашение — HIGH. В коде это инверсия байта, и в браузере она работает так же, как на плате: схема та же, таблица перевёрнута. Смоделируйте оба варианта и сравните картинки. ## Wokwi: как добавить библиотеку — менеджер, зависимости и обходы (https://arduin-arsenal.ru/p/wokwi-dobavit-biblioteku/) Как добавить библиотеку в Wokwi: менеджер в редакторе, список зависимостей в проекте и обходы, если библиотеки нет. Оговорки «на момент проверки». **Как добавить библиотеку в Wokwi?** Через менеджер библиотек в редакторе: найдите библиотеку по имени из #include и поставьте кликом — список зависимостей сохранится вместе с проектом. Второй путь — файл со списком библиотек в самом проекте; оба описаны выше с оговорками, формат живой. **Что делать, если библиотеки нет в каталоге Wokwi?** Сначала проверьте имя: поиск идёт по реестру, и лишний дефис ломает его. Дальше по тяжести: простые вызовы переписываются на голый API или прячутся в свой .h-файл рядом со скетчем; серьёзные зависимости переезжают на локальную IDE — там zip с GitHub ставится всегда. **Правда ли, что библиотеки можно прописывать в diagram.json?** В старых проектах встречались поля зависимостей прямо в диаграмме, но формат менялся, и на момент проверки основной путь — менеджер и список в файле проекта. Если редактор ругается на такое поле, уберите его и ставьте библиотеку через менеджер. **Чем библиотека в Wokwi отличается от локальной?** Местом жизни: в облаке компилятор берёт исходник из реестра Wokwi, и версии выбираются в менеджере; локально библиотека — ваши файлы в sketchbook, их можно править, откатывать и брать zip'ом с GitHub. Строка #include при этом одна и та же. **Все ли ардуино-библиотеки работают в Wokwi?** Ходовые — Servo, LiquidCrystal, FastLED, IRremote — давно в реестре; железозависимая экзотика с прямыми обращениями к регистрам может не собраться. Проверка одна: минимальный скетч с одним вызовом из библиотеки — минута, а не вечер. ## Симулятор MPU6050 онлайн: угол, акселерометр и гироскоп без платы (https://arduin-arsenal.ru/p/simulyator-mpu6050/) Симулятор MPU6050 в браузере: наклон платки, угол по X и Y, сырые ax/ay/az. Гироскоп и детектор тряски без платы. Таблица «модель / железо». **Можно ли проверить скетч MPU6050 без ардуино?** Да: модуль уже на стенде, тяните его мышью — getAngleX/Y и ax/ay/az возвращают угол и сырые int16 как живой датчик. Детектор тряски, пороги и оси проверяются без пайки. Дрейф гироскопа и калибровка офсетов в браузере не живут — это физика железа. **Какой адрес у MPU6050 в симуляторе?** 0x68 — стандартный при AD0 на земле. На живой плате перемычка AD0 на +3V3 меняет адрес на 0x69; в браузере один адрес, так что скетчи с MPU6050(0x69) подключаются к тому же экземпляру. Сканируйте шину на плате — и повторите адрес в коде. **Почему в симуляторе гироскоп не дрейфует?** Движок хранит угол, а не сырой дрейф: gx/gy/gz в модели нули, поэтому комплементарный фильтр, который лечит дрейф, в браузере работает «по учебнику» — без цифр для подгонки. На живом модуле дрейф 1-3 градуса в минуту — калибруйте офсеты и фильтруйте. **Зачем 16384 в формуле пересчёта ax?** 16384 LSB это 1g при диапазоне ±2g — стандартные настройки MPU6050. Скетч (float)ax/16384.0 даёт ускорение в g, и порог 1,5g ловит тряску, а не притяжение. Если переключить диапазон на ±4g, делитель будет 8192 — в браузере тот же множитель, что в библиотеке. **Можно ли проверить комплементарный фильтр в браузере?** Логику — да: фильтр с весами ускорения и гироскопа работает по тем же формулам. Численные константы под живой датчик — нет: без дрейфа не настроить вес гироскопа. Используйте сим для структуры кода, а финальные веса подгоняйте на плате. ## Симулятор BMP280 онлайн: давление, высота и температура без модуля (https://arduin-arsenal.ru/p/simulyator-bmp280/) Симулятор BMP280 в браузере: давление в Па, температура, пересчёт высоты. Двигайте ползунки — readPressure и readAltitude отвечают. Таблица границ. **Можно ли проверить скетч BMP280 без ардуино?** Да: модуль уже на стенде, двигайте ползунки давления и температуры — readPressure, readTemperature и readAltitude возвращают значения как живой датчик. Адрес 0x76, формула высоты и шум ±0,2 °C совпадают с библиотекой Adafruit. Калибровка по эталону и влажность BME280 в браузере не живут — это разъём с живым железом. **Почему высота в браузере уходит в минус?** При давлении выше 1013.25 гПа формула readAltitude даёт отрицательную высоту: вы «ниже уровня моря» по стандарту. Реальная высота считается от опорного давления в вашем регионе, а не от стандарта — подставляйте в readAltitude(seaLevel) давление из эталона. **Чем BMP280 отличается от BME280 в симуляторе?** У BMP280 только температура и давление, у BME280 — ещё и влажность через readHumidity(). Скетч BME280 в браузере без readHumidity работает как BMP280, с readHumidity — падает: метода нет в движке. Сценарий выбора «переплатить за влажность или нет» — в отдельном уроке из блока ссылок. **Какой адрес BMP280 по умолчанию?** 0x76 — при SDO на земле. Перемычка SDO на +3V3 меняет адрес на 0x77. В браузере один адрес, и begin(0x76) печатает «[BMP280 найден по адресу 0x76]» — как живой сканер шины. Сверяйте адрес в коде с перемычкой на модуле. **Можно ли в симуляторе снять калибровку давления?** Нет: модель без систематического смещения, и калибровочные константы браузеру неоткуда взять. На живом датчике смещение ±2 гПа снимают сравнением с эталоном в ясный день — в симе это уже сделано, так что число на экране совпадает с вашим ползунком. ## Симулятор матрицы 8x8 MAX7219: проверка скетча без пайки (https://arduin-arsenal.ru/p/simulyator-max7219-matrica/) Симулятор матрицы 8x8 на MAX7219: рисуйте пиксели в браузере, проверяйте скетч на Spi-вызовах. Границы модели и железа — в таблице. Без платы. **Можно ли запустить матрицу MAX7219 в симуляторе?** Частично: скетч с LedControl компилируется в основном симуляторе, и Serial печатает байты, но сама матрица не отрисовывается — в каталоге деталей MAX7219 пока нет. Проверяйте логику, биты и шрифт в браузере, а пиксели и ток — на живом модуле. **Чем MAX7219 отличается от 74HC595?** MAX7219 — специализированный драйвер матриц и 7-сегментников: внутри своя память, ШИМ-димминг и каскад. 74HC595 — простой сдвиговый регистр: биты уходят по SPI, состояние держится на выходе, без димминга. Родня по SPI — [урок про 74HC595](/lesson/prodvinutye/prodvinutye-spi-74hc595-bystree/) показывает битовый поток. **Какой провод куда подключать на MAX7219?** Три логических: DIN, CLK, CS — на цифровые пины ардуино, номера задаёте в LedControl(din, clk, cs, n). Питание: VCC на 5V, GND на землю. Полная схема с конденсатором по питанию — в [уроке про SPI-MAX7219](/lesson/prodvinutye/prodvinutye-spi-max7219-matrica/). **Можно ли проверить каскад матриц?** Логически — да: LedControl(din, clk, cs, 4) держит четыре модуля, setLed(addr, ...) адресует каждый. Визуально в симуляторе не отрисуется — нужны живые модули и питание 5V, иначе первый модуль гаснет от пика тока. **Как проверить шрифт 5x7 без матрицы?** В [основном симуляторе](/simulator/) — через Serial: печатаете каждый байт столбца в монитор, сверяете биты с таблицей. Для «А» это 0b01111110 и три 0b10001000. Опечатка в шрифте видна за минуту, без матрицы. ## Симулятор RFID RC522: проверка скетча считывателя карт без модуля (https://arduin-arsenal.ru/p/simulyator-rfid-rc522/) Симулятор RFID-считывателя RC522: проверка скетча на SPI, чтение UID карточки и ключа. Границы: что эмулируется, что требует живого модуля и платы. **Можно ли проверить скетч RC522 без модуля?** Логику — да: скетч с MFRC522 компилируется в основном симуляторе, и монитор порта подсказывает, в каком вызове код «застрянет». Чтение UID из живой карты в браузере не работает — нет RFID-чипа. Проверяйте код в симе, пиксели и UID — на плате. **Почему в симуляторе PICC_ReadCardSerial всегда false?** В каталоге деталей RC522 нет, и скетч исполняется без физической карты: PICC_ReadCardSerial возвращает false, скетч выходит из loop без печати. Это и есть тест — если до этого вызова код работает, проблема в проводах, а не в логике. **Какой пин для SDA/SS на Uno?** D10 — стандартный SS для SPI-мастера на Uno. На Mega — D53. RST — обычно D9, но можно любой цифровой. Полная распиновка с примером — в уроке про SPI-MAX7219 из блока ссылок. **Какой UID у стандартной синей карты MIFARE Classic?** 4 байта: например, 0xDE 0xAD 0xBE 0xEF. У новых MIFARE Ultralight — 7 байт, и mfrc522.uid.size равен 7. Считывайте UID живой карты и подставляйте в эталон — его невозможно угадать. **Можно ли писать в сектор карты в симуляторе?** Нет: аутентификация по ключу A/B, запись и чтение блоков в браузере не поддержаны. Это тема для живого модуля — [урок про I2C-расширитель PCF8574](/p/simulyator-pcf8574) рядом показывает, как устроены протоколы с шиной и адресами в браузере. ## Симулятор шагового двигателя 28BYJ-48: проверка скетча без мотора (https://arduin-arsenal.ru/p/simulyator-28byj-48/) Симулятор шагового двигателя 28BYJ-48: проверка скетча через stepper-lab, редукция 1/64, 8 фаз, ULN2003. Что эмулируется, что — только живой мотор. **Можно ли проверить скетч 28BYJ-48 без мотора?** Да, и с визуализацией: скетч с Stepper.h исполняется в основном симуляторе, шаговик «Шаговый 28BYJ-48 + ULN2003» ставится кликом из палитры «Макетка», стрелка на карточке повторяет обороты вала, монитор порта печатает «CW/CCW». Момент, ток и нагрев в браузере не видны — их проверяют на живом моторе. **Почему 4096 шагов на оборот, а не 200?** У 28BYJ-48 редуктор 1/64, а ротор делает 64 шага на оборот в полном шаге. Полушаг даёт 64 × 64 × 2 = 4096 шагов на оборот вала. Скетч под Nema17 с 200 шагами даёт 20 оборотов вала за один motor.step(200) — сверяйте SHAGOV_NA_OBOROT. **Полный шаг или полушаг — что выбрать?** Полный шаг — две катушки одновременно, момент больше, шаг вдвое грубее. Полушаг — между фазами вставлены одиночные катушки, момент падает на 30%, шаг вдвое мельче, плавнее. Для точного позиционирования — полушаг, для тяги — полный шаг. **Почему 28BYJ-48 не подходит под ЧПУ?** Момент 7 Н·см — маленький, редуктор добавляет люфт 1-2°, и при нагрузке вал пропускает шаги. Для ЧПУ берут Nema17 с моментом 40 Н·см и прямым валом — [урок про выбор](/lesson/stepper/stepper-byj48-protiv-nema17/) сравнивает моторы в таблице. **Можно ли в симуляторе проверить AccelStepper?** Нет: библиотека компилируется, но рантайм её не исполняет — первый вызов метода даёт «Неизвестное имя». Разгоны и трапеция проверяются только на живой плате; в браузере доступен Stepper.h с постоянной скоростью. На плате [AccelStepper](/p/accelstepper-podklyuchenie) к этому мотору подключается так же, как и Stepper.h — на D8-D11. ## Симулятор PCF8574: расширитель I2C портов без пайки (https://arduin-arsenal.ru/p/simulyator-pcf8574/) Симулятор PCF8574: расширитель I2C на 8 линий. Проверка скетча Wire.beginTransmission + write. Границы модели — таблица «модель / железо» снизу. **Можно ли проверить скетч PCF8574 без модуля?** Логику — да: скетч с Wire.begin/endTransmission компилируется в основном симуляторе, и монитор порта печатает записанные байты. Сам PCF8574 в браузере не отзывается: в каталоге деталей его нет. Проверяйте код в симе, адрес и светодиоды — на живом модуле. **Какой адрес у PCF8574 по умолчанию?** 0x20 у PCF8574 (с A0-A2 на земле) и 0x38 у PCF8574A. Перемычки A0-A2 на +3V3 добавляют к адресу 1, 2, 4 — до 0x27 и 0x3F соответственно. Запустите I2C-сканер на плате, чтобы найти точный адрес вашего модуля. **Почему Wire.endTransmission возвращает 2?** Код 2 — NACK на адрес: модуль не ответил. Причины: неверный адрес, нет питания, перепутаны SDA/SCL, нет подтяжек. На плате лечится сканером; в браузере модуля нет, и endTransmission вернёт код как на живой шине без устройства. **Можно ли подключить LCD и PCF8574 на одну шину?** Да, если адреса разные. Типичный LCD I2C backpack — 0x27, и PCF8574 с A0-A2 на земле тоже 0x20, не 0x27 — конфликт маловероятен. Если совпал, перемычкой на A0-A2 меняют адрес PCF8574 или ставят [TCA9548A мультиплексор](/lesson/wire-i2c/wire-i2c-tca9548a-multipleksor/). **Сколько PCF8574 можно поставить на одну шину?** До восьми модулей PCF8574 (адреса 0x20-0x27) и до восьми PCF8574A (0x38-0x3F) — итого 16 модулей × 8 портов = 128 дополнительных линий ввода-вывода на одной шине I2C. Сильные подтяжки и длина провода до 30 см — обязательно. ## Симулятор Arduino Leonardo: HID-клавиатура и USB без платы (https://arduin-arsenal.ru/p/simulyator-arduino-leonardo/) Симулятор Arduino Leonardo: проверка скетчей под ATmega32U4 — HID-клавиатура, Serial, USB. Что эмулируется, что требует живой платы Leonardo. **Можно ли запустить скетч для Leonardo в симуляторе?** Да, целиком: Leonardo теперь выбирается в списке плат симулятора. Логика (digitalRead, analogRead, Serial) исполняется как есть, а вызовы Keyboard/Mouse печатаются в Serial с пометкой «HID:». Реальные нажатия в окнах ПК — только на живой плате. **Чем Leonardo отличается от Micro?** Micro — тот же чип ATmega32U4 в меньшем формате: пинов меньше, логики HID-клавиатуры столько же. Скетчи совместимы на 100%. Выбирайте по формату: Micro для портативных макро-клавиатур, Leonardo для стационарных проектов с макеткой. **Почему IDE не видит Leonardo при загрузке?** При прошивке Leonardo перезапускает USB-стек, и порт пропадает на 8 секунд. Решения: (1) нажать Reset перед заливкой, (2) выбрать плату «Arduino Micro» в меню Tools, (3) в Preferences включить «Show verbose output during upload» — увидите, где IDE ждёт порт. **Можно ли притвориться мышью на Leonardo?** Да: Mouse.begin(), Mouse.move(x, y), Mouse.click(), Mouse.press(), Mouse.release() — всё в библиотеке Mouse.h. Сначала проверяйте с минимальными значениями (Mouse.move(1, 0)) и пишите в Serial — иначе курсор уходит в угол экрана, и вы не понимаете, кто его двигает. **Зачем Serial1 на Leonardo?** Serial — это CDC-USB для обмена с компьютером, Serial1 — аппаратный UART на D0/D1 для модулей: Bluetooth HC-05, GPS, второй ардуины. На Uno Serial это и USB, и D0/D1 — нет разделения. У Leonardo два независимых канала, и перепутать их легко. ## ESP32-CAM: симулятор скетчей в браузере — что проверять без камеры (https://arduin-arsenal.ru/p/esp32-cam-simulyator/) Симулятор скетчей под ESP32-CAM: WiFi, HTTP-сервер, детектор движения — что можно проверить в браузере, а что требует живой камеры. Таблица границ. **Можно ли проверить скетч ESP32-CAM без камеры?** Частично: WiFi, HTTP-сервер, HTTPClient, MQTT-телеметрия работают в основном симуляторе как на ESP32. Захват кадра с OV2640, PSRAM, SD-запись — не поддержаны, их проверяют на живой плате. Стратегия: сетевую часть в браузере, камеру — на плате. **Зачем GPIO0 замыкать на землю при прошивке?** GPIO0 выбирает режим загрузки: при замыкании на землю — режим bootloader (прошивка), без замыкания — рабочий режим. После прошивки перемычку снимают. На платах с кнопкой RESET и кнопкой BOOT процедура: держать BOOT, нажать RESET, отпустить RESET, отпустить BOOT. **Почему ESP32-CAM уходит в brownout?** Камера при захвате берёт пиковый ток 300-400 мА, и 3V3-пин программатора проседает. Лечится внешним 5V-блоком питания и конденсатором 470 мкФ по 5V. Иногда помогает уменьшение frame_size до SVGA в скетче. **Можно ли в симуляторе проверить поток JPEG?** Нет: захват кадра через esp_camera.h в браузере не выполнится — нет камеры в каталоге деталей. Логику HTTP-сервера, который отдаёт JPEG, можно прогнать с заглушкой-строкой вместо кадра, а реальный поток — на живой плате с программатором. **Какой программатор нужен для ESP32-CAM?** UART-USB на 3V3: FTDI FT232RL, CH340 (3V3-вариант), CP2102. Сама плата не имеет USB-разъёма. Подключение: 5V — на 5V-пин программатора, GND — на GND, TX программатора — на RX платы, RX программатора — на TX платы, и перемычка GPIO0 — GND при прошивке. ## MicroPython симулятор онлайн: проверка кода для ESP32 и Pico (https://arduin-arsenal.ru/p/micropython-simulyator/) MicroPython симулятор онлайн: где писать и проверять код для ESP32 и Raspberry Pi Pico без платы. Границы эмуляторов и живого железа — в таблице. **Можно ли запустить MicroPython в вашем симуляторе?** Да: режим MicroPython включается кнопкой над редактором — machine.Pin, PWM, ADC и time.sleep исполняются на стенде, примеры MP: Blink и MP: Кнопка в списке. Подробности — в [лендинге про MicroPython-симулятор](/p/micropython-simulyator-onlain). Для полноценного REPL по USB нужна живая плата; внешние среды сравнены в таблице выше. **Что лучше для новичка — MicroPython или Arduino C++?** MicroPython короче и быстрее на старте: REPL без компиляции, Python-синтаксис без include. Arduino C++ строже, но даёт доступ к регистрам, таймерам и библиотекам Adafruit — половина уроков нашего самоучителя не переводится на Python напрямую. Для прототипа — Python, для продукта — C++. **Какую плату выбрать под MicroPython?** ESP32 с 4 МБ флеша — оптимально: хватает и прошивку, и скрипты. Raspberry Pi Pico (RP2040) — для UK-учебной программы. ESP8266 с 1 МБ — тесно, прошивка MicroPython влезает, но скриптов мало. **Чем MicroPython REPL удобнее Arduino Serial?** REPL — интерактивный Python в терминале: пишешь `Pin(2, Pin.OUT).value(1)` — светодиод горит сразу, без компиляции. Arduino Serial — односторонний текстовый вывод из скетча: вы печатаете в него из loop(), но не можете выполнить команду на лету. REPL — для отладки, Serial — для лога. **Можно ли на MicroPython писать под Arduino Uno?** Нет: ATmega328P на 2 КБ SRAM и 32 КБ флеша — мало для MicroPython. Минимальные требования — 256 КБ флеша и 16 КБ SRAM, и это ATmega2560 или SAMD21. Реально — ESP32, RP2040, ESP8266. ## Blockly Arduino симулятор онлайн: визуальное программирование в браузере (https://arduin-arsenal.ru/p/blockly-arduino-simulyator/) Blockly Arduino симулятор: визуальные блоки Ardublockly, mBlock и FLProg — что выбрать под школу и новичка. Границы блочного программирования. **Можно ли запустить блочное программирование в вашем симуляторе?** Нет: наш симулятор — текстовый C++ с подсветкой синтаксиса. Блочные среды (Ardublockly, mBlock, FLProg, Tinkercad) — внешние, у каждой своя графика. Сравнение и таблица — выше. Для школы FLProg и Tinkercad — оптимальный старт. **Что лучше для школы — FLProg или Ardublockly?** FLProg — для российской школы: поддержка Ladder/FBD, генерация C++, документация на русском. Ardublockly — для международной: блоки Google Blockly, английский интерфейс, базовый GPIO. Сравнение — в нашем лендинге про FLProg. **Когда переходить с блоков на C++?** Когда в проекте входит WiFi, MQTT, прерывания, регистры или своя библиотека — блоки для них отсутствуют. На практике это 5-7 урок в школе: мигалка, кнопка, потенциометр, серво — на блоках; дальше — C++. Наш [самоучитель](/) — точка перехода. **Можно ли в Tinkercad загрузить свою библиотеку?** Нет: Tinkercad поддерживает только встроенный набор блоков и компонентов. Для собственных .h-файлов — стандартный Arduino IDE с библиотекой из .zip. Сравнение Tinkercad и Wokwi — в лендинге про альтернативы Tinkercad из блока ссылок. **Как из блочной среды загрузить скетч на плату?** Среда генерирует .ino-файл: сохраните его, откройте в Arduino IDE, выберите плату и порт, нажмите «Загрузка». FLProg и Ardublockly — генерируют файл, mBlock — может заливать напрямую через плагин. Сравнение сред — в таблице выше. ## ArduinoJson парсер: примеры в браузере — разбор JSON без платы (https://arduin-arsenal.ru/p/arduinojson-parser-primer/) Парсер ArduinoJson на примерах: разбор JSON в браузере через json-lab, deserializeJson, вложенные объекты и массивы. Проверка скетча без платы. **Можно ли проверить скетч ArduinoJson в браузере?** Да: JsonLab встроен в нашу страницу, а основной симулятор исполняет скетчи с ArduinoJson v7 — deserializeJson, doc[...], JsonArray, JsonObject. Меняйте payload, проверяйте ошибки и размер — без платы и без установки библиотеки. **Чем v6 отличается от v7?** В v7 JsonDocument сам растёт под payload — StaticJsonDocument с фиксированным N уходит в прошлое. Доступ doc["temp"] с неявным приведением работает без .as(). containsKey удалён, используйте isNull(). Миграция — в отдельном уроке из блока ссылок. **Почему doc["temp"] возвращает 0 вместо 22.5?** Либо забыли deserializeJson(doc, json), либо поле имеет строковый тип, и без .as() в v6 парсер возвращает const char* и приводится к 0. Проверяйте через is() в v7 или as() в v6, и сверяйте тип в payload. **Какой размер JsonDocument под мой JSON?** В v7 — JsonDocument без размера, библиотека сама считает. Для оценки памяти под v6 — measureJson. Лаборатория выше показывает число байт под текущий payload — подставляйте в StaticJsonDocument, N = число байт × 1.3 с запасом. **Можно ли парсить JSON из Serial в браузере?** Да: deserializeJson(doc, Serial) работает в нашем симуляторе как на плате. Введите JSON в поле Serial-ввода симулятора, и скетч получит его построчно. Полный разбор — в [уроке про разбор частями](/lesson/arduinojson/arduinojson-razbor-chastyami-chanki/). ## MQTT симулятор ESP32: PubSubClient и брокер в браузере без платы (https://arduin-arsenal.ru/p/mqtt-simulyator-esp32/) MQTT симулятор для ESP32: PubSubClient — connect, publish, subscribe. Проверка скетча с фейковым брокером в браузере. Что эмулируется, что — нет. **Можно ли проверить скетч MQTT в браузере?** Да: PubSubClient в основном симуляторе поддержан — connect, publish, subscribe, loop компилируются и исполняются. WiFi и брокер фейковые, но логика publish и переподключение работают. Callback на подписку в браузере не вызывается — нужен живой брокер. **Какой брокер использовать для теста?** Публичный broker.hivemq.com:1883 — без регистрации, для обучения. Локальный Mosquitto — на своём компьютере через apt/brew. Для production — свой CloudMQTT или HiveMQ Cloud с TLS на 8883. Установка Mosquitto — в отдельном уроке из блока ссылок. **Почему callback onMessage не вызывается в симуляторе?** В браузере нет реального брокера: подписка фейковая, и сообщение некому прислать. Callback-код компилируется и проверяется через Serial, а реальный вызов — на живой плате с Mosquitto: mosquitto_pub -t home/light/set -m ON. **Чем TLS на 8883 отличается от 1883?** 1883 — обычный TCP, payload виден в сети. 8883 — TLS/SSL, шифрованный; PubSubClient подключается через WiFiClientSecure + setCACert(корневой_сертификат). Без сертификата подключение падает по таймауту. Полный разбор — в [уроке про TLS](/lesson/mqtt/mqtt-tls-wificlientsecure-8883/). **Что такое Last Will и зачем?** Last Will and Testament — сообщение, которое брокер пришлёт подписчикам, если клиент отключился без disconnect (например, упало питание). Для индикатора «жив/мёртв» в умном доме — обязательно. В симуляторе LWT компилируется, физики не выполняется; на плате — работает как ожидается. Урок по LWT — в блоке ссылок. ## Симулятор DS18B20 онлайн: термометр OneWire без датчика (https://arduin-arsenal.ru/p/simulyator-ds18b20/) Симулятор DS18B20 в браузере: getTempC, requestTemperatures, OneWire. Двигайте столбик температуры — скетч видит новое значение. Таблица границ. **Можно ли проверить скетч DS18B20 без датчика?** Да: деталь уже на стенде, двигайте ползунок температуры — sensors.getTempCByIndex(0) и requestTemperatures() работают как на плате. 750 мс конверсии и шум ±0,06 °C честно эмулируются. Подтяжка, длина провода и паразитное питание в браузере не живут — это физика. **Почему requestTemperatures() замораживает скетч?** По умолчанию setWaitForConversion(true): вызов ждёт 750 мс до завершения 12-битной конверсии. Лечение — setWaitForConversion(false) в setup, и свой таймер: вызвал requestTemperatures, подождал 800 мс, прочитал getTempCByIndex. Loop остаётся живым. **Что значит -127 от getTempC?** -127 °C — нет датчика на шине: OneWire не нашёл устройства, или перепутаны полярность и подтяжка. На плате — проверьте провода и 4,7 кОм между DATA и VCC. В браузере датчик всегда на месте, и -127 не возвращается. **Сколько датчиков можно поставить на одну шину?** До 100 — у каждого свой ROM-адрес (8 байт). Поиск через sensors.getAddress(addr, i) даёт адрес по индексу, getTempC(addr) — температуру конкретного датчика. При добавлении нового индексы могут сместиться — храните ROM в EEPROM. Полный разбор — в [уроке про аквариумный термостат](/lesson/dht/ds18b20-akvarium-termostat/). **Можно ли в симуляторе проверить паразитное питание?** Нет: модель без физики, и паразитное питание (2 провода вместо 3) в браузере не учитывается. На живой плате работает нестабильно при длине провода больше 1 м — лучше 3-проводное подключение. Уличный монтаж — в [уроке про термометр на морозе](/lesson/dht/ds18b20-ulichnyi-termometr-moroz/). ## Симулятор MPU6050 онлайн: акселерометр и гироскоп без платы (https://arduin-arsenal.ru/p/simulator-mpu6050/) Онлайн-симулятор MPU6050: наклоняйте платку мышью — угол по X и Y, сырые ax/ay/az, детектор тряски. Первый скетч на 5 минут, без платы и без установки. **Можно ли проверить скетч MPU6050 без ардуино?** Да: модуль уже на стенде, тяните его мышью — getAngleX/Y и ax/ay/az возвращают угол и сырые int16 как живой датчик. Детектор тряски, пороги и оси проверяются без пайки. Дрейф гироскопа и калибровка офсетов в браузере не живут — это физика железа. **Какой адрес у MPU6050 в симуляторе?** 0x68 — стандартный при AD0 на земле. На живой плате перемычка AD0 на +3V3 меняет адрес на 0x69; в браузере один адрес, так что скетчи с MPU6050(0x69) подключаются к тому же экземпляру. Сканируйте шину на плате — и повторите адрес в коде. **Почему в симуляторе гироскоп не дрейфует?** Движок хранит угол, а не сырой дрейф: gx/gy/gz в модели нули, поэтому комплементарный фильтр, который лечит дрейф, в браузере работает «по учебнику» — без цифр для подгонки. На живом модуле дрейф 1-3 градуса в минуту — калибруйте офсеты и фильтруйте. **Зачем 16384 в формуле пересчёта ax?** 16384 LSB это 1g при диапазоне ±2g — стандартные настройки MPU6050. Скетч (float)ax/16384.0 даёт ускорение в g, и порог 1,5g ловит тряску, а не притяжение. Если переключить диапазон на ±4g, делитель будет 8192 — в браузере тот же множитель, что в библиотеке. **Можно ли проверить комплементарный фильтр в браузере?** Логику — да: фильтр с весами ускорения и гироскопа работает по тем же формулам. Численные константы под живой датчик — нет: без дрейфа не настроить вес гироскопа. Используйте сим для структуры кода, а финальные веса подгоняйте на плате. ## Симулятор BMP280 онлайн: давление и высота без модуля (https://arduin-arsenal.ru/p/simulator-bmp280/) Онлайн-симулятор BMP280: давление в Па, температура, пересчёт высоты. Двигайте ползунки — readPressure и readAltitude отвечают. Стартовый скетч на 5 минут. **Можно ли проверить скетч BMP280 без модуля?** Да: модуль уже на стенде, подвигайте ползунки давления и температуры — readPressure, readAltitude и readTemperature отдают значения, как живой датчик. Тренд за час и калибровку по эталону проверяйте на плате: модель без смещения и без длительных колебаний. **Почему readAltitude возвращает отрицательное число?** При давлении выше опорного формула 44330·(1−(p/p0)^0.1903) даёт минус: вы «ниже уровня моря» от стандарта 1013.25 гПа. Это не ошибка, а физика: при 1025 гПа высота минус 120 м от стандарта. Подставляйте текущее давление у вас, а не константу 1013.25. **Какой адрес у BMP280 — 0x76 или 0x77?** Зависит от перемычки SDO на модуле: при земле — 0x76, при +3V3 — 0x77. В браузере один адрес 0x76; на живой плате проверяйте сканером и подставляйте в begin(). **Чем BMP280 отличается от BME280 в симуляторе?** У BMP280 нет гигрометра: readHumidity() в библиотеке Adafruit_BME280 у BMP280-модели не вызывается. В браузере то же: BMP280-скетч без влажности работает, BME280-скетч с readHumidity() — нет, потому что датчик в каталоге именно BMP. **Можно ли проверить тренд давления за час?** В симуляторе — структурно: массив на 12 точек и логика сравнения работают, но давление вы поднимаете сами, а не ждёте. На плате тренд за час ловит рост 1-2 гПа к ясной погоде и падение 3-5 гПа к дождю — фильтр скользящего среднего разобран в уроке про прогноз. ## Симулятор MAX7219 онлайн: матрица 8x8 и бегущая строка (https://arduin-arsenal.ru/p/simulator-max7219/) Онлайн-симулятор MAX7219: 64 пикселя 8x8, SPI на D10-D13, бегущая строка и собственный узор. Стартовый скетч под LedControl, без платы и без пайки. **Можно ли проверить матрицу MAX7219 без платы?** Да: модуль уже на стенде, скетч через LedControl.setRow/setColumn зажигает 64 пикселя 8x8. Нарисуйте узор в карточке матрицы или зажгите скетчем — стенд повторит. Ток 150 мА и резистор RSET — только на плате. **Какие пины занимает MAX7219 на Uno?** Три пина SPI: CS на D10, CLK на D13, DIN (MOSI) на D11. Стандартный расклад Uno, ничего не перекладывать. В браузере те же пины по умолчанию. **Почему текст на матрице зеркальный?** Зависит от сборки модуля: на одних старший бит столбца сверху, на других снизу. Библиотеки LedControl, Max72xxPanel и MD_MAX72XX ждут разный порядок. Лечится поворотом бита через bitswap или сменой библиотеки — в браузере проверьте направление за минуту. **Можно ли подключить 4 матрицы каскадом в симуляторе?** Скетч с LedControl(…, 4) компилируется, но светит только первая матрица: движок держит одну на стенд. Каскад DOUT→DIN и общую длину строки проверяйте на плате — там до 8 модулей на одном CS. **Какая библиотека лучше — LedControl или MD_MAX72XX?** LedControl проще для первого символа и бегущей строки на одной матрице. MD_MAX72XX даёт шрифты и прокрутку, но требует настройки типа матрицы в начале. Для старта — LedControl, для длинной строки и шрифтов — MD_MAX72XX. ## Симулятор RFID RC522 онлайн: считыватель карт без модуля (https://arduin-arsenal.ru/p/simulator-rc522/) Онлайн-симулятор RC522: поднесите карту — скетч видит UID. SPI на D10-D13, библиотека MFRC522, чтение сектора и проверка доступа. Без модуля и пайки. **Можно ли проверить скетч RC522 без модуля?** Да: модуль уже на стенде, поднесите карту кнопкой в карточке — mfrc522.PICC_ReadCardSerial вернёт true, и скетч увидит UID в мониторе. Чтение и запись сектора с криптографией — на плате, в браузере API компилируется, но данные не отдаёт. **Какие пины занимает RC522 на Uno?** Четыре пина SPI: SS на D10, SCK на D13, MISO на D12, MOSI на D11. RST обычно на D9 (в браузере заглушка). Плюс питание 3,3 В на модуль и общий GND. **Какой UID у карты в симуляторе?** По умолчанию 4 байта «12 AB 34 CD» — как у MIFARE Classic 1KB. В карточке модуля UID можно изменить; на плате у каждой карты свой уникальный, у брелоков — короткий 4-байтовый. **Почему на плате RC522 не видит мою карту?** Чаще всего — карта другой системы: метро, магнитная лента, чип 125 кГц. RC522 читает только MIFARE на 13,56 МГц. Сверьте карту по логотипу MIFARE или NXP, поднесите вплотную к антенне (3-5 см), проверьте питание модуля — 3,3 В, не 5. **Можно ли клонировать карту через RC522?** На плате — да, через запись в первый сектор с известным ключом A. В браузере криптография сектора не моделируется: PCD_Authenticate и MIFARE_Write компилируются, но не пишут. Для защиты от клонирования используйте криптографию ключа B и сектор с данными, а не UID. ## Симулятор шагового двигателя 28BYJ-48 онлайн: Stepper и ULN2003 (https://arduin-arsenal.ru/p/simulator-28byj-48/) Онлайн-симулятор 28BYJ-48: 4 пина IN1-IN4, ULN2003, библиотека Stepper.h. Поворот на N шагов, направление, скорость. Стрелка повторяет. Без платы. **Можно ли проверить скетч 28BYJ-48 без мотора?** Да: мотор уже на стенде, Stepper.step(N) крутит стрелку на плашке — 2048 шагов на полный оборот. Разгон, направление и скорость проверяются без платы. Крутящий момент и пропуск шагов под нагрузкой — на живом моторе. **Почему мотор в браузере крутит, а на плате стоит и гудит?** Чаще всего — перепутанный порядок пинов: Stepper(2048, IN1, IN3, IN2, IN4), а не 1-2-3-4. На плате проверьте провода от ULN2003 к D4-D7 в порядке 1-3-2-4. Вторая причина — скорость выше 25 об/мин, мотор не успевает. **Сколько шагов в полном обороте 28BYJ-48?** 2048: 32 шага на самом роторе × редуктор 1:64. Stepper.step(2048) — полный оборот стрелки на плашке в браузере и полный оборот вала на плате. **Можно ли питать 28BYJ-48 от USB Arduino?** Технически — да, но мотор ест 200-300 мА, и USB проседает до 4,2 В, момент падает вдвое. Для стабильной работы — отдельный блок 5 В или батарея 4×AA. Через борт 5V Arduino — только для теста без нагрузки. **Чем 28BYJ-48 отличается от NEMA17?** У 28BYJ-48 редуктор 1:64 и момент 0,3 кг·см — для заслонок, клапанов, дешёвых проектов. У NEMA17 200 шагов на оборот без редуктора и момент 4 кг·см — для ЧПУ, 3D-принтеров, станков. Разбор — в [уроке-сравнении](/lesson/stepper/stepper-byj48-protiv-nema17/). ## Симулятор PCF8574 онлайн: I2C-расширитель на 16 пинов (https://arduin-arsenal.ru/p/simulator-pcf8574/) Онлайн-симулятор PCF8574: 8 дополнительных пинов по I2C. Wire.beginTransmission + write, адреса 0x20-0x27, скетч на 5 минут. Без модуля — текст и кросс-ссылки. **Можно ли проверить скетч PCF8574 без модуля?** Логику — да: скетч с Wire.begin/endTransmission компилируется в основном симуляторе, и монитор порта печатает записанные байты. Сам PCF8574 в браузере не отзывается: в каталоге деталей его нет. Проверяйте код в симе, адрес и светодиоды — на живом модуле. **Какой адрес у PCF8574 по умолчанию?** 0x20 у PCF8574 (с A0-A2 на земле) и 0x38 у PCF8574A. Перемычки A0-A2 на +3V3 добавляют к адресу 1, 2, 4 — до 0x27 и 0x3F соответственно. Запустите I2C-сканер на плате, чтобы найти точный адрес вашего модуля. **Почему Wire.endTransmission возвращает 2?** Код 2 — NACK на адрес: модуль не ответил. Причины: неверный адрес, нет питания, перепутаны SDA/SCL, нет подтяжек. На плате лечится сканером; в браузере модуля нет, и endTransmission вернёт код как на живой шине без устройства. **Можно ли подключить LCD и PCF8574 на одну шину?** Да, если адреса разные. Типичный LCD I2C backpack — 0x27, и PCF8574 с A0-A2 на земле тоже 0x20, не 0x27 — конфликт маловероятен. Если совпал, перемычкой на A0-A2 меняют адрес PCF8574 или ставят TCA9548A мультиплексор. **Сколько PCF8574 можно поставить на одну шину?** До восьми модулей PCF8574 (адреса 0x20-0x27) и до восьми PCF8574A (0x38-0x3F) — итого 16 модулей × 8 портов = 128 дополнительных линий ввода-вывода на одной шине I2C. Сильные подтяжки и длина провода до 30 см — обязательно. ## Симулятор Raspberry Pi Pico онлайн: RP2040 в браузере (https://arduin-arsenal.ru/p/simulator-raspberry-pi-pico/) Онлайн-симулятор Raspberry Pi Pico: RP2040, MicroPython и Arduino-ядро. Что переезжает от ардуинщика, что переучивать. Без платы и без установки. **Можно ли запустить скетч для Pico в этом симуляторе?** Только логику: Arduino-ядро скомпилируется под Uno-движок, и setup/loop, delay, Serial работают как у Uno. GPIO-номера GP15, GP26 и 3,3-вольтовая логика — на плате или в Wokwi, где Pico поддержана нативно. **Чем Raspberry Pi Pico отличается от Uno?** Чипом и уровнями: RP2040 с двумя ядрами на 133 МГц, 264 КБ ОЗУ и 2 МБ флеша против 8-битного AVR на 16 МГц с 2 КБ ОЗУ. Логика 3,3 В без толерантности к 5 В, ADC 12-битный, ШИМ почти на любом пине, прошивка файлом через BOOTSEL. **Какой язык выбрать для Pico — MicroPython или Arduino-ядро?** Для знакомства — MicroPython: REPL отвечает сразу, цикл правки короткий. Для тяжёлых проектов и ардуино-привычек — Arduino-ядро arduino-pico: знакомые setup()/loop() и библиотеки. Оба пути живут на плате; в браузере проверяется логика Arduino-скетча. **Поддерживает ли этот симулятор Pico W с Wi-Fi?** Нет: движок заточен под Uno и базовые датчики. Для Wi-Fi на Pico W берите Wokwi (там Pico W — нативная плата) или живую плату. Сравнение сервисов — в [лендинге про Wokwi-альтернативу](/p/wokwi-russkiy-alternativa). **Переживёт ли мой скетч переезд с Uno на Pico?** Голова проекта — да: пороги, расписания, автоматы. Обвязку перепроверьте: GP-нумерация вместо номеров Uno, аналоговые шкалы другой ширины, входы боятся 5 В. Порядок переезда скетчей и diagram.json разобран в [лендинге про импорт скетчей в Wokwi](/p/wokwi-import-sketchej). ## Симулятор Arduino Leonardo онлайн: USB HID и Keyboard без платы (https://arduin-arsenal.ru/p/simulator-leonardo/) Онлайн-симулятор Arduino Leonardo: USB HID, Keyboard.h и Mouse.h, Serial1 на пинах 0 и 1. Что переедет от Uno, что не работает. Без платы и без установки. **Можно ли проверить скетч Keyboard.h в этом симуляторе?** Только логику: Keyboard.begin/print/write компилируются в основном симуляторе под Uno, но символов в окно не выводят — у Uno нет HID. Скетч под Leonardo собирается с тем же API, и на живой плате Keyboard.print печатает строку в окно с фокусом. **Чем Leonardo отличается от Uno?** Чипом: ATmega32U4 с встроенным USB (HID и CDC) против ATmega328P с отдельным USB-мостом. На Leonardo Serial — виртуальный USB-порт, а настоящий UART на пинах 0/1 зовётся Serial1. HID-классы Keyboard и Mouse работают из коробки, без драйверов. **Почему на Leonardo монитор порта не печатает сразу?** Serial — это USB CDC: при открытии монитора плата не всегда перезапускается (DTR не дёргает RESET так же, как на Uno). Добавьте while(!Serial) delay(10); в начале setup — это дождётся, пока монитор откроется, перед печатью. **Можно ли использовать Leonardo как клавиатуру для игр?** Да, через Keyboard.h: Keyboard.press/release эмулируют нажатие клавиш, Keyboard.write печатает символ. Для игр с анти-читом (VAC) HID-эмуляция видна и банит аккаунт; для оффлайн-макросов — работает. Anti-idle и jiggler — самый безопасный сценарий. **Зависла Leonardo после скетча с Keyboard — что делать?** Зажмите RESET, подключите USB, отпустите — и в течение 8 секунд (пока загрузчик ждёт) загрузите пустой скетч через Arduino IDE. Если не успели, повторите. Также помогает короткая перепрошивка blink-скетча через ICSP-разъём. ## Wokwi альтернатива на русском: наш симулятор против Wokwi (https://arduin-arsenal.ru/p/wokwi-alternativa-rus/) Wokwi альтернатива на русском: честное сравнение с нашим симулятором. Где Wokwi сильнее, где русский интерфейс решает. Таблица из 8 строк, без рекламы. **Есть ли Wokwi на русском?** Нет, и не предвидится: интерфейс, документация, ошибки компиляции — всё на английском. Для русскоязычного новичка это лишний барьер, и именно поэтому существует наш симулятор: он покрывает базовый набор Arduino и 1200+ уроков на русском. Для сложных стендов с Pico и ESP32 WiFi — Wokwi. **Чем заменить Wokwi на русском?** Для базового Arduino (Uno, Nano, Mega, датчики, дисплеи, серво) — нашим [симулятором](/simulator): 1200+ уроков со скетчами прямо на странице, без регистрации, на русском. Для ESP32 с настоящим WiFi — Wokwi; для Pico/RP2040 — Wokwi или живая плата. **Нужна ли регистрация в Wokwi?** Только для сохранения проектов: в гостевом режиме можно работать без аккаунта, но после закрытия вкладки проект пропадает. У нас регистрация не нужна в принципе — прогресс хранится локально в браузере, и скетчи приходят из уроков. **Поддерживает ли Wokwi ESP32 с WiFi?** Да, и это сильная сторона: настоящая симуляция WiFi-стека, HTTP-сервер, MQTT, обмен с реальными API. У нас — фейковый HTTP/MQTT для обучения логике, без реальных запросов. Если нужен тест протокола — Wokwi. **Можно ли перенести скетч из Wokwi к нам?** Да: код Arduino — одинаковый, меняется только стенд. Скетч из Wokwi вставьте в наш [симулятор](/simulator/) и запустите. Подводные камни — там, где библиотеки или детали есть в Wokwi, но нет в нашем каталоге: текстовые лендинги под PCF8574, Pico, Leonardo объясняют, что в браузере работает, а что нет. ## Симулятор OLED SSD1306 онлайн: дисплей 128x64 без модуля (https://arduin-arsenal.ru/p/simulator-oled-ssd1306/) Онлайн-симулятор SSD1306: 128x64, I2C, Adafruit_SSD1306. Выводите текст, графику и метео-панель. Адрес 0x3C, буфер 1024 байта. Без модуля и пайки. **Можно ли проверить скетч OLED SSD1306 без модуля?** Да: модуль уже на стенде, Adafruit_SSD1306.display/setCursor/print рисуют текст и графику на 128x64. Метео-панель, зоны, графики и инверсия проверяются без пайки. Самопрогрев и выгорание OLED — только на плате, в браузере пиксели не стареют. **Какой адрес у OLED SSD1306 в симуляторе?** 0x3C — типовой, как у большинства модулей. Редкие версии идут на 0x3D; на плате проверяйте I2C-сканером. В браузере один адрес 0x3C, скетчи с 0x3D подключаются к тому же экземпляру. **Сколько памяти занимает буфер OLED 128x64?** 1024 байта: 128×64 = 8192 пикселя, по 1 биту на пиксель. На Uno с 2 КБ SRAM это половина — большой скетч с дисплеем, Adafruit_GFX и библиотекой датчика может не влезть. На Mega с 8 КБ и ESP32 с 520 КБ — не проблема. **Почему OLED не обновляется после print?** Все вызовы print и setCursor рисуют в буфер. На экран кадр уходит только после display.display(). Это сделано для производительности: частичная перерисовка экрана медленнее, чем полная отправка буфера. **Нужно ли защищать OLED от выгорания?** Да, если он показывает статичный кадр постоянно. За 2-3 месяца работы один и тот же кадр выжигает пиксели, и на экране остаётся «призрак». Лечится ночной половиной яркости (display.dim(true)), периодической инверсией и тайм-аутом с гашением экрана через 30 секунд бездействия. ## Симулятор адресной ленты NeoPixel онлайн: 16 светодиодов WS2812 (https://arduin-arsenal.ru/p/simulator-neopixel/) Онлайн-симулятор NeoPixel: 16 светодиодов WS2812, Adafruit_NeoPixel, дыхание, радуга и конфетти. Один пин данных, без ленты, без платы и без пайки. **Можно ли проверить скетч NeoPixel без ленты?** Да: лента уже на стенде, Adafruit_NeoPixel.setPixelColor/show зажигают 16 пикселей WS2812B. Дыхание, радуга и конфетти проверяются без пайки. Ток 60 мА на пиксель и защита резистором — на плате, в браузере не моделируются. **Сколько пикселей в симуляторе NeoPixel?** 16: базовая длина в карточке. Adafruit_NeoPixel(16, 6, NEO_GRB + NEO_KHZ800) — конструктор под 16 пикселей. На плате лента бывает 30, 60, 144 на метр, в браузере — фиксированные 16. **Почему на плате первый пиксель горит чаще остальных?** Без резистора 330 Ом на данных (между пином Arduino и DI первого пикселя) импульс данных заводит через паразитную ёмкость, и первый пиксель выходит из строя. Резистор 330 Ом ставят близко к первому пикселю, конденсатор 1000 мкФ между 5V и GND — сглаживает токовые пики. **Какой ток ест лента на белом?** 60 мА на пиксель на белом при полной яркости. 16 пикселей × 60 мА = 0,96 А — близко к пределу USB Uno (500 мА). 60 пикселей × 60 = 3,6 А — нужен отдельный блок 5V. setBrightness(64) уменьшает ток вчетверо. **Adafruit_NeoPixel или FastLED — что лучше?** Adafruit_NeoPixel проще для старта: один класс, setPixelColor + show. FastLED мощнее: палитры, эффекты, fill_rainbow, beatsin8 — но требует инициализации и понимания CRGB. Для дыхания и радуги на 16 пикселях — Adafruit_NeoPixel; для длинной ленты с эффектами — FastLED. ## Симулятор SD-карты Arduino онлайн: логирование данных без модуля (https://arduin-arsenal.ru/p/simulator-sd-karta/) Онлайн-симулятор SD-карты: SPI на D10-D13, SD.open, FILE_WRITE/FILE_READ. Лог температуры в CSV, список файлов, проверка записи. Без модуля. **Можно ли проверить скетч SD-карты без модуля?** Да: модуль уже на стенде, SD.open/file.write/close работают как на плате — список файлов в карточке модуля обновляется. Лог температуры, оглавление и ротация файлов проверяются без пайки. 3,3 В против 5V и обрыв питания — на плате, в браузере не моделируются. **Какие пины занимает SD-модуль на Uno?** Четыре пина SPI: CS на D10, MOSI на D11, MISO на D12, SCK на D13. Плюс питание 3,3 В на модуль и общий GND. На Uno D10 — это SS по умолчанию, и SD.begin(10) использует именно его. **Почему данные не записались на SD-карту?** Чаще всего — забытый file.close() после записи. SD-карта пишет секторами по 512 байт, и без close() последний сектор остаётся в буфере модуля. Другая причина — файл открыт на чтение (FILE_READ), а запись идёт — нужен FILE_WRITE для дописывания. **Нужно ли согласовывать 3,3 В SD-карты с 5 В Uno?** Да, если на модуле нет готового делителя. SD-карта 3,3-вольтовая, прямое подключение к 5-вольтовой логике Uno деградирует за пару месяцев. На готовых модулях делитель стоит; на «голом» адаптере — CD4050B или резисторный делитель 1:2 (1 кОм / 2 кОм). **Какой формат SD-карты поддерживается?** FAT16 для карт до 2 ГБ, FAT32 от 4 ГБ. Библиотека SD.h на Uno работает с обеими, но не с FAT12 (старые карты до 32 МБ) и не с exFAT. Форматируйте в FAT16 или FAT32 через стандартное средство OS или sd formatter от SD Association. ## Проекты ESP8266 NodeMCU: умный дом, WiFi-реле, датчики (https://arduin-arsenal.ru/p/esp8266-nodemcu-projects/) С чего начать проекты на ESP8266 NodeMCU: WiFi-реле, датчик температуры и влажности, отправка данных в облако — 6 рабочих сборок с кодом и схемами. **Какой проект собрать на NodeMCU первым?** WiFi-реле на освещение — две детали (реле-модуль и плата), скетч из 80 строк, веб-сервер на порту 80. Включаете и выключаете свет с телефона в той же сети. Это даёт уверенность в WiFi.begin, ESP8266WebServer и пине реле, дальше масштабируете до MQTT и Telegram. **Почему NodeMCU, а не ESP32?** NodeMCU дешевле (300-400 ₽ против 600-800 ₽ у ESP32), меньше по габаритам и хватает на любой бытовой сценарий: реле, датчик, уведомление. ESP32 берут, когда нужно Bluetooth, два ядра, больше пинов или PSRAM. Для WiFi-реле на 5 А разницы не будет — NodeMCU справится с запасом. **Можно ли NodeMCU питать от USB-порта компьютера?** Короткий ответ — да, но не для реле. USB-порт отдаёт 500 мА, реле-модуль в момент щелчка берёт 70-100 мА, плюс WiFi-пики 200-240 мА. В сумме под 350 мА, и при срабатывании платы проседает и перезагружается. Питание от зарядки на 1 А или отдельного блока на 5V убирает ребуты. **Какие пины NodeMCU безопасны для реле и кнопок?** Безопасная пятёрка: D1 (GPIO5), D2 (GPIO4), D5 (GPIO14), D6 (GPIO12), D7 (GPIO13) — без strap-логики и без занятости SPI/I2C. Реле вешаю на D1 или D7, кнопку на D5 или D6 с INPUT_PULLUP. D3, D4, D8 — strap-пины, реле на них не ставлю: при включении чип может не стартовать. **Как отправить данные с NodeMCU в облако?** Три честных пути. narodmon — GET-запросом, бесплатно, без аутентификации, для графиков температуры и влажности. MQTT-брокер (Mosquitto, HiveMQ) — PubSubClient, для умного дома с Home Assistant. Telegram-бот — HTTPS через BearSSL, для уведомлений в чат. JSON не нужен для narodmon, для остальных — ArduinoJson. ## ESP32-CAM: стриминг видео и фото в браузере (https://arduin-arsenal.ru/p/esp32-cam-streaming/) ESP32-CAM с потоковой передачей видео в браузер: настройка CameraWebServer, статический IP, захват фото по таймеру, отправка в Telegram и на SD-карту. **Как прошить ESP32-CAM без USB-разъёма?** Через UART-переходник FTDI или CH340 на 3V3: VCC к пину 5V0 (или 3V3, в зависимости от ревизии), GND к GND, TX к RX платы (U0R), RX к TX (U0T), и провод-перемычка с GPIO0 на GND на время прошивки. После загрузки перемычку снимите. Arduino IDE: плата AI Thinker ESP32-CAM, скорость 115200. **Почему изображение с ESP32-CAM рвётся каждые 30-60 секунд?** Две причины. Первая — питание: блок слабее 1A проседает при захвате, плата уходит в Brownout. Лечится блоком 5V/2A и конденсатором 470-1000 мкФ по питанию. Вторая — WiFi: роутер режет UDP-флуд от MJPEG-потока, перевод на HTTP keep-alive или RTSP-сервер стабилизирует сессию. **Можно ли отправить кадр с ESP32-CAM в Telegram?** Да: POST multipart/form-data на api.telegram.org/bot/sendPhoto с телом JPEG-файла. Использует WiFiClientSecure + BearSSL + ручную сборку multipart-тела. Отпечаток сертификата Telegram меняется раз в полгода, поэтому проверка по корневому сертификату BearSSL живёт дольше — она у меня проработала год без правок. **Какой размер кадра выбрать: VGA, SVGA или UXGA?** VGA (640x480) — баланс для потока в браузер, хватает и памяти, и качества. SVGA (800x600) — для фото по таймеру на SD. UXGA (1600x1200) — только для одиночных снимков: поток 15 fps съест всю PSRAM за минуту, плата зависнет. frame_size в скетче задаёт это, fb_count = 2 даёт плавность. **Зачем PSRAM на ESP32-CAM и как её включить?** PSRAM 4 МБ — внешняя SRAM для кадров: без неё UXGA и SVGA не выделяются. В Arduino IDE: Инструменты → PSRAM → Enabled. В скетче ничего включать не надо — esp_camera_init проверяет наличие сама. Если в меню PSRAM отключена, плата поднимется только на QVGA и будет падать при попытке переключить выше. ## ESP32 MQTT: умный дом с Home Assistant (https://arduin-arsenal.ru/p/esp32-mqtt-umnyj-dom/) ESP32 + MQTT + Home Assistant: автодискавери, реле, датчик, сценарии. PubSubClient, Mosquitto, MQTT Explorer, схема топиков и примеры скетчей. **Какой брокер MQTT выбрать для умного дома?** Локально — Mosquitto на Raspberry Pi или Mini PC: бесплатный, лёгкий, ставится одной командой apt. Для доступа снаружи — Mosquitto на VPS (200-500 ₽/мес) с TLS на порту 8883. Публичные брокеры HiveMQ и test.mosquitto.org подходят только для проверки кода, не для умного дома: данные видны всем, и rate limit режет телеметрию. **Как Home Assistant находит устройство по MQTT?** Через автодискавери: ESP32 публикует JSON в homeassistant///config с топиками для команд, статуса и доступности. HA подписан на homeassistant/#, видит конфиг и создаёт entity автоматически — без правки YAML. Чтобы убрать устройство, стирают discovery-топик (публикация пустого retained), и HA уберёт его из панели через 30 секунд. **Какой размер буфера ставить PubSubClient на ESP32?** 256 байт по умолчанию хватает для команд ON/OFF и телеметрии температуры. Discovery-JSON для HA — 400-700 байт, и стандартный буфер его обрежет. client.setBufferSize(1024) решает, но ест 1 КБ RAM — на ESP32 с 520 КБ SRAM это незаметно. На ESP8266 с 40 КБ — уже стоит подумать. **Что делать, если ESP32 теряет MQTT-соединение?** Три шага. Первое: WiFi.setAutoReconnect(true) — авто-восстановление WiFi. Второе: backoff в PubSubClient — reconnect через 5, 10, 20, 60 секунд, а не каждые 100 мс. Третье: LWT (Last Will and Testament) — брокер сам публикует «офлайн» в availability-топик, если клиент пропал. HA увидит, что устройство ушло, и не будет слать команды в пустоту. Полный разбор — в [уроке про LWT](/lesson/mqtt/mqtt-lwt-last-will-status/). **Нужен ли TLS на MQTT для домашнего умного дома?** В локальной сети без выхода наружу — нет: 1883 порт и без шифрования работает, AES на ESP32 ест CPU и память. Если MQTT-брокер на VPS в интернете — обязательно TLS на 8883 с проверкой корневого сертификата. WiFiClientSecure + BearSSL справится, но отпечаток сертификата меняется раз в полгода — проверка по корневому живёт годами. ## ESP32 OTA: беспроводное обновление прошивки (https://arduin-arsenal.ru/p/esp32-ota-update/) ESP32 OTA по воздуху: ArduinoOTA, HTTP-обновление с сервера, разделы флеша, откат и защита паролем. Скетчи обновляются без USB-кабеля через WiFi. **Какой порт слушает ArduinoOTA на ESP32?** TCP 3232 — порт данных OTA на ESP32. 8266 достался ESP8266, 1883 — это MQTT-брокер, 80 — обычный веб-сервер. Файрвол на ноутбуке спрашивает про 3232 при первой заливке: разрешаем для домашней сети, запрещаем для публичной. **Что делать, если сетевой порт не появляется в Arduino IDE?** Чек-лист на пять минут: плата и ноутбук в одной подсети (без гостевой изоляции), ArduinoOTA.begin() вызван после WiFi.begin, handle() в loop() без delay(), схема разделов Default 4MB (не Huge APP), файрвол на ноутбуке разрешает UDP 3232, VPN-клиент выключен. Если все пункты пройдены — перезагрузка платы и IDE решает в 90% случаев. **Какой размер слота для OTA в схеме Default 4MB?** 1,3 МБ на слот, два слота — app0 и app1. Скетч с WiFi, MQTT и ArduinoJson обычно укладывается в 800 КБ-1,2 МБ, с запасом. Если скетч больше 1,3 МБ — переключаются на Minimal SPIFFS (1,9 МБ слот) или Huge APP (3 МБ, но OTA невозможна). Проверить размер можно в выводе компилятора IDE после заливки. **Можно ли откатиться на старую прошивку после провальной OTA?** Автоматического отката нет: новая прошивка падает — плата ребутится новым слотом в цикле. Страховка: рабочий бинарник всегда лежит в IDE той же версии, при сомнениях жму Загрузить ещё раз по воздуху или по USB. У ESP-IDF есть app rollback с таймером подтверждения, в Arduino-ядре включается через #define, но я им не пользуюсь — проще держать под рукой USB-кабель. **Как защитить OTA-порт от соседей?** Минимум — setPassword("...") в скетче, и пароль спросит IDE при первой заливке. Смены порта защитой не считаю — сканер находит 3232 за секунды. В чужой сети (офис, кафе) — отключаю OTA в коде через флаг #define OTA_ENABLED 0. Для 50 плат в разных местах — поднимаю HTTP-Update с проверкой подписи и шифрованным каналом к серверу. ## Умный дом на Arduino: датчики, реле, сценарии (https://arduin-arsenal.ru/p/umnyj-dom-arduino/) С чего собрать умный дом на Arduino: реле на освещение, DHT для микроклимата, RTC для расписания, кнопки-сценарии и sendData по Serial. Схемы и код. **Можно ли собрать умный дом на Arduino без облака и приложения?** Да: реле, датчики, RTC и кнопки-сценарии работают локально на плате, скетч хранит логику. Удалённое управление отсутствует, но для кухонного света или автополива это нормально — сценарии «включить по движению» и «полить по расписанию» работают без роутера. Если нужно удалённо — добавляют ESP-01 или ESP8266 рядом с Uno. **Какое реле выбрать для умного дома на Arduino?** Модуль реле 1-4 канала на 5V с опторазвязкой — 70-200 ₽. Активное LOW или HIGH зависит от модуля (читайте маркировку), но в коде меняется одной парой LOW/HIGH. Для 220V нагрузки — обязательно через клеммник WAGO или винтовые клеммы, не на изоленту. Ток реле 10A достаточно для освещения, для обогревателя берут реле на 16A или магнитный пускатель. **Нужен ли RTC для умного дома на Arduino?** Для сценариев по времени — да. Без RTC расписание держится на millis() от старта, и при отключении питания сбрасывается. DS3231 (150-250 ₽) с термокомпенсацией и батарейкой CR2032 держит 1 минуту в год. DS1307 (80-120 ₽) дешевле, но дрейф 1-2 минуты в неделю. Для «поливать в 7:00» — DS3231 надёжнее. **Чем DHT22 отличается от BME280 для умного дома?** DHT22 — 180-250 ₽, температура ±0,5 °C и влажность ±2%, раз в 2 секунды. BME280 — 300-400 ₽, плюс давление, точность выше (±1 °C, ±1% RH), и I2C-шина с одним модулем. Для «включить вытяжку при 70% влажности» — DHT22 хватает. Для метеостанции с давлением — BME280. Подробно — в [уроке про DHT22 vs BME280](/lesson/dht/dht22-vs-bme280-pereplatit-davlenie/). **Сколько реле и датчиков потянет Uno для умного дома?** Uno держит 14 цифровых пинов и 6 аналоговых. Реле занимает 1 пин на канал, PIR-датчик 1 пин, DHT22 1 пин, RTC 2 пина I2C (общая шина). Реалистичный максимум на Uno: 6 реле + 3 PIR + 2 DHT22 + 1 RTC + 2 кнопки — все 14 цифровых пинов заняты. Для большего — Mega 2560 (54 пина) или I2C-расширитель PCF8574. ## Автополив на Arduino: датчик влажности + насос + расписание (https://arduin-arsenal.ru/p/avtopoliv-vlazhnost/) Автополив на Arduino: ёмкостный датчик влажности почвы, помпа 5В, RTC DS3231 и расписание по времени. Гистерезис, ток помпы, защита от сухого хода. **Какой датчик влажности почвы выбрать для автополива?** Только ёмкостный: 150-250 ₽, не корродирует, живёт годами. Резистивный за 50-80 ₽ корродирует за 2-3 месяца, и показания плывут. Ёмкостный датчик меряет диэлектрическую проницаемость почвы, а не сопротивление между электродами — медная плата в изоляции, нет контакта с водой. **Как настроить пороги влажности для автополива?** Калибруются двумя измерениями: датчик в сухой земле даёт ~ 800, в воде ~ 300. Включаем помпу при 600 (сухо), выключаем при 350 (мокро) — это гистерезис 250. Один порог вместо двух даёт стрекот реле у границы. Калибровку повторяют после смены почвы или датчика — показания немного отличаются. **Какую помпу выбрать для автополива на Arduino?** Мини-помпа 5V для аквариума (100-200 ₽), 200-300 мА ток, реле-модуль с опторазвязкой. Питание помпы с отдельного блока 5V/1A, не с Arduino — ток пуска 600 мА, плата при пуске может ребутнуться. Для большого огорода берут 12V помпы с mosfet-ключом, но это сложнее в подключении. **Нужен ли RTC для автополива на Arduino?** Для сценариев «поливать в 19:00» — да. Без RTC расписание держится на millis() от старта, и при отключении питания сбрасывается. DS3231 (150-250 ₽) с батарейкой CR2032 держит 1 минуту в год. DS1307 дешевле (80-120 ₽), но дрейф 1-2 минуты в неделю. Для полива по влажности без расписания — RTC не нужен, но для огорода на даче обязателен. **Как защитить помпу от сухого хода в автополиве?** Две страховки. Первая: таймер MAX_PUMP_MS = 30 секунд — помпа выключается через 30 секунд, даже если датчик не показал WET. Вторая: проверка изменения датчика — если за 30 секунд влажность не изменилась на 20+, пишем «ALERT: no water» и не запускаем помпу 1 час. Дополнительно: обратный клапан на шланге 100 ₽, чтобы вода не стекала обратно. ## Метеостанция на ESP32: BME280, OLED, WiFi-отправка (https://arduin-arsenal.ru/p/weather-station-esp32/) Метеостанция на ESP32 с BME280, OLED 0.96 дюйма и отправкой данных на сервер или в Telegram. Температура, влажность, давление и компенсация высоты. **Чем BME280 отличается от BMP280 для метеостанции?** BME280 меряет температуру, влажность и давление (300-400 ₽), BMP280 — только температуру и давление (180-250 ₽). Для метеостанции с тремя параметрами нужен BME280. BMP280 берут, когда влажность не нужна: высотомер, барометр, прогноз погоды. DHT22 — когда давление не нужно: теплица, микроклимат комнаты. **Как отправить данные с метеостанции на narodmon?** HTTP GET-запросом: http://narodmon.ru/get?ID=XX&temp=22.5&hum=45&press=752. ID датчика получаете после регистрации на narodmon.ru, MAC-адрес платы в любом формате. Запросы не чаще 5 минут, иначе банит. Библиотека HTTPClient на ESP32, для HTTPS (ThingSpeak) — BearSSL. **Какой дисплей выбрать для метеостанции на улице?** OLED SSD1306 0.96" I2C — для тени и под козырьком, выгорает за 6-12 месяцев на солнце. TFT ST7735 1.8" — для улицы, дороже и больше по габаритам. E-Paper 2.9" — лучший для улицы, не выгорает и не требует энергии на удержание изображения, но медленный (1-2 секунды на обновление). **Как перевести давление из гПа в мм рт. ст.?** Умножить на 0.750062: 1013 гПа = 760 мм рт. ст. В скетче: float mmHg = p_hpa * 0.750062. BME280 отдаёт давление в Па (readPressure), для гПа делим на 100, для мм рт. ст. — умножаем на 0.0750062. Подробно — в [уроке про давление в мм рт. ст.](/lesson/dht/bmp280-davlenie-mmrtst-i-vysota/). **Какое питание выбрать для уличной метеостанции на ESP32?** USB-БП 5V/1A — для запитки от розетки, просто и надёжно. PowerBank 10000 мАч с проходным зарядом — 2-3 дня автономии. Солнечная панель 5V/2W + Li-ion 18650 с TP4056 — для полной автономии, 1 неделя без солнца. ESP32 в light sleep тянет 10-20 мА, с WiFi-отправкой раз в 10 минут — энергию экономит в 4-5 раз. ## WiFi-сканнер на ESP8266: ищем сети, анализируем сигнал (https://arduin-arsenal.ru/p/wifi-skanner-esp8266/) Сканнер WiFi на ESP8266: WiFi.scanNetworks, RSSI, шифрование, канал. Вывод на Serial, на OLED и веб-страницу. Какие сети вокруг и где сигнал сильнее. **Сколько сетей видит ESP8266 вокруг?** Реально 10-30 в городской квартире, до 50-80 в многоэтажке. ESP8266 возвращает до 50-70 SSID за одно сканирование (лимит библиотеки). Уровень сигнала от -30 (вплотную) до -90 (на грани). Скрытые SSID видны без имени, по BSSID (MAC-адресу). **Видит ли ESP8266 сети 5 ГГц?** Нет, только 2.4 ГГц. Радиомодуль ESP8266 работает в диапазоне 2.4 ГГц, и 5 ГГц ему недоступен аппаратно. ESP32, ESP32-C3, ESP32-S2 — тоже только 2.4 ГГц. Для 5 ГГц нужен ESP32-C5 (новый чип, 2024+) или внешний WiFi-модуль на 5 ГГц. **Что значит RSSI в dBm?** RSSI — Received Signal Strength Indicator, уровень сигнала в децибелах относительно милливатта (dBm). Отрицательные числа от 0 до -100. -30 dBm — плата вплотную к роутеру, -50 — в соседней комнате, -70 — через две стены, -85 — на грани обрыва. Для расчётов используют dBm, для «процентов» на телефоне — условный перевод, нелинейный. **Какой канал выбрать для роутера после сканирования?** Наименее загруженный: после сканирования выбирают канал с наименьшим количеством сетей и наименьшим суммарным сигналом. В РФ каналы 1-13, в US 1-11. Каналы 1, 6, 11 — непересекающиеся, рекомендуются в первую очередь. Если на 6-м канале 11 сетей — переход на 1-й или 11-й часто снимает тормоза. **Как сделать сканер WiFi на ESP8266 портативным?** NodeMCU + OLED 0.96" I2C на D1/D2, питание от Li-ion 18650 с повышающим модулем MT3608. Скетч выводит 5 самых сильных сетей на OLED, прокрутка кнопкой на D5. Автономность 4-6 часов. Корпус — 3D-печать или готовый от Xiaomi-термометра. Для полного автономия — ESP8266 в deep sleep с пробуждением раз в минуту, экономия энергии в 10 раз. ## Робот на Arduino: моторы, датчики и поведение (https://arduin-arsenal.ru/p/robot-na-arduino/) Робот на Arduino: моторы через L298N, датчик HC-SR04, ИК-линия. Поведение: объезд, линия, ПИД. Скетчи, грабли и пошаговая логика без слепых delay(). **Какой драйвер моторов выбрать для робота на Arduino?** L298N (150-250 ₽) — для первой платформы: клеммы, борда с 5V-стабилизатором, простые пины IN1-IN4. TB6612FNG (130-180 ₽) — для лёгких и быстрых роботов: меньше потерь, выше КПД, но требует пайки. На 4WD берут либо два TB6612, либо один L298N с токоограничением — он греется на токе 1,4 А на мотор. **Какой датчик лучше для объезда: HC-SR04 или ИК?** HC-SR04 для расстояний 5-400 см и широкого угла 15°. ИК-датчик Sharp GP2Y0A21 — для 10-80 см с узким лучом, но дороже (400-600 ₽). На плоских поверхностях HC-SR04 не видит ножки стула — ИК-датчик видит. Комбинируют: HC-SR04 для общей картины, ИК-бампер для близких препятствий. **Зачем П-контроллер, если работают и if-else?** If-else даёт рывки: мотор или на полной скорости, или выключен. П-поправка плавно снижает скорость одного колеса при уходе с линии, и робот не «дёргается». Реальный выигрыш на скорости 200+: if-else на 200 робота «молотит», П-контроллер держит линию чисто. Базовый П-контроллер — 12 строк кода. **Сколько моторов потянет Arduino Uno?** Uno имеет 6 ШИМ-пинов (3, 5, 6, 9, 10, 11) и 14 цифровых. L298N занимает 4 пина направления + 2 пина ШИМ на 2 мотора. 4WD на двух L298N — это 8 пинов направления + 4 ШИМ = 12 пинов, на Uno остаётся 2 свободных. Для 6 моторов берут Mega или I2C-расширитель PCF8574. **Как сделать, чтобы робот не падал со стола?** ИК-датчики смотрят вниз на край стола: край стола против пола — резкий контраст, ИК-датчик видит «нет поверхности» и включает BACK_OFF. Альтернатива — MPU6050: наклон по оси Z больше 20°, и робот едет назад 500 мс. У меня работали оба, ИК-датчик проще и дешевле. ## LoRa связь Arduino: дальняя радиосвязь для IoT (https://arduin-arsenal.ru/p/lora-svjaz-arduino/) LoRa на Arduino: модуль SX1276 (RA-02), библиотека LoRa.h, отправка и приём, дальность до 5 км, питание 3.3 В и антенна 868 МГц. Код и грабли из практики. **Чем LoRa отличается от WiFi и Bluetooth?** LoRa — медленно (50-300 бит/с), но далеко (1-5 км) и сквозь препятствия. WiFi — быстро (до 1 Гбит/с), но близко (30-50 м) и плохо сквозь стены. Bluetooth — средне (1-3 Мбит/с), близко (10-100 м). LoRa для IoT-датчиков с малыми данными и большим расстоянием, WiFi для потокового видео и интернета, Bluetooth для периферии рядом с телефоном. **Какой модуль LoRa выбрать для Arduino?** RA-02 на чипе SX1276 — 250 ₽, 25x25 мм, 868 МГц, SPI-интерфейс. Альтернативы: SX1278 (аналог SX1276, та же частота), RFM95W (тот же чип Semtech, другая обвязка), EByte E32 (готовый модуль с антенной). Для Arduino 5V — обязателен согласователь уровней CD4050B. Для ESP32 и Pro Mini 3.3V — прямое подключение. **На какой частоте работает LoRa в РФ?** 868 МГц в РФ и EU, без лицензии до 25 мВт (14 dBm). 915 МГц — в US, в РФ запрещена. 433 МГц — в Азии и РФ для LPD-диапазона (до 10 мВт). В РФ 868 МГц — стандарт для LoRa-устройств, и большинство модулей с рынка работают именно на этой частоте. **Какую дальность даёт LoRa на Arduino?** Зависит от параметров. Spreading factor SF7 — 1 км, SF12 — 5 км (медленнее в 32 раза). Внешняя антенна 868 МГц диполь — 5 км, PCB-антенна — 1 км, без антенны — 50 м и сгорает за 10 секунд. Лес съедает дальность в 3-5 раз, бетонные стены — в 10-20 раз. На открытой местности с SF12 и внешней антенной реально 4-5 км. **Можно ли на LoRa передавать JSON или бинарные данные?** Да: LoRa.print отправляет текст, LoRa.write — байты. Для JSON — serialize через ArduinoJson в строку и LoRa.print. Для бинарных структур — LoRa.write((uint8_t*)&myStruct, sizeof(myStruct)), но осторожно с packed-структурами и endian. Размер пакета до 51 байт по умолчанию, до 222 байт с LoRa.setSPIFrequency и увеличенным buffer. Для больших данных — фрагментация или сжатие. ## NRF24L01 + Arduino: радиосвязь 2.4 ГГц между платами (https://arduin-arsenal.ru/p/nrf24l01-arduino/) Модули nRF24L01 связывают две Arduino на 2.4 ГГц до 100 м: распиновка MOSI/SCK/CS/CE/IRQ, библиотека RF24, грабли питания и стабильный канал. **Почему nRF24L01 не работает от пина 3V3 на Arduino Uno?** Выход 3.3 В на Uno рассчитан примерно на 50 мА, и пульсация по цепи получается слишком большой. Модуль ловит пакеты, но рвёт их по CRC. Ставьте отдельный AMS1117-3.3 с конденсаторами 10 мкФ и 0.1 мкФ. **Какую скорость выбрать: 250 кбит/с или 2 Мбит/с?** Для телеметрии и команд берите 250 кбит/с, это самое стабильное. 2 Мбит/с реже пролезает через стены и чувствительна к помехам WiFi на той же частоте 2.4 ГГц. **Можно ли связать 3 и более плат через nRF24L01?** Да: один передатчик пишет в 6 разных pipe, и 6 приёмников слушают свои адреса. Для двусторонней связи каждая плата должна быть и передатчиком, и приёмником. **Почему пакеты теряются при передаче каждые 100 мс?** Чаще всего виновато питание, реже совпадение канала с WiFi. Смените канал на radio.setChannel(100) и переведите скорость на 250 кбит/с. **Какое расстояние реально взять между двумя Arduino?** В комнате 10-20 метров, на улице прямой видимостью 80-100 метров. На 2 Мбит/с чувствительность падает, и заявленные 100 метров уже не берут. ## HC-05 Bluetooth + Arduino: управление со смартфона (https://arduin-arsenal.ru/p/hc-05-bluetooth-arduino/) HC-05 на Arduino: UART к SoftwareSerial, AT-команды для имени и пин-кода, связка со смартфоном через Bluetooth Terminal, грабли питания и скорости. **Почему HC-05 не отвечает на AT-команды?** Либо модуль не перевели в AT-режим (в AT-режиме индикатор мигает медленно, 2 раза в секунду), либо команда не заканчивается переводом строки CRLF. У большинства модулей AT-режим работает на 38400 бод, у части на 9600. **HC-05 и HC-06 в чём разница?** HC-06 только ведомый: он ждёт, пока кто-то подключится. HC-05 умеет и ведомый, и ведущий режим, то есть может сам инициировать соединение. Для управления со смартфона подходит и тот, и другой. **Можно ли через HC-05 передавать аудио?** Нет. HC-05 поддерживает только профиль SPP, то есть прозрачный серийный канал. Для аудио нужен модуль с профилем A2DP. **Почему смартфон не видит устройство?** Быстрое мигание индикатора означает рабочий режим, медленное AT-режим. Если модуль не виден, проверьте имя командой AT+NAME?, не спарен ли он с другим телефоном и не забыт ли пин-код. **На какой скорости работает HC-05 из коробки?** Обычно 9600 бод в рабочем режиме и 38400 бод в AT-режиме. Значение меняется командой AT+UART и после неё действует уже новая скорость. ## Драйвер A4988 + Arduino: управление шаговым NEMA17 (https://arduin-arsenal.ru/p/a4988-drajver-shagovika/) A4988 — драйвер шагового NEMA17: распиновка VMOT/2B/2A/1A/1B + STEP/DIR, микрошаг MS1-3, ток VREF (Imax=VREF/0.4), грабли питания и перегрева с радиатором. **Почему NEMA17 дёргается и греет A4988?** Ток обмоток выше лимита. Измерьте VREF и посчитайте ток по формуле Imax = VREF / (8 × Rsense): при Rsense 0.1 Ом для 1 А нужно 0.8 В, при Rsense 0.05 Ом нужно 0.4 В. Радиатор на чипе обязателен. **Какой блок питания нужен для A4988 и NEMA17?** 12 В 2 А на один двигатель. Для 3D-принтера с 4 моторами берите 12 В 10 А. Конденсатор 100 мкФ на VMOT рядом с платой обязателен. **Зачем нужны пины MS1, MS2 и MS3?** Выбор микрошага: от полного шага (200 шагов на оборот) до 1/16 (3200 шагов на оборот). Больше микрошагов это плавнее и тише, но ток нужно поднимать, иначе двигатель теряет момент. **Можно ли управлять A4988 через ШИМ?** Нет, STEP это цифровой фронт, а не уровень. Для плавного ускорения меняйте паузу между фронтами или используйте библиотеку AccelStepper, которая считает нужные интервалы сама. **Почему мотор не крутится, а только дёргается?** Обычно не выставлен ток через VREF: при нулевом токе обмотки не создают момент. Проверьте VREF мультиметром и посчитайте ток по формуле. ## ESP32 Deep Sleep: снижаем ток до 10 мкА для IoT на батарейке (https://arduin-arsenal.ru/p/esp32-deep-sleep/) Глубокий сон ESP32: esp_deep_sleep_start с таймером и EXT0/EXT1 по кнопке, RTC_DATA_ATTR для памяти, ток 10-150 мкА — IoT на батарейке месяцами. **Как долго ESP32 работает на батарейке 18650 в deep sleep?** 18650 на 2500 мА·ч при токе 100 мкА это 25000 часов, около 2.8 лет идеального счёта. С реальными подъёмами раз в 10 минут получается 6-12 месяцев. **Почему loop() не выполняется после просыпания?** Deep sleep останавливает CPU. При пробуждении чип стартует с вектора сброса, то есть с начала setup(). Вся логика должна быть в setup(). **Какие пины будят ESP32 из deep sleep?** Только RTC GPIO: 0, 2, 4, 12, 13, 14, 15, 25, 26, 27, 32-39. Остальные GPIO из сна не выводят. **Что сохраняется между просыпаниями?** Только переменные с атрибутом RTC_DATA_ATTR. Обычные переменные теряются, а WiFi приходится поднимать заново при каждом цикле. **Чем deep sleep отличается от light sleep?** В light sleep выключается только CPU, а RAM остаётся под напряжением, отсюда сотни микроампер и единицы миллиампер. В deep sleep остаётся только RTC-домен, и ток падает до 10-150 мкА. ## Wemos D1 Mini (ESP8266): компактная плата для IoT-проектов (https://arduin-arsenal.ru/p/wemos-d1-mini-esp8266/) Wemos D1 Mini на ESP8266: распиновка D0-D8 + A0, питание 5 В micro-USB, программирование через Arduino IDE, грабли с пинами и аналоговым входом. **Чем Wemos D1 Mini отличается от NodeMCU v3?** Размер 28×34 мм против 51×31 мм и micro-USB вместо micro-USB у NodeMCU v1 или mini-USB у v3. По начинке это один и тот же ESP8266EX, набор пинов одинаковый. **Почему не работает пин A0?** A0 на D1 Mini это единственный вход ADC0 с диапазоном 0-3.3 В, а не 0-5 В. При 5 В на A0 вы повредите вход. Для измерения 0-5 В поставьте делитель. **Можно ли подключить I2C-датчик к D1 Mini?** Да, SDA это D2 (GPIO4), SCL это D1 (GPIO5). Подтяжка 4.7 кОм обычно уже распаяна на модулях датчиков, на голой плате добавить её нужно самостоятельно. **Сколько потребляет D1 Mini с работающим WiFi?** 80-100 мА во время передачи данных и 20-40 мА в простое при подключённом WiFi. От USB-порта это нормально, от батареи 18650 понадобится повышающий преобразователь до 5 В. **Как перевести D1 Mini в режим прошивки?** Зажмите кнопку FLASH (она же BOOT) и нажмите RESET, затем отпустите FLASH. Если кнопок на вашей плате нет, замкните D3 (GPIO0) на землю при подаче питания. ## TIP120 + Arduino: управляем мощной нагрузкой через транзистор (https://arduin-arsenal.ru/p/tip120-tranzistor-arduino/) TIP120 (NPN Darlington) — управление мотором, лампой, нагревателем с током до 5 А: распиновка, резистор базы, обратный диод, грабли тепла и ШИМ. **Какой резистор между Arduino и базой TIP120?** 1-2.2 кОм для нагрузки до 1 А. Для 5 А нужно около 470 Ом, это даёт примерно 10 мА базы. Никогда не подключайте базу напрямую к пину. **Обязателен ли обратный диод при управлении мотором?** Да, для любой индуктивной нагрузки. Без диода выброс обратной ЭДС пробивает транзистор. Для реле хватит 1N4007, для мотора берите 1N5404 или 1N5408. **TIP120 или MOSFET IRF530?** MOSFET меньше греется и работает на частоте ШИМ до 100 кГц. Но IRF530 не является логическим уровнем, ему нужно 5-10 В на затворе. Для простых задач до 1-2 А подходит TIP120, для мощных моторов берите MOSFET. **Почему TIP120 греется на половинной скорости ШИМ?** Падение напряжения на насыщении 1.5-2 В есть всегда, и при 5 А это 7.5-10 Вт тепла. Радиатор обязателен, а нагрев будет тем меньше, чем ниже ток нагрузки. **Как узнать, что транзистор пробит?** Измерьте сопротивление между коллектором и эмиттером в выключенном состоянии. Если вместо kilohms или мегаом показывается единица, транзистор пробит и подлежит замене. ## ESP32 Bluetooth Classic: связь со смартфоном без WiFi (https://arduin-arsenal.ru/p/esp32-bluetooth-classic/) ESP32 с встроенным Bluetooth Classic + BLE: библиотека BluetoothSerial, связка со смартфоном, отличие Classic от BLE, грабли скорости и стабильности. **Какие платы ESP32 поддерживают Bluetooth Classic?** Оригинальный ESP32 с модулем ESP-WROOM-32 и ESP32-S3. Не поддерживают: ESP32-S2, там только WiFi, и ESP32-C3 и ESP32-H2, у них только BLE. **Можно ли Classic и BLE одновременно?** Да, ESP32 работает в дуал-режиме: BluetoothSerial для Classic и BLEDevice для BLE. Стек BLE при этом занимает десятки килобайт ОЗУ, это стоит учитывать в тяжёлых проектах. **Почему смартфон не видит ESP32?** Проверьте, что вызвали SerialBT.begin с именем, плата не зажата кнопкой EN, телефон ищет обычные Bluetooth-устройства, а не только BLE, и в настройках Bluetooth удалены старые пары. **BLE или Classic для управления со смартфона?** Classic проще: это обычный SPP-терминал, и подходит любое приложение. BLE экономичнее, но требует приложения с поддержкой GATT-сервисов. **Какая дальность у Bluetooth на ESP32?** Модуль ESP-WROOM-32 работает по классу 2, то есть около 10-15 метров в чистом воздухе. В квартире с одной стеной обычно 5-8 метров. ## TB6612FNG + Arduino: компактный драйвер двух моторов с ШИМ (https://arduin-arsenal.ru/p/tb6612-motor-drajver/) TB6612FNG — драйвер 2 биполярных моторов до 1.2 А каждый: распиновка AIN/BIN/PWMA/PWMB, режимы CW/CCW/Short brake, отличия от L298N и нагрев. **TB6612 или L298N для робота-машинки?** TB6612 компактнее, холоднее и меньше просаживает питание. L298N выдерживает напряжение моторов до 46 В. Для робота на 6-9 В берите TB6612, на 12-24 В берите L298N. **Зачем нужен пин STBY?** Это выход включения драйвера, он активен по низкому уровню. При LOW оба мотора в режиме высокого сопротивления и потребление около 1 мкА. Если он не нужен, подключите к 5 В. **Почему моторы крутятся в разные стороны?** Перепутали провода мотора на выходах AO1 и AO2. Поменяйте их местами. Для 2 моторов вперёд второй подключают зеркально относительно первого. **Какая частота ШИМ лучше для TB6612?** Чип держит до 100 кГц, но выше 20 кГц уже не слышно. Arduino по умолчанию даёт 980 Гц на пинах 5, 6, 9 и 10, и для большинства моторов этого хватает. **Какое напряжение можно подать на моторы?** От 2.5 до 13.5 В на вывод VM. Выше datasheet не рекомендует, и на 12 В вы уже будете близко к верхней границе. ## Симулятор SD-карты и RFID RC522 Arduino онлайн (https://arduin-arsenal.ru/p/simulator-sd-rfid/) Виртуальные SD-карта и RFID RC522 в браузере: SD.begin/open/println/write, MFRC522 PICC_IsNewCardPresent/ReadCardSerial, 3 виртуальные карты с UID, без железа. **Как увидеть содержимое файла, который записал скетч?** Кликните на имя файла в карточке SD-карты. Откроется модальное окно с полным содержимым и кнопкой «Копировать». **Какую карту выбрать в RFID для теста?** В карточке RFID есть кнопка «След. карта» и список трёх виртуальных карт. Клик выбирает конкретную, и следующий вызов в скетче отдаст именно её UID. **Можно ли читать данные из файла SD в симуляторе?** Да: SD.open("file.txt") без флага записи открывает файл для чтения. file.read() возвращает код символа, file.available() показывает, сколько байт осталось. **Какой UID у виртуальных карт?** 0xDEADBEEF (DE AD BE EF), 0xCAFEBABE (CA FE BA BE) и 0x01020304 (01 02 03 04). Карты выдаются циклически по кругу. **Работает ли в симуляторе MIFARE Classic с ключами?** Да, полноценно: 16 секторов, ключи A и B, аутентификация через PICC_Authenticate, чтение и запись блоков и изменение sector trailer. ## Симулятор MAX30102 онлайн — пульсоксиметр в браузере (https://arduin-arsenal.ru/p/simulator-max30102/) Виртуальный пульсоксиметр MAX30102 в браузере: I2C, getHeartRate/getSpO2, ползунки пульса 40-180 и сатурации 90-100%, без железа и паяльника. **Какой пульс считается нормой?** 60-100 уд/мин в покое для взрослых. У тренированных спортсменов бывает 40-50, это норма. Выше 100 в покое называют тахикардией. В симуляторе доступен диапазон 40-180 уд/мин. **SpO₂ 95% это нормально?** Да, 95-100% это норма. 91-94% называют лёгкой гипоксемией, ниже 90% это тяжёлая гипоксемия и нужен кислород. У курильщиков бывает 92-95% хронически. **MAX30102 и MAX30105 в чём разница?** У MAX30102 два канала, RED и IR, этого хватает для пульса и SpO₂. У MAX30105 три канала, добавлен зелёный, он даёт более точный пульс и детект частиц. Библиотека SparkFun общая, набор методов одинаковый. **Почему пульс скачет на реальном датчике?** Движение пальца даёт артефакт. Датчик очень чувствителен к давлению и положению, нужен стабильный прижим и полное отсутствие движения в течение 30 секунд. В симуляторе значения всегда стабильны. **Какое напряжение нужно датчику?** Сам чип работает от 1.8 до 3.6 В. На большинстве плат-адаптеров стоит стабилизатор, и тогда можно подавать 5 В, но проверьте, есть ли он на вашей плате. ## Симулятор BME680 онлайн — 4-в-1 датчик IoT (https://arduin-arsenal.ru/p/simulator-bme680/) Виртуальный BME680 в браузере: I2C, readTemperature/Humidity/Pressure/gasResistance, 4 параметра с одного модуля, ползунки значений, без железа. **BME680 и BME280 в чём разница?** BME280 даёт температуру, влажность и давление. BME680 добавляет газовый канал VOC, и именно он требует прогрева в течение 5-30 минут. Для метеостанции BME280 дешевле, для контроля воздуха после покраски нужен BME680. **Что значит VOC?** Летучие органические соединения. Источники: краска, лак, клей, спирт, формальдегид, бензол. Чем больше VOC, тем ниже сопротивление нагретого сенсора в кОм. **Нужно ли прогревать BME680?** Да, MOX-сенсор стабилизируется 5-30 минут. Без прогрева показания газа скачут. В симуляторе значения стабильны сразу и зависят только от ползунка. **Какой I2C-адрес у BME680?** 0x76 по умолчанию, а если вывод SDO подтянут к питанию, то 0x77. Проверяйте I2C-сканером перед подключением, это снимает половину вопросов. **BME680 измеряет CO2?** Нет. Газовый канал реагирует на летучие органические соединения, а не на углекислый газ. Для реального CO2 нужен NDIR-датчик, например SCD41. ## Симулятор MLX90614 онлайн — IR-термометр бесконтактно (https://arduin-arsenal.ru/p/simulator-mlx90614/) Виртуальный IR-термометр MLX90614 в браузере: I2C, readObjectTempC/readAmbientTempC, 2 значения (объект и воздух), ползунки температур, без железа. **MLX90614 медицинский или бытовой?** Медицинская версия MLX90614-BAA с полем зрения 10 градусов нужна для измерения лба или уха, она точнее по позиционированию. Бытовая версия с полем 35 градусов подходит для общих задач. **Можно ли измерять температуру тела через стекло?** Нет, стекло блокирует инфракрасное излучение. Датчик покажет температуру стекла, а не объекта за ним. **Почему показывает 22 °C при наведении на стену?** Так и должно быть: стена холодная. readObjectTempC возвращает температуру поверхности перед датчиком, а readAmbientTempC температуру самого датчика и воздуха вокруг него. **Зависит ли точность от расстояния?** Да. Чем дальше, тем больше поле зрения захватывает фон. На 5 см в кадр попадает круг около 3 см, на 30 см круг уже около 19 см. Подносите ближе для точечного измерения. **Почему на металле показывает меньше, чем на коже?** Металл отражает инфракрасное излучение, а не излучает его, и коэффициент излучения у него 0.1-0.3 вместо 0.98 у кожи. Нужна поправка, которая есть в даташите настроек чипа. ## Симулятор HX711 онлайн — весы на Arduino (https://arduin-arsenal.ru/p/simulator-hx711/) Виртуальный HX711 в браузере: 24-бит АЦП тензодатчика, get_units/read/tare, ползунок нагрузки 0-5000 г, кнопка Тара, без железа и паяльника. **Как откалибровать HX711 под свой датчик?** Поставьте грус известной массы, например 500 г, прочитайте get_value, вычтите нулевое значение и разделите разность на массу. Это и есть scale. Для 5 кг load cell обычно выходит 2000-2500. **Почему первые минуты показания гуляют?** Датчику нужно время на прогрев, и первые чтения нестабильны. Дайте поработать 5-10 минут и только потом обнуляйте тару и подбирайте масштаб. **Что лучше, HX711 или HX710?** HX711 имеет 24 бит и рассчитан на мост Уитстона, то есть на тензодатчики. HX710 даёт 20 бит и тоже умеет мост, но с меньшей точностью. Для весов берите HX711. **Можно ли подключить 2 тензодатчика к одному HX711?** Да, если соединить их параллельно, все E+ вместе, все E- вместе, и так же выходы моста. Так делают платформенные весы с четырьмя датчиками по углам, HX711 читает суммарный сигнал. **Почему показание отрицательное?** Перепутаны выходы моста A+ и A-. Поменяйте местами жёлтый и белый провода. Питание моста, то есть красный и чёрный, трогать не нужно. ## Симулятор CCS811 онлайн — CO₂ и TVOC датчик (https://arduin-arsenal.ru/p/simulator-ccs811/) Виртуальный CCS811 в браузере: I2C, getCO2/getTVOC, ползунки CO₂ 400-8192 ppm и TVOC 0-1187 ppb, контроль качества воздуха для IoT-проектов, без железа. **CCS811 или SCD41 для CO2?** SCD41 это настоящий NDIR-сенсор с точностью около 40 ppm. CCS811 оценивает CO2 по реакции на VOC с точностью 15-20 процентов, но он в разы дешевле и заодно меряет TVOC. Для серьёзного мониторинга берите SCD41. **Почему CO2 завышен?** Не настроен baseline. Дайте датчику 48 часов в чистом воздухе, либо задайте baseline вручную: прочитайте getBaseline в чистом воздухе и запишите его через setBaseline. **Нужно ли подавать температуру и влажность?** Да, иначе точность падает. Возьмите данные с BME280 или BME680 и вызовите setEnvironmentalData с влажностью и температурой. В симуляторе компенсация не моделируется. **TVOC 500 ppb это опасно?** 100-500 ppb это допустимый бытовой уровень. 500-1000 ppb повышенный, обычно это краска, лак или бытовая химия. Выше 1000 ppb нужна вентиляция. В симуляторе можно задать любое значение. **Какой I2C-адрес у CCS811?** 0x5A по умолчанию, а если вывод ADDR подтянут к питанию, то 0x5B. Адрес стоит проверить сканером, потому что платы от разных производителей отличаются. ## Симулятор PMS5003 онлайн — датчик пыли PM2.5/PM10 (https://arduin-arsenal.ru/p/simulator-pms5003/) Виртуальный датчик пыли PMS5003 в браузере: UART, readPM25/readPM10, ползунки PM2.5 0-1000 и PM10 0-1000 мкг/м³, контроль смога, без железа. **PMS5003 или PMS5003T?** PMS5003T это тот же датчик с добавленным термогигрометром, он отдаёт ещё температуру и влажность. Если проекту нужны только частицы, PMS5003 дешевле. **Почему показывает 0 при включении?** Вентилятору нужно время на разгон, первые пакеты мусорные. Первые достоверные значения появляются через несколько секунд после подачи питания. В симуляторе значения доступны сразу. **Как интерпретировать PM2.5?** 0-12 отлично, 12-35 хорошо, 35-55 умеренно, 55-150 вредно для чувствительных, 150-250 вредно для всех, выше 250 аварийно. **PMS5003 или SDS011?** PMS5003 точнее на низких концентрациях, до 100 микрограммов на кубический метр, и дороже. SDS011 лучше работает на высоких, при смоге 500 и выше, и дешевле, но шумнее на чистом воздухе. **Почему значения в три раза ниже, чем у соседнего датчика?** Скорее всего, вы читаете фабричные байты вместо атмосферных. В пакете есть обе шкалы, для оценки воздуха нужны байты 10-13, а не 4-7. ## Симулятор LoRa SX1276 онлайн в браузере (https://arduin-arsenal.ru/p/simulator-lora/) Виртуальный LoRa SX1276 в браузере: begin/beginPacket/print/endPacket/parsePacket/read, эхо-демо TX→RX, RSSI, без железа. Библиотека LoRa.h. **Какой spreadingFactor выбрать?** SF7 даёт максимальную скорость, порядка 5.5 кбит/с, но чувствителен к помехам. SF12 медленный, около 300 бит/с, зато пробивает стены. Для телеметрии на улице берите SF9, для дальней связи через препятствия SF12. **Можно ли в симуляторе связать 2 платы?** Нет, симулятор моделирует одну плату. Эхо-демо: endPacket в том же скетче кладёт пакет в буфер, parsePacket читает. Для настоящей связи нужны два модуля SX1276. **868 или 433 МГц для России?** 868 МГц это Европа и Россия, до 25 мВт ERP работа без лицензии. 433 МГц тоже без лицензии в режиме LPD, но там больше помех. Для IoT берите 868. **Почему дальность 50 м вместо 15 км?** Нет антенны или плохое питание. Подключите антенну всегда, даже для теста: без нагрузки на выходе чип перегревается. Питание 3.3 В через AMS1117-3.3 с конденсатором 10 мкФ. **Что означает RSSI -50 dBm?** Уровень принятого сигнала в децибелах относительно милливатта. В документации библиотеки LoRa.h -50 dBm считается отличным сигналом, около -100 dBm и ниже означает приём на грани. ## Симулятор GSM SIM800L онлайн в браузере (https://arduin-arsenal.ru/p/simulator-gsm/) Виртуальный GSM SIM800L в браузере: SoftwareSerial, AT-команды (AT, CSQ, CMGF, CMGS), отправка SMS (write 26=Ctrl+Z), звонки (ATD/ATA/ATH), без железа. **Почему SIM800L перезагружается при отправке SMS?** Питание не тянет пик TX в 2 А. Вывод 5 V Arduino даёт около 500 мА, и модем голодает. Нужен отдельный источник 4 В 2 А с общим GND. Конденсатор 1000 мкФ на питании модуля сглаживает просадки. **Какой пин для TX/RX SIM800L?** На модуле TXD это выход модема, его подключают к RX Arduino, а RXD это вход модема, его подключают к TX Arduino. Через SoftwareSerial подойдут любые два пина, на Uno это обычно D2 и D3. Не путайте TX и RX. **Нужен ли делитель напряжения 5V→2.8V?** Да, RX-пин модема не толерантен к 5 В. Подойдёт делитель из двух резисторов или диод 1N4148 последовательно с TX Arduino. TX модема выдаёт 2.8 В, и Arduino поймёт это напрямую. **write(26) это что?** Символ Ctrl+Z с кодом ASCII 26. Он завершает ввод текста SMS и запускает отправку. Без него модем ждёт текст бесконечно. В Arduino это gsm.write(26) или gsm.print("\x1A"). **Что означает 99 в ответе AT+CSQ?** Уровень сигнала неизвестен, модем не зарегистрирован в сети или не смог определить параметры сети. Стоит проверить регистрацию командой AT+CREG? и антенну. ## MIFARE Classic на Arduino: ключи, сектора, блоки (https://arduin-arsenal.ru/p/mifare-classic-arduino/) MIFARE Classic 1K: 16 секторов × 4 блока × 16 байт, ключи A/B, PICC_Authenticate, MIFARE_Read/Write, sector trailer, factory key FFFFFFFFFFFF. **Какой factory key по умолчанию?** FFFFFFFFFFFF, шесть байт 0xFF. Все ключи A и B на заводской карте такие. Это позволяет читать карту из коробки, но и не защищает её. **В чём разница между ключом A и ключом B?** Access bits определяют, что позволяет каждый из ключей. По умолчанию A даёт чтение, а B чтение и запись. Настройкой access bits можно сделать так, что A только читает, B только пишет, или оба могут всё. **Можно ли записать в sector trailer, то есть в блок 3?** Да, через MIFARE_Write на блок 3 это меняет ключи A и B и access bits. ОСТОРОЖНО: если ключ забыт, карта заблокирована навсегда. В симуляторе sector trailer пишется как обычный блок. **Почему MIFARE Classic небезопасен?** Криптоалгоритм Crypto1 слабый, и в 2008 году был опубликован метод его взлома: ключ восстанавливается за 10-15 минут. Для защиты данных нужны MIFARE DESFire с AES-128 или MIFARE Plus. **Сколько секторов и блоков в MIFARE Classic 1K?** 16 секторов, в каждом 4 блока по 16 байт, всего 1024 байта. В MIFARE Classic 4K секторов 32, а последние восемь работают в расширенном режиме. ## SD-карта: папки, пути, листинг на Arduino (https://arduin-arsenal.ru/p/sd-karta-papki-arduino/) Работа с папками на SD-карте Arduino: SD.mkdir, SD.open путь-стиль, File.openNextFile листинг, SD.exists/rmdir, path-style имена с /, грабли FAT16. **FAT16 или FAT32 для Arduino?** FAT16 это карты до 2 ГБ и имена в формате 8.3, то есть 8 символов плюс 3 на расширение. FAT32 это карты от 4 ГБ, там имена длинные. Для логгера с короткими именами хватит FAT16, для длинных имён берите FAT32. **Почему SD.open("logs") не открывает папку?** Путь без ведущего слэша может трактоваться как файл в корне. В симуляторе normPath добавляет слэш автоматически, в реальной библиотеке пишите абсолютные пути: SD.open("/logs"). **Как перечислить файлы в корне?** Откройте корень через SD.open("/") и вызывайте openNextFile в цикле. Для каждого элемента проверяйте isDirectory, чтобы отличить папку от файла. **Можно ли создать вложенные папки /logs/2024/jan?** Да, но родительские каталоги должны существовать. Создайте их по очереди: SD.mkdir("/logs"), SD.mkdir("/logs/2024"), SD.mkdir("/logs/2024/jan"). Один вызов mkdir промежуточные каталоги не создаёт. **Зачем нужен rewindDirectory?** Он сбрасывает указатель каталога на начало. После полного прохода openNextFile вернёт пустое значение, и без rewindDirectory второй проход по той же папке ничего не покажет. ## LoRa на Arduino: урок с нуля до передатчика (https://arduin-arsenal.ru/p/lora-urok-arduino/) Урок LoRa для Arduino: подключение SX1276 (SPI), библиотека LoRa.h, код передатчика и приёмника, spreading factor, частоты 433/868/915, RSSI. **Какой spreadingFactor выбрать?** SF7 даёт скорость около 5468 бит/с, но чувствителен к помехам. SF12 медленный, около 293 бит/с, зато пробивает стены. Для телеметрии на улице берите SF9, для связи через препятствия SF12. **868 или 433 МГц для России?** 868 МГц это Европа и Россия, до 25 мВт ERP без лицензии. 433 МГц тоже без лицензии в режиме LPD, но там больше помех. Для IoT берите 868. **Почему дальность 50 м вместо 15 км?** Нет антенны или плохое питание. Антенна обязательна, даже для теста: без нагрузки чип перегревается. Длина проволочной антенны для 868 МГц около 8.6 см, это четверть длины волны. **Можно ли в симуляторе связать 2 платы?** Нет, симулятор моделирует одну плату. Эхо-демо: endPacket в том же скетче кладёт пакет в буфер, parsePacket читает. Для настоящей связи нужны два модуля SX1276. **Почему приёмник не печатает пакеты?** Чаще всего в цикле нет вызова parsePacket: пока его не вызвали, модуль не разберёт входящий пакет. Второй по частоте случай, разные частоты у передатчика и приёмника или забытый вызов begin. ## GSM SIM800L на Arduino: урок с AT-командами до SMS (https://arduin-arsenal.ru/p/gsm-sim800l-urok-arduino/) Урок GSM SIM800L для Arduino: подключение через SoftwareSerial, AT-команды (AT, CSQ, CMGF, CMGS), отправка SMS (write 26=Ctrl+Z), звонки (ATD/ATA/ATH). **Почему SIM800L перезагружается при отправке SMS?** Питание не тянет пик TX в 2 А. Вывод 5 V Arduino даёт около 500 мА, и модем голодает. Нужен внешний источник 4 В 2 А или аккумулятор 18650 напрямую. Конденсатор 1000 мкФ на питании сглаживает просадки. **Нужен ли делитель напряжения 5V→2.8V?** Да, RX-пин модема не толерантен к 5 В. Подойдёт делитель 10 кОм и 20 кОм, на выходе получится около 3.3 В. Вариант с диодом 1N4148 срежет 0.7 В и даст 4.3 В, но это впритык к пределу. TX модема Arduino понимает напрямую. **write(26) это что?** Символ Ctrl+Z с кодом ASCII 26. Он завершает ввод текста SMS и запускает отправку. Без него модем ждёт текст бесконечно. В Arduino это gsm.write(26) или gsm.print("\x1A"). **Какой пин для TX/RX SIM800L?** TXD это выход модема, его подключают к RX Arduino, то есть D2. RXD это вход модема, его подключают к TX Arduino, то есть D3. Не путайте TX и RX. **Почему модем не отвечает на AT?** Чаще всего нет общей земли или модем ещё не зарегистрировался в сети, на что уходит от 10 секунд до пары минут. Добавьте паузу после включения и проверьте питание мультиметром. ## Симулятор Arduino Leonardo онлайн: USB-HID клавиатура и мышь (https://arduin-arsenal.ru/p/leonardo-emulyator-onlain/) Симулятор Arduino Leonardo онлайн: ATmega32U4 с USB-HID. Keyboard.h и Mouse.h печатают в Serial с пометкой HID. Что эмулируется в браузере, что только на плате. **Keyboard.h работает в симуляторе?** Да: вызовы Keyboard.begin/print/write/press исполняются и печатаются в Serial-консоль с пометкой «HID:Kbd». Реальные нажатия клавиш симулятор не делает — это граница браузера. Логику, порядок и тайминги проверяете в браузере, живые нажатия — на плате. **Чем Leonardo отличается от Uno для новичка?** Тем же чипом-конвертером: у Leonardo ATmega32U4 держит USB сам, поэтому плата умеет быть клавиатурой и мышью. Классика (blink, датчики, серво) работает одинаково. Берите Leonardo, если в проекте есть HID-часть, Uno — если нет. **Почему скетч-клавиатура опасна на живой плате?** Keyboard.print пишет в активное окно без подтверждения: залив скетч с print в loop() без задержек, получите сотни строк в случайном документе и «зависшую» плату — переполненный USB-буфер. Лечение: delay(50-300) после каждого print и кнопка-предохранитель в условии. **Сколько пинов и ШИМ у Leonardo?** 20 программируемых пинов (D0-D13, A0-A5), из них 7 с ШИМ: D3, D5, D6, D9, D10, D11, D13. По цифрам это почти Uno: те же 32 КБ флеша, SRAM даже чуть больше — 2,5 КБ, а все отличия — в USB. ## Симулятор Raspberry Pi Pico онлайн: RP2040 и MicroPython в браузере (https://arduin-arsenal.ru/p/simulyator-raspberry-pi-pico/) Симулятор Raspberry Pi Pico онлайн: RP2040 выбирается в браузере, blink на C++ и MicroPython исполняется на стенде. Таблица Pico против Uno и границы эмуляции. **Pico работает с Arduino IDE?** Да: ставьте ядро arduino-pico (Earle Philhower) через Boards Manager — в списке появится Raspberry Pi Pico, и обычные скетчи на pinMode/digitalWrite компилируются без правок. MicroPython при этом никуда не девается: прошивается отдельно, это параллельная дорога. **Почему пины называются GP0-GP28, а не D0-D13?** Pico не пытается повторить колодку Uno: 26 «голых» GPIO подписаны GP с номером чипа, плюс питание и земля по краям. Схема распиновки печатана прямо на плате снизу — привычка от Uno «вспомнить, где A4» тут не работает, держите шпаргалку под рукой. **MicroPython или C++ на Pico — что выбрать?** Для учёбы и быстрых прототипов — MicroPython: REPL, правка без компиляции, короткий код. Для скорости и библиотек Arduino-экосистемы — C++ через arduino-pico. Памяти 2 МБ хватает на оба варианта, переключение — перепрошивкой, плата не «одноразовая» ни для того, ни для другого. **Есть ли у Pico WiFi?** У базовой Pico нет: RP2040 без радиомодуля. WiFi и Bluetooth появляются в Pico W и Pico 2 W (чип CYW43 на плате). Если сеть нужна сразу — смотрите ESP32: в [симуляторе](/simulator/) сетевые сценарии отрабатываются на ESP32-плате. ## MicroPython симулятор онлайн: исполнение кода в браузере (https://arduin-arsenal.ru/p/micropython-simulyator-onlain/) MicroPython симулятор онлайн: режим MicroPython исполняет machine.Pin, PWM и time.sleep на виртуальном стенде. Кому подходит язык, примеры и границы эмуляции. **MicroPython или Arduino C++ — что выбрать новичку?** Если знаете Python — MicroPython: вход в тему за вечер, ошибки читаются по-человечески. Если цель — Arduino-экосистема и шилды — C++. Оба языка работают в [симуляторе](/simulator/), переключаются кнопкой, так что попробовать можно оба за один вечер и решить по ощущениям. **Какие платы поддерживают MicroPython?** Raspberry Pi Pico (RP2040), ESP32, ESP8266 и ещё пара десятков плат с 256+ КБ флеша. Классические Uno и Nano — нет: 2 КБ SRAM физически не вмещают интерпретатор. В симуляторе режим MicroPython не привязан к плате — стенд исполняет Python на любой выбранной плате. **Есть ли в симуляторе REPL?** Полноценного REPL-терминала нет: код пишется в редакторе, print() выводит в консоль. Для REPL на живой плате ставьте Thonny или mpremote — интерактивная сессия по USB. Логика «написал — запустил — посмотрел вывод» в симуляторе та же, меняется только скорость итерации. **Чем наш режим отличается от внешних эмуляторов MicroPython?** Внешние среды эмулируют конкретную плату со своей схемой; у нас стенд собирается по коду — назвали Pin(13) и кнопку на D2, они появились на макетке. Плюс один инструмент закрывает и C++, и Python. Ограничения общие: WiFi, REPL и прошивка — только на живой плате. ## Датчик тока ACS712: подключение к Arduino и измерение тока (https://arduin-arsenal.ru/p/acs712-arduino-podklyuchenie/) Подключение датчика тока ACS712 к Arduino: версии 5A/20A/30A, формула пересчёта analogRead в амперы, скетч с усреднением и почему новичкам нельзя 220 В. **Какую версию ACS712 купить: 5A, 20A или 30A?** Под ожидаемый ток с запасом 20-30%, но не больше: разрешение у 5A — ~26 мА на шаг АЦП, у 30A — ~74 мА. Для макетки 5A хватает почти всегда; 20A — если питание робота или драйвер; 30A — под мощные нагрузки. **Почему при выключенной нагрузке датчик показывает не 0?** Смещение нуля: выход чипа держит середину питания приблизительно и уплывает на единицы-десятки мВ от температуры и стабилизации 5 В. Лечение — калибровка в setup(): при выключенной нагрузке усредняете 100-200 показаний и запоминаете это число как «0 А». **ACS712 меряет переменный ток?** Чип двунаправленный, и мгновенные значения он видит: синусоида гуляет вокруг 512. Но для RMS нужны частые выборки, а главное — это 220 В, куда новичку лезть нельзя. Учебное применение ACS712 — постоянный ток от 5 до 12 В. **Почему в симуляторе цифры не совпадают с реальным модулем?** В симуляторе шкала упрощена: ±5 А растянуты на весь диапазон АЦП, ампер ≈ 102 единицы; у реального чипа 5A — ~38. Точка 512 при 0 А и логика «смещение от середины» совпадают, скетчи переносятся без переделки. ## Датчик Холла KY-003 и Arduino: магнит без контакта (https://arduin-arsenal.ru/p/datchik-holla-arduino/) Датчик Холла KY-003 и Arduino: эффект Холла простыми словами, геркон против чипа A3144, INPUT_PULLUP, счётчик на attachInterrupt и применения. **KY-003 цифровой или аналоговый датчик?** Цифровой: внутри чип A3144 с пороговой схемой, на выходе только HIGH или LOW. Аналоговые датчики Холла (например, 49E) существуют и выдают напряжение, пропорциональное силе поля, — это другие модули, с другим подключением и кодом. **Нужен ли резистор подтяжки?** На модуле KY-003 он уже стоит, подключайте прямо в пин. Голый чип A3144 — обязательно: выход с открытым коллектором сам не выдаёт HIGH, без подтяжки (резистор 10 кОм к 5 В или INPUT_PULLUP) пин будет ловить воздух. **Датчик не реагирует на магнит — что не так?** Вероятнее всего, полюс: A3144 срабатывает на южный полюс к лицевой стороне корпуса — переверните магнит. Дальше проверьте расстояние: ферритовый магнит держит 1-2 см, слабые магнитики из сувениров — меньше сантиметра. **Нужна ли антидребезговая задержка в коде?** Механического дребезга нет — это не контакт. Но при медленном проходе магнита у границы срабатывания чип может дать несколько фронтов подряд. Лечение то же, что у кнопок: фильтр по минимальному интервалу между срабатываниями 10-20 мс, если считаете события. ## Датчик уровня воды для Arduino: дождь, бак, аквариум (https://arduin-arsenal.ru/p/datchik-urovnya-vody-arduino/) Датчик уровня воды для Arduino: резистивная гребёнка и ёмкостный v1.2, скетч «бак полон», коррозия и питание через цифровой пин только на время замера. **Почему сухой датчик даёт большие значения, а мокрый — маленькие?** Так разведён делитель на плате, и это норма для «дождевых» модулей: сухая гребёнка — около 1023, погружение снижает число. У других клонов бывает наоборот. Всегда калибруйтесь своими замерами: окуните датчик на два уровня и запишите цифры. **Сколько живёт резистивная гребёнка в воде?** При постоянном питании — недели: электролиз съедает медь открытых дорожек. С питанием только на время замера (10 мс раз в секунду) — месяцы. Для постоянного мониторинга берите ёмкостный датчик: у него электроды в изоляции и коррозии нет. **Можно ли мерять точный уровень по высоте?** Гребёнка даёт грубые ступени: дорожки идут по всей высоте, и показания растут порогами. Для точного уровня лучше ультразвуковой дальномер сверху бака — он меряет расстояние до зеркала воды без контакта и без коррозии. **Питание гребёнки через цифровой пин — это вообще законно?** Для этой платы да: она потребляет единицы миллиампер, а пин Uno отдаёт до 20-40 мА. Правило общее для любого модуля: посчитайте ток по даташиту, и если он в пределах пары десятков мА — цифровой пин как выключатель питания работает; если больше — только MOSFET или реле. ## Вибромотор на Arduino: вибрация через ШИМ (https://arduin-arsenal.ru/p/vibromotor-arduino-shim/) Вибромотор на Arduino: транзистор и защитный диод, почему пин не тянет мотор, analogWrite 0-255 для силы вибрации и скетч пульсирующей тряски. **Можно ли подключить вибромотор напрямую к пину Arduino?** Нет: мотору нужно 60-100 мА при пиновом потолке 20-40 мА, плюс выброс ЭДС обмотки при выключении бьёт по пину. Исключение одно — готовый модуль вибромотора, где транзистор и диод уже распаяны на плате. **Почему на analogWrite(пин, 50) мотор стоит, а на 150 крутится?** Мотору нужно стартовое напряжение, чтобы сдвинуть эксцентрик: ниже порога (обычно 25-30% от максимума) он молчит. Найдите своё минимальное рабочее значение и начинайте любой пульс с него — ниже этого порога ШИМ просто не имеет смысла. **Вибромотор пищит на ШИМ — это нормально?** Да: стандартная частота ШИМ 490 Гц слышима, и мотор с корпусом её пропевают. Для тихой работы поднимите частоту ШИМ выше 20 кГц настройкой таймера — вибрация останется, писк уйдёт за пределы слуха. **Чем монетный мотор отличается от цилиндрического?** Принцип один: несбалансированный груз на валу. Монетный (ERM-чип) — плоский, стартует быстрее, трясёт поверхностно; цилиндрический — сильнее и дольше раскручивается. Для Arduino-уведомлений монетный удобнее: лёгкий, тонкий, ест меньше. ## Пассивный пьезозуммер и tone(): мелодии на Arduino (https://arduin-arsenal.ru/p/passivnyi-piezo-zummer-tone/) Пассивный пьезозуммер и tone() на Arduino: активный против пассивного, мелодия по массиву нот, noTone() и конфликт таймеров с ШИМ на пинах 3 и 11. **Зуммер не играет мелодии — что не так?** У вас активный зуммер: генератор внутри, ему доступна одна нота от любого HIGH. Для мелодий нужен пассивный пьезозуммер (KY-006 и подобные) — голая мембрана, которой частоту задаёт tone(). Проверка: digitalWrite HIGH — активный гудит, пассивный щёлкает и молчит. **Почему во время мелодии не работает analogWrite на пинах 3 и 11?** tone() занимает таймер Timer2, который на Uno же обслуживает ШИМ пинов 3 и 11. Пока играет мелодия, этот ШИМ недоступен. Решения: разнести функции по времени (noTone перед ШИМ), пересадить ШИМ на другие пины или читать [разбор конфликта таймеров](/p/tone-konflikt-tajmerov). **Можно ли играть две мелодии на двух пинах одновременно?** На классических AVR-платах нет: функция tone() использует один аппаратный таймер, и второй вызов перенастроит его. Две независимые мелодии — это Mega с его таймерами всё равно не решает, обычно берут второй чип или одну мелодию с аккордами по очереди. **Как сделать пьезозуммер громче?** Скважность и код не помогают — громкость упирается в мембрану. Работает: механическое усиление (отверстие/рог в корпусе как резонатор), подача питания на пьезо через транзистор с повышенного напряжения и попадание в резонансную частоту модуля (обычно около 4 кГц) — там пьезо поёт громче всего. ## Метеостанция на Arduino: соберите в симуляторе за вечер (https://arduin-arsenal.ru/p/simulyator-meteostancii-arduino/) Метеостанция на Arduino в симуляторе: DHT22 и BMP280, вывод на LCD 1602 I2C, логика прогноза по давлению и скетч, готовый к переносу на плату. **Чем заменить DHT22, если его нет в наличии?** DHT11: тот же однопроводный протокол, но диапазон 0-50 °C с шагом в целый градус и влажность с ошибкой ±5 % — для комнаты хватает, для улицы и подвала нет. В симуляторе обе модели — один компонент: тип задаётся вторым аргументом конструктора DHT, DHT11 или DHT22. **LCD подключён, но экран пустой — что смотреть первым?** Три вещи в порядке вероятности: адрес (половина модулей приходит с 0x3F, а не 0x27), наличие lcd.init() и lcd.backlight() в setup() и общая земля. В симуляторе скетч с 0x27 совпадает с карточкой дисплея, поэтому грабля адреса ловится уже на реальном железе. **Насколько честен прогноз по давлению?** Падение на 3-4 гПа за три часа ловит смену погоды заметно лучше монетки, но это не синоптика: высота над уровнем моря сдвигает норму, локальные фронты вносят поправки. Для дома достаточно правила «упало — берите зонт»; для науки нужен лог за сутки — тогда и сравнивать с метеосервисом есть по чему. **Куда расти после учебной версии?** Часы DS3231 (кормить прогноз трёхчасовым окном, а не временем с включения), лог на SD-карту и передача на сервер. Всё это есть в самоучителе по шагам: сначала экран и датчики, потом расписание, потом запись данных — каждый шаг проверяется в симуляторе до сборки. ## Светофор на Arduino: проект для новичка в симуляторе (https://arduin-arsenal.ru/p/simulyator-svetofora-arduino/) Светофор на Arduino для новичка в симуляторе: три светодиода, фазы на millis() без delay(), таблица таймингов с токами и честная разница эмуляции и макетки. **Какие резисторы ставить на светодиоды светофора?** 220 Ом — рабочее значение для 5-вольтовой логики: ток 12-14 мА, яркость полная, пин в безопасности. 330 Ом тоже годится — диоды чуть тусклее. Без резистора диод светит ярко ровно до момента, когда выходной транзистор пина устаёт жить. **Почему нельзя писать светофор на delay()?** Пока светофор одинок — можно, он даже будет работать. Но первая же кнопка или зуммер упрутся в то, что delay() блокирует loop() целиком: события внутри паузы теряются. millis()-версия дорабатывается добавлением пары строк, delay()-версия — переписыванием с нуля. **millis() переполнится через 49,7 дня — светофор сломается?** Нет. millis() возвращает unsigned long, он переполняется, но разность millis() - tFaza, посчитанная в той же беззнаковой арифметике, остаётся корректной в любой момент. Ломаются сравнения вида millis() > tFaza + 5000 — пишите разность, как в скетче выше. **Чем симулятор заменяет реальную макетку и чем нет?** Логику и тайминги — полностью: millis(), фазы и автомат работают в браузере так же, как на плате. Электрику — нет: перепутанная полярность диода или забытый резистор в симуляторе ничем не кончатся, потому что там нечему сгорать. Маршрут: логика в симуляторе, сборка и токи — на макетке. ## Умный дом на Arduino: реле, датчики — сначала в симуляторе (https://arduin-arsenal.ru/p/simulyator-umnyi-dom-arduino/) Умный дом на Arduino без риска: свет по PIR с таймаутом на millis(), реле и DHT22 в симуляторе, честная оговорка про 220 В и скетч, готовый к переносу. **Можно ли подключить реле напрямую к пину без модуля?** Катушка SRD-05VDC берёт 70-75 мА, а пину ATmega328P комфортно до 20 мА. Модуль существует ровно для этого: транзистор и оптопара между пином и катушкой. Без модуля нужен транзисторный ключ с диодом-обраткой; втыкать голое реле в пин нельзя. **PIR срабатывает сам по себе — как лечить?** Первые 30-60 секунд модуль калибруется и сыпет ложными — это норма, код можно начинать с паузы на millis(). Дальше крутите подстроечники: дальность 3-7 м и время выхода HIGH (ставьте минимум — таймаут считает скетч). Сквозняки от тёплого пола и солнце в окне PIR тоже видит. **Свет включается и сразу гаснет — в чём дело?** Классика активного LOW: у большинства модулей замыкание происходит от LOW, а скетч подаёт HIGH. Вторая причина — обнулённый TIMEOUT или неперезаписанный tSvet. Смотрите паспорт модуля: если реле щёлкает при digitalWrite(LOW), инвертируйте обе команды. **Чем это отличается от готовых систем умного дома?** Масштабом: у магазинных экосистем сотни устройств и облако, здесь — три детали и полный контроль над каждой строкой. Для обучения это плюс: виден весь путь от digitalRead до щелчка реле. Фундамент потом наращивается MQTT-брокером и управлением со смартфона без замены логики. ## Аквариум на Arduino: термометр и автокормушка без риска для рыб (https://arduin-arsenal.ru/p/simulyator-akvariuma-arduino/) Аквариум на Arduino в симуляторе: DS18B20 в воде, реле нагревателя с гистерезисом 1 °C, кормушка на серво по расписанию — логика без риска для рыб. **Насколько можно доверять DS18B20 в воде?** Только в гильзе: берите датчик в герметичном чехле с сальником для кабеля — голый корпус TO-92 в воде долго не проживёт. Точность ±0,5 °C для аквариума с запасом достаточна, а опрос чаще раза в секунду бессмыслен: вода меняет температуру медленно. **Что будет с рыбами при сбое?** Планируйте отказ заранее: у аквариумных нагревателей есть собственный термоконтакт — он не даст воде закипеть даже при зависшем реле. Кормушка в худшем случае накормит не вовремя, а взрослые рыбы голодом не убиваются — неделями; перекорм опаснее. Один датчик — одна функция, и всегда со встроенной страховкой. **Реле щёлкает слишком часто — как лечить?** Гистерезис слишком узкий или датчик сидит рядом с нагревателем и видит локальное тепло. Разнесите их по банке: DS18B20 — у противоположной стенки, на глубине плавания рыб; зону между включением и выключением держите не меньше 0,5-1 °C. **Кормушка сыпет разную порцию — это нормально?** Серво SG90 — не дозатор: порция зависит от барабана, влажности корма и скорости поворота. Практичный вариант — фиксированный угол 180° туда и обратно, без гонки за точностью: недокорм рыбам безвреден, перекорм — источник мутной воды. Точные дозаторы строят на шнеке с шаговиком, но это следующий уровень проекта. ## Датчик влажности почвы на Arduino: подключение и полив (https://arduin-arsenal.ru/p/datchik-vlazhnosti-pochvy-arduino/) Ёмкостный датчик влажности почвы v1.2 на Arduino: подключение к A0, калибровка по воздуху и воде, порог полива с гистерезисом, скетч и проверка в симуляторе. **Чем ёмкостный щуп лучше резистивного за те же деньги?** Сроком службы. У резистивного ток течёт по оголённым электродам прямо в грунте: электролиз и окисление съедают их за месяц-два, показания уплывают. У ёмкостного плата изолирована, контакта с грунтом нет — изнашивается только защитный лак. Бонус: показания меньше зависят от удобрений и кислотности. **Сухая земля даёт маленькие значения, а вода большие — это брак?** Нет, направление шкалы зависит от модуля: у резистивных щупов сухо — высоко, у части ёмкостных партий — наоборот. Снимите два эталона (воздух и стакан воды) и подставьте свои пороги: скетч меняется одной константой. В симуляторе шкала сухо 850 → вода 300, как в карточке палитры. **Как часто опрашивать датчик и включать помпу?** Грунт меняет влажность медленно: опрос раз в 5-30 секунд с запасом. Помпу — только через реле-модуль или транзистор: ножка пина отдаёт до 40 мА, мотору нужно больше. Поливайте короткими включениями с паузой на впитку: вода должна уйти вглубь, иначе стечёт мимо щупа, и датчик решит, что горшок всё ещё сухой. **Симулятор показывает 850 в воздухе, а мой щуп — другое число. Кому верить?** Симулятор повторяет палитру «Макетка»: 0 % — 850, 100 % — 300, между ними линейно. Это учебная шкала, а не даташит вашего экземпляра. Логика скетча — сравнения raw с порогами — переносится без правок: меняются только константы после вашей калибровки двумя эталонами. ## Энкодер KY-040 на Arduino: вращение, нажатие, меню (https://arduin-arsenal.ru/p/encoder-ky-040-arduino/) Энкодер KY-040 на Arduino: пины CLK, DT и SW, подтяжка INPUT_PULLUP, серый код квадратуры, ISR на CHANGE, антидребезг кнопки и меню с шагом позиции. **Энкодер считает по два-три за один щелчок — это нормально?** На живой плате — да, контакты дребезжат, и каждый фронт на CHANGE выглядит как шаг. Лечится конденсатором 0,1 мкФ от CLK и DT на землю или софт-фильтром: игнорировать фронты чаще, чем пара сотен микросекунд. В симуляторе дребезга нет — фазы серого кода чистые, и лишние счёты там означают ошибку в коде. **Можно ли повесить CLK не на D2 или D3?** На Uno и Nano внешние прерывания есть только на D2 и D3 — CLK ставим туда. На Mega прерываний больше, на ESP32 — любой GPIO. Без прерываний энкодер читают опросом в loop(), но между delay() щелчки теряются, так что опрос годится только для простых скетчей без пауз. **Чем энкодер в симуляторе отличается от настоящего KY-040?** Механикой. В браузере ручка крутится мышкой или кнопками, серый код на CLK/DT идеальный, дребезга нет, SW нажимается с удержанием. Логика скетча — ISR на CHANGE, счёт фронтов, фронт SW — та же, что для железа; разница только в чистоте сигнала. **Зачем энкодер, если есть кнопки плюс и минус?** Скорость и круг. Двадцать пунктов кнопками — двадцать нажатий; энкодер проходит их за полсекунды и продолжает с любого края по кругу. Плюс у него есть третья функция: короткое нажатие SW — «выбрать», удержание — «назад». Один элемент заменяет три кнопки и не занимает полкорпуса. ## Сдвиговый регистр 74HC595 на Arduino: 3 пина → 8 выходов (https://arduin-arsenal.ru/p/sdvigovyi-registr-74hc595-arduino/) Сдвиговый регистр 74HC595 на Arduino: пины DS, SHCP и STCP, как shiftOut толкает биты и зачем защёлка, каскад корпусов и скетч бегущей волны на 8 выходах. **Сколько светодиодов тянет один 74HC595?** Каждый выход отдаёт до 20 мА — по одному светодиоду с резистором 220 Ом на каждый Q хватает с запасом. Смотрите суммарный ток корпуса: восемь линий по полной — на грани, поэтому в больших матрицах ставят драйверы вроде MAX7219, где заодно и развёртка встроена. **На выходах мелькают промежуточные биты — что не так?** Не работает защёлка: STCP либо не подключён, либо дёргается во время сдвига. Без защёлки каждый такт SHCP тут же выкладывает сдвинутый байт на Q0-Q7 — отсюда мелькание. Держите STCP низким во время shiftOut и щёлкните фронтом HIGH после — картинка обновится мгновением. **MSBFIRST или LSBFIRST — что правильнее?** Оба правильные, если порядок битов в коде совпадает с тем, как вы развели Q0-Q7. Ошибка порядка проявляется зеркально: 0b10110001 при не том порядке читается как 0b10001101 — число 177 превращается в 141. В симуляторе карточка с дампом 0b показывает это наглядно: поменяйте порядок и сравните дампы. **В симуляторе один регистр, а мне нужен каскад. Что делать?** Карточка симулятора показывает один 8-битный регистр — этого достаточно, чтобы выучить семантику shiftOut и защёлки на каждом такте. Каскад строится на реальной макетке по схеме из раздела выше: QH' первого корпуса в DS второго, такты и защёлка общие. Логика «сдвинул N байт — щёлкнул защёлкой» не меняется. ## Симулятор 74HC595 онлайн: соберите сдвиговый регистр без железа (https://arduin-arsenal.ru/p/simulyator-74hc595-onlain/) Симулятор 74HC595 онлайн: скетч со shiftOut, восемь светодиодов Q0-Q7, статус защёлки и битовый дамп. Разберите MSBFIRST и latch до покупки регистра в браузере. **Нужна ли библиотека для 74HC595 в симуляторе?** Нет. shiftOut — часть ядра Arduino, и рантайм понимает его с настоящей семантикой: восемь тактов, MSBFIRST и LSBFIRST, защёлка по фронту STCP через digitalWrite. Никаких include и установок — скетч из статьи запускается как есть. **Карточка регистра не появилась — что проверить?** Карточка рисуется, когда скетч вызвал shiftOut: первые пины данных и такта становятся входами регистра. Если светодиоды стоят на нуле и статус «ждёт latch (STCP HIGH)…» — защёлка не дёргается: проверьте, что digitalWrite фронтом HIGH уходит на пин STCP после shiftOut. **Можно ли собрать каскад из двух 595 в симуляторе?** Карточка показывает один 8-битный регистр: этого достаточно, чтобы выучить сдвиг, порядок битов и защёлку. Каскадную разводку — QH' первого корпуса в DS второго, общие такты и защёлка — собирайте на макетке; логика «сдвинул два байта — щёлкнул защёлкой» та же самая. **Чем ваш симулятор лучше Wokwi для 595?** Wokwi тоже умеет 74HC595, и это честный инструмент. Разница в пороге входа: наш симулятор на русском, без регистрации, карточка регистра собирается сама из shiftOut и показывает дамп со статусом защёлки — ближе к разбору по тактам. Полное сравнение инструментов — в отдельном обзоре. ## Симулятор TM1637 онлайн: индикатор без железа (https://arduin-arsenal.ru/p/simulyator-tm1637-onlain/) Симулятор TM1637 онлайн: карточка дисплея из палитры «Макетка», скетч с TM1637Display, showNumberDec и showNumberDecEx с двоеточием, таймер 25:00 в браузере. **Чем симулятор TM1637 отличается от живого модуля?** Электрикой и таймингами: в браузере нет токов сегментов и протокола из двух проводов — карточка рисует то, что скетч положил в буфер. Логика showNumberDec, двоеточие 0x40, ведущие нули и усечение до четырёх разрядов повторены честно: код переносится на живую плату без правок. **setBrightness(0) в симуляторе гасит дисплей — а на железе?** На живом модуле 0 — минимальная, но видимая яркость: контроллер TM1637 держит ШИМ от нуля до семи. Полное гашение в библиотеке — clear() или setBrightness(5, false). В симуляторе ноль выключает экран целиком — считайте это наглядной подсказкой, что 0 не для работы, а для сна. **Можно ли вывести буквы или знак градуса?** Через setSegments() сырыми байтами — да: на семи сегментах осмысленно выглядят A, b, C, d, E, F, H, L, P, U, минус и самодельный градус. Полного алфавита нет физически: M и W на семи сегментах не рисуются. Для текста берите LCD 1602 или OLED. **Двоеточие мигнуло один раз и пропало — что не так?** После showNumberDecEx кадр перезаписывается любым обычным showNumberDec, и бит 0x40 теряется. Выводите время только через showNumberDecEx с 0x40 в каждом обновлении — в скетче выше это строка с тернарником colon ? 0x40 : 0. ## Шаговый двигатель 28BYJ-48 и ULN2003: подключение к Arduino (https://arduin-arsenal.ru/p/shagovyi-dvigatel-28byj-48-arduino/) Шаговый двигатель 28BYJ-48 на Arduino: подключение к ULN2003, честные 2048 шагов на оборот, последовательность фаз, питание 5 В и проверка в симуляторе. **Сколько шагов писать в конструктор: 2048, 2038 или 4096?** Для Stepper.h — 2048: библиотека делает полные шаги, и круглое число даёт минимальную накопленную ошибку. 4096 — это полушаг, Stepper.h его не умеет, полушагом управляют вручную или через AccelStepper. Точное значение с редуктором 63,7:1 — около 2038 полных шагов; разница всплывает только при накоплении оборотов. **Мотор греется даже без вращения — это брак?** Нет, это норма: при удержании позиции катушки остаются под током, и корпус 28BYJ-48 честно греется до 40-50 градусов. Если нагрев мешает, снимайте питание после остановки или снижайте скважность — стратегии разобраны в уроке про ток удержания. **Что исполняет симулятор, а что останется за железом?** Рантайм исполняет Stepper.h по-настоящему: конструктор с числом шагов, setSpeed и блокирующий step с темпом от скорости — позиция на карточке меняется по шагам. За кадром остаются ток фаз, нагрев, момент и пропуск шагов под нагрузкой — их проверяют на живом моторе по светодиодам ULN2003. **Можно ли питать 28BYJ-48 от USB-порта?** Две активные фазы тянут порядка 200 мА плюс плата Arduino — впритык к лимиту USB в 500 мА, и при просадке мотор теряет момент. Для экспериментов на минуту хватит, для работы — внешний БП 5 В на 1 А с общей землёй с Arduino. ## ИК-пульт на Arduino: коды кнопок и библиотека IRremote (https://arduin-arsenal.ru/p/ir-pult-arduino-irremote/) ИК-пульт на Arduino: подключение приёмника, коды кнопок CAR MP3, старый API decode_results и новый IrReceiver, resume после decode, проверка в симуляторе. **Коды из таблицы не совпадают с моим пультом — что не так?** Копеечные пульты шлют коды по раскладке своей партии, и цифры плавают. Снимите коды своих кнопок сканером из урока и подставьте в скетч: сравнение с decodedIRData.command остаётся тем же, меняются только константы. **Почему скетч с decode_results не работает?** Это API IRremote 2.x, который снят с поддержки: четвёртая версия не собирает его, и рантайм симулятора тоже (проверено прогоном — ошибка компиляции на decode_results). Пять строк миграции: IRremote.hpp вместо .h, IrReceiver.begin вместо enableIRIn, decodedIRData.command вместо results.value, resume без изменений. **Зачем вызывать IrReceiver.resume()?** После успешного decode приёмник остановлен, чтобы вы спокойно прочли данные. resume() запускает приём заново; без него получите ровно одну посылку за запуск. Это верно и для старого API: irrecv.resume() стоял в каждом рабочем скетче 2.x. **Можно ли Arduino не только принимать, но и слать ИК?** Да, ИК-светодиодом через резистор и IrSender.sendNEC — библиотека умеет передатчик. В симуляторе передатчика нет: пульт только отправляет, приёмник только принимает, ретранслятор проверяйте на железе. Разбор sendNEC — в уроке про ИК-пульт из Arduino. ## Светодиодная матрица 8x8 MAX7219: подключение к Arduino (https://arduin-arsenal.ru/p/svetodiodnaya-matrica-max7219-arduino/) Светодиодная матрица 8x8 MAX7219 на Arduino: пять проводов DIN, CS, CLK, ток и яркость, каскад 4-в-1, скетч змейки на LedControl и узор в симуляторе. **Можно ли проверить скетч MAX7219 в симуляторе?** Логику узора — да: карточка матрицы в палитре «Макетка» рисует 64 пикселя мышкой, кнопки Очистить/Залить и счётчик горящих точек на месте. Исполнять LedControl рантайм не умеет — вызовы дадут ошибку в Serial. Байты и шрифты проверяют печатью в Serial, пиксели — на живой матрице. **Какая библиотека лучше: LedControl, MD_MAX72XX или Max72xxPanel?** Для одной-двух матриц и обучения — LedControl: три вызова и понятные индексы. Для бегущих строк и панелей 4-в-1 удобнее MD_MAX72XX с зонами и шрифтами, а Max72xxPanel закрывает связку с Adafruit-GFX. Скетчи взаимно не переносимы: выбирайте под задачу сразу. **Матрица светится тускло — куда смотреть?** Яркость чипа задают setIntensity(0..15) и резистор тока на модуле: больше 8 брать смысла мало, тусклость обычно в питании — тонкие провода, общая земля по каскаду, просадка на всех 64 пикселях. Проверьте ещё shutdown(0, false): спящий чип держит матрицу погашенной. **Почему после подачи питания на матрице мусор?** Регистры MAX7219 после включения содержат случайное, и чип показывает его до первой записи. Рабочий минимум в setup: shutdown(0, false), setIntensity, clearDisplay(0) — и картинка чистая. Это же правило верно для каскада: clearDisplay нужно для каждого адреса модуля. ## EEPROM на Arduino: сохранение настроек после сброса питания (https://arduin-arsenal.ru/p/eeprom-arduino-sohranenie-nastroek/) EEPROM на Arduino: 1 КБ энергонезависимой памяти, EEPROM.update и read, ресурс 100 000 циклов записи, хранение настроек после сброса питания. **Сколько данных влезает в EEPROM Arduino Uno?** 1 КБ — 1024 байта с адресами 0-1023, по одному байту за вызов read или write. Число int занимает 2 байта, long и float — по 4. Nano и Pro Mini на ATmega328 — столько же; у Mega — 4 КБ, у ESP32 EEPROM эмулируется во флеше. **Что исполняет симулятор, а что остаётся за железом?** Честно исполняются read, write, update и length — прогон: update(7, 123), перезапуск, read вернул 123, length() дал 1024. put/get структур не исполняются, износ ячеек и задержка записи 3,3 мс не эмулируются. Всё, что скетч пишет в браузере, можно проверить чтением прямо там же. **На сколько хватит ресурса 100 000 циклов?** Зависит от частоты записи: раз в секунду — около 28 часов, раз в минуту — почти два месяца, раз в час — годы. Лечится двумя приёмами: update(), который пропускает неизменные байты, и wear leveling — переносом точки записи по кольцу ячеек. **Сохранятся ли значения после перезагрузки страницы?** Внутри сессии — да: «Запуск», «Стоп» и повторная заливка скетча память не стирают, это подтверждено прогоном. Перезагрузка вкладки создаёт новую плату с чистой памятью. На живой плате EEPROM держит данные годами без питания — сессии у неё нет. ## analogRead в вольты: переводим код АЦП 0-1023 в напряжение (https://arduin-arsenal.ru/p/analogread-v-volty-arduino/) Как перевести analogRead 0-1023 в вольты: АЦП 10 бит, шаг около 4,9 мВ, формула U = код × 5 / 1023, делитель для 12 В, шум плавающего входа. **Сколько вольт в одном делении analogRead?** При опорном 5 В один шаг шкалы — 5 В / 1023, примерно 4,9 мВ. Формула перевода: U = код × 5,0 / 1023,0. При INTERNAL 1,1 В на живой плате шаг ужимается до 1,1 мВ — точнее, но вход больше 1,1 В уже не потянет. **Почему в формуле делят на 1023, а не на 1024?** Это конвенция Arduino: деление на 1023 даёт ровно 5,00 В на коде 1023 и совпадает с ожиданием новичка. Строго ступень шкалы равна Vref/1024 — разница менее половины милливольта на краю, ниже шума входа. Главное — не смешивать знаменатели в одном проекте. **Что из этого исполняет симулятор?** Всё по аналоговой части: analogRead с ползунком из палитры «Макетка», дробная арифметика, печать с двумя знаками — прогон даёт raw=512 и u=2.50 V. Не исполняется analogReference: INTERNAL даёт «Неизвестное имя», опорное всегда 5 В. Делитель и его нагрев — это внешняя схема, её роль играет ползунок. **Как измерить 12 В, если вход боится выше 5 В?** Делителем из двух резисторов: 10 кОм сверху и 7,5 кОм снизу дадут 5,14 В на входе при 12 В питания. Считайте коэффициент, умножайте в скетче обратно, калибруйте по мультиметру. Прямое подключение 12 В к A0 пробивает вход АЦП — плата чинится заменой микросхемы. ## Матричная клавиатура 4x4 на Arduino: подключение и сканирование (https://arduin-arsenal.ru/p/matrichnaya-klaviatura-4x4-arduino/) Матричная клавиатура 4x4 на Arduino: 16 кнопок на 8 пинов, сканирование строк и столбцов, INPUT_PULLUP, раскладка массивом и живой сканер в симуляторе. **Сколько пинов Arduino занимает клавиатура 4x4?** Восемь: четыре строки и четыре столбца, земля и питание ей не нужны. На Uno это D2-D9. Шестнадцать кнопок — по одной ноге на две кнопки; расширение без роста пинов — I2C-расширитель на PCF8574. **Работает ли Keypad.h в симуляторе?** Нет: скетч с Keypad.h компилируется, но первый getKey() даёт ошибку «Неизвестное имя» — класс библиотеки рантаймом не поддержан. В браузере работает сканер без библиотеки: pinMode строк на OUTPUT, INPUT_PULLUP на столбцах, digitalWrite/digitalRead — он исполняется целиком. **Какой уровень строк использовать: HIGH или LOW?** В симуляторе сцена выставлена так: активная строка HIGH, нажатый столбец читается LOW. На живой плате уровни зеркальные — строку ведут LOW при подтянутых столбцах. Меняется один уровень в скетче; логика, формула индекса и раскладка не трогаются. **Почему нажимаются три кнопки, а сканер показывает четыре?** Это призрак (ghosting): ток из активной строки течёт через две кнопки и общий столбец, и четвёртый угол прямоугольника электрически неотличим от нажатого. Для кодового замка с одним пальцем не страшно; для аккордов — диод в разрыв каждой кнопки. ## Джойстик KY-023 на Arduino: подключение, map() и серво (https://arduin-arsenal.ru/p/joystick-ky-023-arduino/) Джойстик KY-023 на Arduino: оси VRx/VRy 0-1023, кнопка SW на INPUT_PULLUP, map() на угол серво 0-180, центр и мёртвая зона. Проверка без железа. **Что исполняет симулятор для KY-023?** Всё по цифровой и аналоговой части: analogRead обеих осей с ручки карточки, digitalRead кнопки SW, map() и серву — прогон даёт x=1023/ugol=180 на краю и возврат в 90 по кнопке. Не эмулируются шум потенциометров и механический износ — на живом модуле центр гуляет на 5-15 значений. **Почему кнопка SW печатает 1, пока её не трогаешь?** SW замыкается на землю при нажатии, поэтому пин настраивается INPUT_PULLUP: подтяжка держит HIGH в покое, вдавленная ручка тянет пин к LOW. Логика инвертированная — pressed это 0. Внешний резистор не нужен, подтяжка встроена в плату Arduino. **Как перевести показания оси в угол серво?** Функцией map: ugol = map(x, 0, 1023, 0, 180). Она целочисленная и линейная; для обратного направления — map(x, 0, 1023, 180, 0). Центр ручки даёт около 90, но из-за разброса центра лучше калибровать: мерить реальный центр при старте и мапить от него. **Чем KY-023 отличается от потенциометра?** Ничем по электрике — те же два потенциометра 10 кОм, только механически скрещённые под пружинной ручкой с возвратом в центр, плюс кнопка. Вся разница в удобстве: ручка возвращается в центр сама, и осей две сразу под одну руку. ## Мелодия Марио на Arduino: ноты для зуммера и tone() (https://arduin-arsenal.ru/p/melodiya-mario-arduino/) Мелодия Марио на Arduino через tone(): массив нот и длительностей, частоты нот для пьезозуммера, паузы и noTone. Скетч проверяется в браузере без железа. **Почему в браузере мелодия не звучит?** Рантайм исполняет tone(): частоту видно на карточке пьезозуммера («tone: 659 Гц») и в Serial, темп смены нот совпадает с длительностями. Аудиовыхода у симулятора нет — услышать мотив можно на живой плате, скетч переносится без правок. **Чем пассивный пьезозуммер отличается от активного?** В пассивном (KY-006) голая пьезомембрана: частоту задаёт tone() со скетча — поэтому он играет мелодии. В активном генератор внутри: HIGH — ровное «пи» одной высоты, частоту он не читает. Проверка в одну секунду: активный пищит от digitalWrite, пассивный молчит. **Что исполняет симулятор, а что остаётся за железом?** tone с частотой и длительностью, noTone, массивы и темп через delay исполняются по-настоящему — прогон показал смену частот 659/784/523 в темпе массива. Не эмулируются: звук, полифония на двух пинах и конфликт таймеров с ШИМ — их проверяют на плате. **Как сыграть свою мелодию вместо Марио?** Замените два массива: NOTY — частоты в герцах из таблицы выше, DLIT — длительности в миллисекундах (четверть примерно 150-200, восьмая 75-100). Нулевая частота — пауза. Длину массивов держите одинаковой и не забудьте обновить VSEGO. ## Эффекты WS2812 на Arduino: радуга и бегущий огонь (https://arduin-arsenal.ru/p/ws2812-effekty-arduino/) Эффекты на WS2812 и NeoPixel: радуга через колесо цвета, бегущий огонь со шлейфом, Adafruit_NeoPixel setPixelColor и show. Проверка скетчей в браузере. **Что исполняет симулятор, а что останется за железом?** Весь цикл эффектов: begin, setPixelColor (обе формы — три байта и упакованный 32-битный цвет), show, clear, fill, setBrightness, numPixels, Color и ваши собственные функции вроде Wheel. За кадром — ток ленты, просадки питания и гамма-коррекция: их смотрят на живой ленте. **Почему лента не реагирует на скетч?** Три частые причины: забыли show() после setPixelColor (буфер меняется, кадр не уходит); не вызвали strip.begin() в setup(); перепутан тип цветов — нужен NEO_GRB для большинства WS2812B. В симуляторе те же правила: без show() карточка стоит на месте. **Как замедлить или ускорить эффект?** Интервал между кадрами: в скетче это порог в millis() (120 мс) и множитель сдвига цвета (kadrov * 4). Кадр каждые 50 мс — быстрый вихрь, каждые 300 — медленное переливание. Скорость и плавность задаются только этими двумя числами, сам цикл не трогается. **Чем этот подход отличается от FastLED?** Adafruit_NeoPixel — базовая библиотека с ручными эффектами, её рантайм исполняет целиком. FastLED удобнее готовыми функциями (fill_rainbow, палитры, sin8), но в браузере из него исполняется база: addLeds, show, setBrightness и CRGB-цвета. Тонкие функции FastLED проверяйте на живой ленте. ## Логгер данных на Arduino: SD-карта и DS3231 с меткой времени (https://arduin-arsenal.ru/p/sd-loger-dannyh-arduino/) Логгер данных на Arduino: SD-карта и DS3231 пишут CSV с меткой времени, DHT11 добавляет температуру. Проверка в браузере и ловушка FILE_WRITE. **Где в симуляторе видно, что записалось в файл?** В карточке «Модуль SD-карты»: список файлов задаётся или пополняется скетчем, содержимое log.csv показано построчно. После каждого println файл в карточке обновляется — не нужно ничего извлекать, чтобы проверить, что метка времени и температура записались. **Какую SD-карту берут для логгера?** Обычную microSD до 32 ГБ с форматированием FAT16/FAT32; карты 64 ГБ и больше размечают exFAT, который стандартная SD-библиотека Uno не читает. Для урока хватит любой старой карты на 1-4 ГБ: лог из строк CSV растёт медленно, гигабайт — это месяцы записи. **Почему в файле остаётся только одна строка?** Скетч переоткрывает файл с FILE_WRITE на каждой записи, а рантайм при каждом open обнуляет файл (в живой библиотеке это дозапись). Решение: открыть файл один раз в setup() и держать открытым, как в скетче выше, — прогон подтверждает, что строки накапливаются. **Как часто можно писать без вреда для карты?** Раз в секунду — комфортный ритм для CSV-лога: запись блоками по 512 байт не изнашивает карту годами. Чаще сотых долей секунды пишут только с буфером в ОЗУ и пакетной записью. Раз в минуту и реже карта живёт вообще без ограничений. ## Датчик пламени на Arduino: KY-026 и сигнализация (https://arduin-arsenal.ru/p/datchik-plameni-arduino/) Датчик пламени KY-026 на Arduino: аналоговый выход 0-1023, порог срабатывания, сирена через tone() и светодиод. Сигнализация проверяется в браузере без огня. **Чем A0 отличается от D0 на модуле KY-026?** A0 — аналоговое значение ИК-излучения 0-1023, его сравнивают с порогом в скетче и подстраивают на месте. D0 — цифровой сигнал с компаратора LM393: порог задаётся подстроечником на платке, скетч читает просто «есть/нет». Для обучения берут A0: вся логика видна в числах. **Что исполняет симулятор, а что остаётся за железом?** Ползунок карточки течёт в analogRead, порог и сирена на tone()/noTone() исполняются по-настоящему — прогон: 820 на A0, светодиод горит, тон рвётся 1500/2000 Гц. Не моделируются: цифровой выход D0, ИК-физика на дистанции и ложные тревоги от солнца — их проверяют на живом модуле. **На каком расстоянии датчик видит пламя?** Спичка или зажигалка — уверенно с 0,5-1 метра, свеча — с 30-50 сантиметров, дальше зависит от яркости огня и засветки. Угол обзора узкий, около 60 градусов. В симуляторе дистанцию заменяет ползунок: чем сильнее «пламя», тем выше analogRead. **Почему сигнализация срабатывает сама, без огня?** Почти всегда это ИК-помеха: солнце в окно, лампа накаливания или обогреватель дают те же сотни на A0, что и пламя. Лечится гистерезисом (разные пороги вкл/выкл), подтверждением по времени — держать значение выше порога полсекунды — и размещением датчика вдали от окна. ## Сервопривод-шлагбаум на Arduino: SG90, кнопка и зуммер (https://arduin-arsenal.ru/p/servoprivod-shlagbaum-arduino/) Шлагбаум из сервопривода SG90 на Arduino: кнопка проезда, зуммер-бип, стрелка 0–90 градусов и тайминги на delay. Скетч проверяется в браузере без железа. **Что исполняет симулятор, а что останется за железом?** Attach, write, углы, INPUT_PULLUP, tone с частотой и длительностью, все тайминги на delay — исполняются, прогон показал цикл 0 → 90 → 0 с «бипом» 1200 Гц и тремя печатями Serial. Не эмулируются: ток удержания, просадки питания, дрожь вала и сама стрелка — в браузере виден угол, а не рычаг. **Какой сервопривод взять для шлагбаума?** Для настольного макета — SG90: 9 граммов, 1,8 кг·см, хватает с запасом. Для уличной стрелки в полметра — уже MG996R с металлическим редуктором и моментом от 9 кг·см: SG90 с пластиковыми шестернями выкрошит зуб при первом же ударе рукой. **Почему стрелка не открывается сама по датчику?** Потому что в этом скетче датчика нет — только кнопка. Автоматизация добавляется одним условием: вместо digitalRead читают дистанцию HC-SR04 или PIR, оба сценария разобраны в уроках про шлагбаум с гистерезисом и шлагбаум с PIR-датчиком — ссылка ниже. **Можно ли менять углы 0 и 90 на свои?** Да, write принимает любое значение от 0 до 180. Для стрелки обычно хватает сектора 0–75: на полном 90 она встаёт вертикально и ловит кронштейн. Меняйте оба вызова write одинаково — и не забудьте, что пауза 2500 мс задана под этот же темп. ## Ночник на Arduino: фоторезистор и плавное включение света (https://arduin-arsenal.ru/p/fotorezistor-nochnik-arduino/) Ночник на фоторезисторе и Arduino: делитель напряжения, порог темноты, гистерезис 150 единиц и плавный разгон ШИМ. Скетч проверяется в браузере на стенде. **Что исполняет симулятор, а что останется за железом?** Весь алгоритм: analogRead с ползунка карточки, оба порога, гистерезис, ШИМ-разгон и паузы — прогон показал разгон до 255 за ~0,8 с и неподвижность в зоне 350. За кадром: реальная освещённость комнаты и разброс экземпляров LDR — их смотрят на живой плате, пороги подгоняют по печатям Serial. **Почему ночник мигает в сумерках и как это лечится?** Освещённость в сумерках дрейфует вокруг одного значения, и однопороговый скетч включает и выключает свет при каждом колебании. Лечение — гистерезис: включение ниже 300, выключение выше 450. Пока значение между порогами, состояние не меняется вообще. **Как подобрать пороги под свою комнату?** Откройте монитор порта и смотрите печати: значение под лампой, при вечернем свете, при выключенном верхнем. Берите порог темноты чуть ниже вечернего показания, порог света — на 100–200 единиц выше. В симуляторе тот же приём: качайте ползунок и смотрите цифры в Serial. **Чем фоторезистор отличается от датчика освещённости BH1750?** LDR — это просто меняющееся сопротивление за копейки: пороги в «сырых» единицах 0–1023, от экземпляра к экземпляру плавают. BH1750 — цифровой люксметр на I2C: выдаёт люксы сразу и одинаково у всех экземпляров, но стоит в несколько раз дороже. Для ночника фоторезистора достаточно с запасом. ## Термостат на Arduino с DHT22: реле и гистерезис (https://arduin-arsenal.ru/p/termostat-arduino-dht22/) Термостат на Arduino и DHT22: реле обогрева, две уставки с гистерезисом 1,5 градуса, защита от nan, интервал опроса 2 секунды. Скетч работает в браузере. **Что исполняет симулятор, а что останется за железом?** DHT22 целиком: конструктор с типом 22, begin, readTemperature с дрожью; реле через digitalWrite с активным LOW; обе уставки, гистерезис и isnan-проверка компилируются и работают. Не эмулируются: реальный нагрев комнаты, ток катушки и износ контактов — температуру в браузере ведут ползунком. **Почему реле щёлкает каждую секунду?** В скетче одна уставка вместо двух: температура у порога колеблется, и реле дёргается на каждом колебании. Добавьте вторую границу — включение при 18,0, выключение при 19,5 — и количество щелчков упадёт в разы. Это не шутка ради тишины: частые коммутации выжигают контакты реле. **Как переделать скетч под охлаждение, а не обогрев?** Инвертируйте две ветки: при t > T_VERH включаем (кондиционер, вытяжка), при t < T_NIZ выключаем. Гистерезис остаётся тем же — мёртвая зона работает в обе стороны одинаково. Логика не меняется, потому что реле всё равно замыкает и размыкает одну и ту же нагрузку. **Почему в браузере nan не случается, а в скетче проверка стоит?** Рантайм всегда «отвечает» числом — карточка датчика не обрывается. Проверка isnan нужна живой плате: DHT22 при обрыве провода, плохом контакте или слишком частом опросе возвращает nan, и без проверки термостат примет мусор за решение. Скетч один и тот же для браузера и железа — проверка просто ждёт своего часа. ## Парктроник на Arduino: HC-SR04 и зуммер (https://arduin-arsenal.ru/p/parktronik-arduino-hc-sr04/) Парктроник на Arduino своими руками: HC-SR04 меряет дистанцию, зуммер пищит чаще и выше у препятствия, ближе 20 см — сплошной тон. Проверка в браузере. **Что исполняет симулятор, а что останется за железом?** Вся измерительная цепь: тройка digitalWrite с delayMicroseconds, pulseIn с честной длительностью эха (сантиметры × 58), деление, оба порога и tone со шкалой частот — прогон показал 1280 Гц на 60 сантиметрах и 2000 Гц ближе 20. Звука в браузере нет: частоту видно на карточке зуммера и в Serial, услышать — на живой плате. **Почему датчик показывает 0 или виснет?** pulseIn вернул 0 — эхо не вернулось до таймаута. В симуляторе это значит дистанцию за пределами 400 сантиметров, на плате — датчик смотрит в пустоту или на звукогасящую поверхность. Лечится третьим аргументом pulseIn с таймаутом и проверкой на 0 перед расчётом. **Чем мой парктроник хуже заводского?** Заводской — это четыре датчика в бампере, калибровка под корпус и индикатор-шкала. Механика та же: расстояние — в частоту. Свой на Arduino выигрывает в гибкости: шкалу частот, пороги и реакцию меняете в скетче, а не паяльником. Добавьте светодиодную шкалу или дисплей — и это уже готовое устройство. **Как добавить индикацию, кроме звука?** Три варианта по возрастанию сложности: один светодиод на порог 20 сантиметров (digitalWrite рядом с tone), светодиодная шкала из трёх-четырёх штук по зонам дистанции, дисплей LCD или OLED с числом. Логика не меняется — после вычисления sm добавьте вывод на выбранный индикатор. ## HX711: подключение тензодатчика и калибровка весов на Arduino (https://arduin-arsenal.ru/p/hx711-podklyuchenie-kalibrovka/) Подключение тензодатчика к HX711: распиновка E+, E−, A+ и A−, калибровка за четыре шага, скетч весов с тарой и порогом дозирования. Проверено в браузере. **Почему весы показывают мусор даже после тары?** Проверьте сигнальную диагональ: перепутанные A+ и A− дают минус, оторванный провод — хаос. 90 процентов случаев решается прозвонкой четырёх проводов датчика. **Можно ли повесить четыре тензодатчика от платформенных весов на один HX711?** Да, параллельно: все E+ вместе, все E− вместе, A+ и A− попарно. Мосты суммируются, и HX711 видит общий вес платформы. Механика важнее электрики: датчики стоят в углах и равномерно принимают груз. **Чем HX711 лучше схемы на операционном усилителе?** Тем, что её не надо собирать и настраивать: готовый усилитель с нормированным коэффициентом 128, цифровым выходом и фильтром помех. Схема на ОУ потребует подбора резисторов и борьбы с дрейфом нуля. **Как выводить вес в килограммах?** Разделите get_units() на 1000 или сразу уменьшите калибровочный коэффициент в тысячу раз. Печатайте с округлением до 5–10 граммов: последняя цифра всё равно шумит. ## Пирометр на Arduino: бесконтактный термометр с MLX90614 и LCD (https://arduin-arsenal.ru/p/pyrometr-arduino-mlx90614/) Бесконтактный термометр на MLX90614: подключение по I2C к Arduino, две температуры из одного чипа, скетч пирометра с LCD 16×2 и порогом. Проверено в симуляторе. **MLX90614 или DS18B20 — что взять для первого термометра?** DS18B20 дешевле и точнее при контакте, но требует прижима и минуты на установление. MLX90614 меряет мгновенно и без касания, зато температуру воздуха в комнате не покажет вовсе. **Почему датчик показывает минус на блестящем металле?** Низкий коэффициент излучения: металл отражает холодный фон вместо собственного тепла. На живой плате помогает малярный скотч или матовая краска на цели; в симуляторе значение просто ставится ползунком. **Можно ли мерить температуру воды и воздуха?** Воду — да: она излучает почти как идеальный излучатель. Воздух — нет: газ прозрачен для инфракрасного диапазона, readAmbientTempC покажет корпус датчика, а не температуру атмосферы. **С какого расстояния мерить температуру тела?** С трёх-пяти сантиметров: при угле зрения 35 градусов пятно на лбу остаётся в пределах измеряемой зоны, и фон не подмешивается. С полуметра датчик усреднит лоб с волосами и стеной. ## DS18B20: подключение к Arduino, несколько датчиков на шине и отладка (https://arduin-arsenal.ru/p/ds18b20-podklyuchenie/) Подключение DS18B20 к Arduino по шине 1-Wire: подтяжка 4,7 кОм, адреса датчиков, паразитное питание, калибровка и разбор типичных ошибок при монтаже. **Почему DS18B20 показывает −127.00?** Это не температура, а код «датчик не ответил». Проверяйте подтяжку 4,7 кОм, провода зонда и питание: в девяти случаях из десяти виновата обвязка, а не сенсор. **Чем DS18B20 отличается от DHT22?** DHT22 отдаёт ещё и влажность, но обновляется раз в две секунды и живёт на коротком проводе. DS18B20 держит −55…+125 °C и адресуется по 64 битам, поэтому на одном проводе живут десятки датчиков. **Сколько датчиков можно повесить на одну линию?** На обычном питании десяток работает спокойно даже на кабеле 10-15 метров. На паразитном питании предел жёстче: два датчика, и только при 9 битах разрешения. **Зачем нужен резистор, если библиотека всё делает сама?** Подтяжка это электрическая часть, а не программная. Без неё линия висит в воздухе, и контроллер не может отличить «никто не подключён» от «уровень низкий». **Можно ли подключить DS18B20 к ESP32?** Да, библиотеки те же: OneWire и DallasTemperature. ESP32 работает на 3,3 В, и подтяжку надо ставить на 3,3 В, иначе выход Arduino пробьёт его вход. ## TFT-дисплей ILI9341 и ST7789: подключение к Arduino по SPI (https://arduin-arsenal.ru/p/tft-displej-ili9341-st7789/) Подключение TFT-дисплея ILI9341 и ST7789 к Arduino по SPI: распиновка, библиотеки Adafruit_ST7789 и TFT_eSPI, память платы, PROGMEM для шрифтов и картинок. **Чем ILI9341 отличается от ST7789?** Размером и флешем. ILI9341 умеет 240×320 и часто идёт с флешем на 4 МБ. ST7789 встречается в 135×240 и в 240×320, флеша нет. **Сколько памяти нужно для TFT на Uno?** Кадр 240×320 занимает 153 600 байт, а у Uno оперативной памяти 2 048 байт. Кадр не влезает в семьдесят пять раз, рисуют частями. **Почему экран чёрный, хотя скетч заливается без ошибок?** Проверяйте питание (модуль ждёт 3,3 В, а подали 5 В), потом CS, DC, MOSI и SCK, потом RESET, и только потом библиотеку. **Какую библиотеку выбрать: Adafruit_ST7789 или TFT_eSPI?** Для первого экрана берите Adafruit: ставится в менеджере и выдаёт внятные ошибки. TFT_eSPI быстрее, но требует правки User_Setup.h. **Нужен ли провод MISO?** Для обычной отрисовки нет. MISO нужен только для чтения из флеша модуля ILI9341. Без него на Uno высвобождается D12. ## ESP32-S3: распиновка DevKitC, платы Waveshare и отличие от C3 (https://arduin-arsenal.ru/p/esp32-s3-raspinovka/) Распиновка ESP32-S3-DevKitC-1: 36 выводов GPIO, USB на GPIO19 и GPIO20, разница с ESP32-C3, октальная PSRAM, встроенный JPEG-декодер и камера. **Чем ESP32-S3 отличается от ESP32-C3?** Ядром: у S3 два Xtensa LX7 на 240 МГц и есть векторные инструкции, у C3 один RISC-V на 160 МГц. Периферия: у S3 есть полноценный USB OTG, встроенный декодер JPEG и 14 каналов касания, у C3 только Serial и JTAG. **Сколько GPIO у ESP32-S3-DevKitC-1?** В чипе 45 линий, девять из них заняты внутренней шиной флеша. На гребёнках платы выведено 36: с GPIO0 по GPIO21 и с GPIO35 по GPIO48. На модулях с восьмибитной PSRAM ещё три вывода (35, 36, 37) наружу не выведены. **Почему на плате два разъёма USB?** Один ведёт на мост USB для прошивки и Serial, второй подключён к выводам 19 и 20 напрямую и даёт нативный USB OTG чипа, он же Serial и JTAG для отладки. Пользоваться обоими интерфейсами одновременно нельзя, выводы общие. **Можно ли сделать из ESP32-S3 клавиатуру?** Да, и это главный аргумент за S3. На C3 есть только Serial и JTAG, а на S3 есть USB OTG, поэтому чип представляется компьютеру как устройство HID без дополнительных микросхем. **Что означает N16R8 на наклейке модуля?** N16 это 16 МБ флеша, R8 это 8 МБ PSRAM с восьмибитной шиной, буква V в конце означает флеш с восьмибитной шиной. Под флеш и PSRAM отданы выводы с GPIO26 по GPIO37, часть из них наружу не выведена. ## PN532: подключение NFC-модуля к Arduino, три режима и чтение MIFARE (https://arduin-arsenal.ru/p/pn532-podklyuchenie/) Подключение PN532 к Arduino: три режима I2C, SPI и UART, переключение через SEL0 и SEL1, чтение UID карты MIFARE Classic, запись блоков и отладка. **Как переключить PN532 на I2C?** Переключатель или перемычки SEL0 и SEL1 на плате выставляются до подачи питания, чип читает их только в момент включения. Соответствие уровней напечатано рядом с переключателем, у разных плат оно своё. **Почему сканер I2C не находит PN532?** Почти всегда модуль остался в режиме UART, который стоит по умолчанию. Второй по частоте случай: нет подтяжки на SDA и SCL или не соединена общая земля. **Какой адрес у PN532 по I2C?** 0x24, он зашит в чип и не меняется. На одной шине может быть только один PN532, в отличие от датчиков с перемычками на плате. **Чем PN532 отличается от RC522?** RC522 работает только по SPI и только со стандартом 14443-A. PN532 умеет ещё 14443-B и 18092, читает телефон как карту, умеет эмуляцию карты и обмен между двумя устройствами, и работает по трём интерфейсам. **RC522 работает на 125 кГц или 13,56 МГц?** На 13,56 МГц, как и PN532. Настоящие 125 кГц это модули на чипах EM4100 и T5577, они несовместимы с обоими. В магазинах RC522 называют модулем RFID, и отсюда путаница. ## PCA9685: подключение 16-канального ШИМ-драйвера к Arduino (https://arduin-arsenal.ru/p/pca9685-podklyuchenie/) Подключение PCA9685 к Arduino по I2C: 16 каналов ШИМ по 12 бит, частота до 1,6 кГц, адрес 0x40, 16 сервоприводов вместо выводов Uno и разбор регистров. **Сколько сервоприводов можно подключить к PCA9685?** 16 на одном чипе, и на всех нужен отдельный источник питания, потому что ток серво идёт не через Arduino. На одной шине I2C можно поставить до восьми чипов и получить 128 сервоприводов. **Какой адрес у PCA9685 и как его поменять?** По умолчанию 0x40. Адрес задаётся выводами A0, A1 и A2: на модулях с тремя перемычками доступно восемь адресов, с одной перемычкой только два. **Чем PCA9685 лучше обычного ШИМ на Uno?** У него 16 каналов вместо 6, разрешение 12 бит вместо 8, частота задаётся программно и одинакова для всех каналов, а сервоприводы не занимают выводы и не отключают ШИМ на 9 и 10. **Почему сервоприводы через PCA9685 дёргаются?** Чаще всего из-за питания: серво потребляет сотни миллиампер в момент движения, и если он запитан от вывода 5 вольт платы, происходит просад. Нужен отдельный блок питания с общей землёй. **Нужно ли питать модуль отдельно?** Сам чип питается от 3,3 или 5 В через вывод VCC, этого достаточно. А вот вывод V+ для сервоприводов и мощных лент нужно питать отдельно, иначе чип будет работать, а нагрузка просядет. ## INA219: подключение датчика тока и напряжения к Arduino по I2C (https://arduin-arsenal.ru/p/ina219-podklyuchenie/) Подключение INA219 к Arduino по I2C: модуль в разрыв питания, шунты 0,1 и 0,02 Ом, формула тока, регистры датчика, отличие от ACS712 и мультиметра. **Как подключить INA219 к Arduino?** Модуль ставится в разрыв питания нагрузки: VIN+ к источнику, VIN- к нагрузке. Земля модуля соединяется с землёй нагрузки, а выводы SDA и SCL идут на шину I2C. Отдельный вывод VCC питает логику датчика. **Какой адрес у INA219 по I2C?** 0x40, он зашит в микросхему и не переключается. Два INA219 на одной шине поставить нельзя без внешнего мультиплексера, зато по напряжению они не мешают друг другу. **Какой шунт выбрать: 0,1 Ом или 0,02 Ом?** 0,1 Ом даёт предел 3,2 А и лучшую точность, это выбор для бытовых нагрузок. 0,02 Ом выдерживает 14,5 А и почти не снижает напряжение на нагрузке, но ток измеряет грубее. **Как посчитать ток по показаниям INA219?** Ток равен напряжению на шунте, делённому на сопротивление шунта. В миллиамперах формула простая: милливольты делим на омы и получаем миллиамперы. **Почему INA219 показывает ненулевой ток при выключенной нагрузке?** Почти всегда не соединена земля модуля с землёй нагрузки. Тогда напряжение шины считается относительно чужого нуля, и ток получается правдоподобным, но бессмысленным.