Anton & GhostNova
Я как раз заканчивал кастомную механическую клавиатуру, корпус напечатал на 3D-принтере, и вот думаю добавить небольшую правку в прошивку, чтобы она реагировала на окружающий свет. Поможешь мне её протестировать?
Звучит как интересное решение. Давай схему и подключение датчиков, посмотрю, где логика сбивается. Я ещё и энергопотребление проверю, эти светодатчики иногда шум добавляют. Просто скинь код и краткое описание аппаратной части.
Конечно.
**Аппаратная часть**
- 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); // полсекунды
}
```
Это основной код. Если возникнут проблемы, скажи, на каком этапе. Я буду следить за потреблением энергии – всего пара миллиампер на датчик, так что всё должно быть в порядке. Если понадобится помощь с подключением светодиода или чем-то ещё, обращайся.
Выглядит неплохо, но все-таки проверь адрес I²C на всякий случай, вдруг датчик настроен на 0x23 или 0x5C. Если в Serial пишет "Датчик не найден" – скорее всего, проблема с подтягивающим резистором или проводкой. Задержка в 500 миллисекунд для демонстрации подойдет – для настоящей клавиатуры лучше добавить дебоунсинг порога или использовать скользящее среднее, чтобы убрать мерцание. Сообщи мне, если светодиод вообще не переключается; возможно, пин по умолчанию установлен в режим INPUT, просто переключи его в режим OUTPUT в setup. Удачи.
Звучит отлично, спасибо, что предупредил. Припаяю светодиод к D13 и выставлю его на вывод OUTPUT в секции setup. Если не заработает, перепроверю подтягивающие резисторы и I²C адрес. Спасибо за помощь.