Как стать автором
Обновить

Комментарии 14

С софтом - здорово, но с железом - так делать (использовать датчик тока для опроса напряжения) нельзя.

Вас не взволновали показания тока в 10А? Сам датчик тока между выходом, выдающим напряжение и землёй, эквивалентен замыканию этого пина на землю. В зависимости от того, что является источником напряжения на пине, эти 10А могут быть вполне реальными (аккумулятору они по силам, а дальше что-то сгорит).

думаю все же, что это просто мусорная информация, т.к. при разомкнутом состоянии датчика со стороны клемм, показывает также "Current: -13.51A"

А измерять напряжение вместо тока не пробовали?

Именно оно и измеряется, используется voltage sensor, не датчик тока acs712! На картинках он (voltage sensor).
В коде ничего не меняется, и можно его упростить в этой связи. Спасибо, что заметили.
Вот что значит долго разглядывать acs712!

Не заметить было сложно - это было единственное упоминание модели "датчика". После чтения даташит стало еще непонятнее как же это работает и что считывается.
Судя по фото этот "voltage sensor" датчик представляет собой просто делитель на двух резисторах.

По хорошему бы узнать какое напряжение поступает на ардуино и уже это значение умножать на коэффициент резисторного от делителя(voltage sensor представляет из себя резисторный делитель).

Сила тока тут расчётная от напряжения, причём почему рассчитывается именно так не понятно (current = (voltage - 2.5) / 0.185; когда на V=0 это будет -2,5/0,185)

 Скорее всего на гребенку дублируются выводы с светодиодов индикации и там просто будет подниматься высокий уровень.

Не проще взять внешний АЦП и использовать его вместо ардуины? В ядре есть поддержка разных АЦП, можно выбрать что-то простое. Вся работа с АЦП будет сведена к чтению из "файла" значений. Ну можно и на питоне конечно, если у вас много батарей :)

Можно АЦП с функцией оповещения о изменении уровня и просто по прерыванию с gpio реагировать. На вскидку не подскажу конкретной модели, но не думаю, что это редкость. Кстати, возможно в ядре есть уже готовый драйвер, который за значением АЦП следит.

Если вас интересует только превышение конкретного уровня напряжения (выше-ниже), а не его значение, можно и без АЦП вообще обойтись, решив задачу вообще пассивными элементами. Просто получая на gpio 1 или 0.

Вероятно подойдет вам ADS1115. Есть на али готовые платы, есть выход с компаратора, есть драйвер в ядре.

Ярчайший пример, как не надо делать.

1) Заставить ардуинку спамить в порт каждые несколько миллисекунд - отличное решение

2) Заставить писать человекочитаемым текстом, что бы потом его парсить - офигенное

3) Зачем-то прилепить лишний датчик тока к ардуинке - гениально.

4) Зачем-то вообще взять ардуинку, мерять не понятно что, вместо использования двух (!!!) резисторов для получения бинарного сигнала - достойно войти в лучшие анналы костылестроения.

(аж плакать хочется)

Правильное решение навскидку:

1) замерить уровень low battery

2) в любом калькуляторе (гугл voltage divide calculator) подобрать номиналы резисторов, что бы на любую свободную ножку GPIO приходило 3в

3) написать одну микропрограммку "на ножке 1 - играем файл"

4) добавить одну строчку в crontab, что бы звалось раз в минуту.

Все :)

  1. Кто вам мешает delay поменять ? Кроме того, порт не обязательно открытым держать.

  2. А с чего вы взяли, что c arduino только это будет сыпаться ?

  3. Точно, 30 руб. не лишние.

  4. См. п. 2 + отсутствие возможности озвучивания, например "низкий заряд" + "разряжено".

    *Кроме того, возможность остаться без gpio raspberry, если на выходе прыгает напряжение, например, при замене батарей. Конденсатор ? Возможно.

    **Через cron не работает озвучивание, как ни странно. Ни через crontab -e, ни через sudo nano /etc/crontab.

  1. Вы автор этого безобразия и вы пытаетесь рассказать, как это надо делать, а не я. То, что ардуинка жрет миллиамперы (лень вспоминать/читать сколько) - вам даже в голову не пришло. А это батарейное питание все-таки.

  2. В статье про это ни слова. Но суть в другом, с одной стороны вы спамите, с другой стороны вы очищается все, что попало в буфер до и читаете строку. Потом ищите совпадения. На такой длинной строке и коротком совпадении вам удается поймать. Но когда параметров станет больше и строка тоже станет длинной, то вы будете чаще читать головы-хвосты сообщений с рандомными смещениями, а не сообщения целиком. И тогда начнутся боли. По этому не надо так. Совсем не надо. Если уж есть желание сделать нормально, то воспользуйтесь моделью клиент-сервер с нормальным протоколом. Например modbus - в него умееют все.

  3. Проблема в том, что тут 30 рублей, потом там .. в итоге потом то ножек не хватает, то питания, то еще чего-то.

  4. какой конденсатор? зачем?? если вы уж так боитесь высокого напряжения на ножке (хотя почему-то не боитесь остального типа "ардуинка сгорит"), ок добавьте защиту из еще одного элемента. гугл "ESD protection" и "overvoltage protection". Но вобще я подозреваю, что в этом "UPS" стоит банальный DC-DC со схемой зарядки и напряжений выше 5в там нет

*** смотрите логи/дебаг. сильно подозреваю, что у вас разные окружения для питона под пользователем/кроном и питон не может найти нужного. просто aplay прекрасно работает под кронтабом, только что проверил под ubuntu 22

  1. сколько ж она ест ?

Hidden text

  1. вовсе нет. достаточно timeout выставить при открытии порта. космические скорости тут не обязательны.
    3. ...
    4. нога raspberry может быть дороже, чем arduino. но это не повод для спора.

    *** да, смотрел. по логам все "ок". но звука нет. и root и pi в кроне побывали.

  1. У меня тут даже слов нет. Смените показометр. Гугл "arduino nano current consumption". там один usb-uart потребляет около 15мА. Мелочь на фоне потребления малинки, но из таких мелочей все и состоит.

  2. вы вообще не поняли про что речь. (и потом) и загуглите, что означает таймаут в функции открытия последовательного порта.

5) nano
6) systemd
7) python
8) arduino
гремучая смесь того что не надо.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории