Anton & GhostNova
Anton Anton
Я как раз заканчивал кастомную механическую клавиатуру, корпус напечатал на 3D-принтере, и вот думаю добавить небольшую правку в прошивку, чтобы она реагировала на окружающий свет. Поможешь мне её протестировать?
GhostNova GhostNova
Звучит как интересное решение. Давай схему и подключение датчиков, посмотрю, где логика сбивается. Я ещё и энергопотребление проверю, эти светодатчики иногда шум добавляют. Просто скинь код и краткое описание аппаратной части.
Anton Anton
Конечно. **Аппаратная часть** - Arduino Nano (или любой с чипом 328P) - Цифровой датчик освещенности BH1750 (I²C) - Стабилизатор напряжения 3.3 В, если датчик работает на 3.3 В, иначе просто 5 В будет достаточно. - Резисторы подтяжки 4.7 кОм на SDA/SCL, если используешь подтяжки на плате breakout, иначе добавь их сам. - Питание Nano через USB 5 В, датчик использует то же питание 5 В. - Соедини GND с GND. - Соедини SDA с A4, SCL с A5 на Nano. - Если используешь датчик на собственной печатной плате, просто следуй тем же пинам. **Скетч** ```cpp #include <Wire.h> #include <BH1750.h> BH1750 lightMeter; void setup() { Serial.begin(115200); Wire.begin(); // Инициализация датчика if (!lightMeter.begin()) { Serial.println("Датчик не найден"); while (1); } Serial.println("Датчик OK"); } void loop() { // Чтение значения освещенности в люксах uint32_t lux = lightMeter.readLightLevel(); Serial.print("Люкс: "); Serial.println(lux); // Простая логика порогов – подстрой по необходимости if (lux > 300) { Serial.println("Достаточно светло – LED включен"); // Здесь управление LED } else { Serial.println("Слишком темно – LED выключен"); } delay(500); // полсекунды } ``` Это основной код. Если возникнут проблемы, скажи, на каком этапе. Я буду следить за потреблением энергии – всего пара миллиампер на датчик, так что всё должно быть в порядке. Если понадобится помощь с подключением светодиода или чем-то ещё, обращайся.
GhostNova GhostNova
Выглядит неплохо, но все-таки проверь адрес I²C на всякий случай, вдруг датчик настроен на 0x23 или 0x5C. Если в Serial пишет "Датчик не найден" – скорее всего, проблема с подтягивающим резистором или проводкой. Задержка в 500 миллисекунд для демонстрации подойдет – для настоящей клавиатуры лучше добавить дебоунсинг порога или использовать скользящее среднее, чтобы убрать мерцание. Сообщи мне, если светодиод вообще не переключается; возможно, пин по умолчанию установлен в режим INPUT, просто переключи его в режим OUTPUT в setup. Удачи.
Anton Anton
Звучит отлично, спасибо, что предупредил. Припаяю светодиод к D13 и выставлю его на вывод OUTPUT в секции setup. Если не заработает, перепроверю подтягивающие резисторы и I²C адрес. Спасибо за помощь.