
Интернет-магазин «Неглупый Дом»
В проекте про MT3608 на этом сайте зуммер сигнализирует о ПРЕВЫШЕНИИ безопасного напряжения на выходе — здесь противоположная, но не менее частая проблема повышающих преобразователей: когда входное напряжение (например, от разряжающейся батареи) падает настолько низко, что SX1308 уже не может "дотянуть" его до нужного выходного значения, и выход тоже начинает проседать.
Повышающий преобразователь поднимает более низкое входное напряжение до более высокого выходного, но имеет предельный коэффициент усиления — когда вход проседает слишком сильно, преобразователю не хватает "запаса", и держать целевое выходное значение он уже не может, выход начинает проседать пропорционально. Это принципиально другая по характеру неисправность, чем превышение напряжения, хотя она случается на той же семье компонентов — имеет смысл отслеживать её отдельно.
Используется тот же метод измерения делителем напряжения, что и в других проектах сайта, но здесь мониторится ВЫХОДНОЕ напряжение против целевого значения, и сигнал подаётся при падении НИЖЕ порога, а не при превышении.
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему. Номиналы делителя и
// пороги — пример под ваш целевой диапазон.
const int SENSE_PIN = A0;
const int BUZZER_PIN = 8;
const float DIVIDER_RATIO = 2.0;
const float ARDUINO_VREF = 5.0;
const float EXPECTED_VOLTAGE = 12.0; // целевой выход вашего SX1308
const float LOW_THRESHOLD = 10.5; // ниже этого считаем просадку
void setup() {
Serial.begin(9600);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
int raw = analogRead(SENSE_PIN);
float measured = (raw / 1023.0) * ARDUINO_VREF * DIVIDER_RATIO;
Serial.print("Выход SX1308: ");
Serial.print(measured);
Serial.println(" В");
digitalWrite(BUZZER_PIN, measured < LOW_THRESHOLD ? HIGH : LOW);
delay(500);
}
Дополнительных библиотек не требуется — только `analogRead()`.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 129 ₽ 116 ₽ (экономия 13 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.