Эмулятор фоторезистора онлайн: LDR на стенде без платы
Ночник на фоторезисторе — самый частый первый проект «само включается» и первое же разочарование: порог в скетче стоит, а на плате он срабатывает то от лампы, то от тени руки. Урок про ночник на фоторезисторе собирает схему по шагам — здесь же свет переезжает в браузер: ползунок освещённости вместо фонарика, пороги подбираются за минуты, а не за вечера.
Фоторезистор добавляется на стенд симулятора вручную из каталога: жёлтый провод, подпись LDR, у детали — ползунок «освещённость» от 0 до 100 % с иконкой солнца. Двигаете свет — analogRead() едет следом. Ниже — таблица «условие → значение», скетч ночника, гистерезис двух порогов и честная граница между моделью и живым делителем.
Что видно на стенде
Ручной фоторезистор в каталоге — деталь с ползунком «освещённость» 0-100 %: ярче свет — выше значение analogRead, как у модуля с делителем. Рядом с ползунком печатаются оба числа сразу: 40 % → 409 — процент света превращается в число на входе по прямой формуле «умножить на 10,23». Квадрат с солнцем подсвечивается ореолом, когда свет яркий — выше 60 %: состояние видно боковым зрением, без чтения цифр.
- Шкала света 0-100 %: двигаете ползунок — значение на входе едет от 0 до 1023 без пропусков.
- Парные числа: рядом с ползунком видны и проценты света, и то, что уйдёт в analogRead() — пересчитывать в голове не нужно.
- Ореол при ярком свете: выше 60 % солнце в детали подсвечивается — порог «светло» ловится взглядом.
- Автопуть без детали: если фоторезистор не добавлять, а скетч читает analogRead(), движок вешает на вход ползунок «Датчик на входе» 0-1023 — тот же свет, только в сырых числах.
- Монитор порта: печатайте значения в Serial — таблица калибровки собирается прямо из браузера.
Таблица «условие → значение»
| Условие | Ползунок «освещённость» | analogRead() |
|---|---|---|
| Кромешная тьма | 0 % | 0 |
| Сумерки | 25 % | 256 |
| Комната (старт стенда) | 40 % | 409 |
| Пасмурный день | 50 % | 512 |
| Лампа вплотную | 75 % | 768 |
| Прямое солнце | 100 % | 1023 |
В браузере таблица линейная и потому предсказуемая: каждые 10 % света — примерно 102 единицы на входе. Живой фоторезистор живёт по-другому: его шкала нелинейна, а стартовая точка зависит от номинала резистора-делителя и конкретного экземпляра детали. Поэтому таблица из симулятора — скелет логики порогов, а не паспорт вашего LDR: свою таблицу снимают Serial.print на плате. Люксы и честную метрологию освещённости ведёт лендинг про датчик BH1750 — он отдаёт люксы готовым числом.
Скетч-проба: ночник с порогом
const int PIN_LDR = A0;const int PIN_LED = 8; void setup() { pinMode(PIN_LED, OUTPUT); Serial.begin(9600);} void loop() { int x = analogRead(PIN_LDR); if (x < 300) { digitalWrite(PIN_LED, HIGH); // стемнело — включаем } else { digitalWrite(PIN_LED, LOW); } Serial.println(x); delay(200);}Порог 300 — стартовый ориентир: подвигайте ползунок света и найдите свою границу. Сырое значение в мониторе — привычка, которая на плате превратится в калибровку. Электрику делителя и выбор резистора под свой экземпляр разбирает лендинг про подключение фоторезистора — в браузере делитель уже внутри модели.
Два порога: включение и выключение
const int PIN_LDR = A0;const int PIN_LED = 8;bool svetGorit = false; void setup() { pinMode(PIN_LED, OUTPUT); Serial.begin(9600);} void loop() { int x = analogRead(PIN_LDR); if (!svetGorit && x < 300) { // стемнело — включаем svetGorit = true; } if (svetGorit && x > 500) { // рассвело — гасим svetGorit = false; } digitalWrite(PIN_LED, svetGorit ? HIGH : LOW); delay(200);}Один порог на включение и выключение дребезжит на границе: свет мигает, реле щёлкает. Зазор между «стемнело» (300) и «рассвело» (500) лечит это целиком — та же механика гистерезиса, что у термостата. В браузере зазор проверяется движением ползунка через границу туда-обратно: включился на 300, держится до 500, погас.
Соберите цепь по условной схеме: светодиод, резистор, кнопка, земля.
Подгружаем интерактив…
Лаборатория выше — чтение условных схем: светодиод, резистор, кнопка, земля. Навык прямой: фоторезистор на макетке всегда стоит в паре с резистором-делителем, и без привычки находить на схеме резистор и землю делитель собирается долго. Потренировали глаз — схема из урока про ночник читается на одном дыхании.
Что видит симулятор, а что железо
| Проверка | Симулятор | Только железо |
|---|---|---|
| Логика порогов «темно/светло» | целиком, ползунком света | то же |
| Гистерезис двух порогов | да, проверяется в скетче | то же |
| Таблица «свет → значение» | линейная модель 0-1023 | своя: зависит от делителя и экземпляра |
| Перевод люксов в число | нет: движок не знает люксов | да — или BH1750, отдающий люксы сам |
| Делитель из двух резисторов | модель «модуль с делителем» | да: номинал резистора меняет всю таблицу |
| Дрожь от наводок и теней | нет | да — калибровать по Serial.print |
Грабли ночника
- Порог с чужого проекта: у соседа 200, у вас в комнате 450 — таблица значений LDR у каждого своя; свою снимают по методике отладки через Serial, а не с чужих цифр.
- Один порог на всё: включение и выключение на одной границе — мигание на закате; лечится зазором двух порогов, как в пробе выше.
- Свет из окна: порог, найденный вечером, утром врёт — в симуляторе ползунок от погоды не зависит, на плате учитывайте суточный ход.
- Перевернутый делитель: порядок деталей в делителе меняет наклон шкалы — светло может стать «меньше», а не «больше»; сверяйтесь с подсказкой каталога: ярче свет — выше значение.
- Ожидание люксов из analogRead: число 0-1023 — не люксы; перевод и честные замеры — у цифрового BH1750.