Для обеспечения работы мобильных устройств, в первую очередь - моих небольших роботов требуется удобный аккумулятор, с контролируемым разрядом батареи.
Самым дешевым вариантом оказался UPS HAT Board Module li-pol 2600mAh , естественно из Китая.
Устанавливается и запускается модуль однократным коротким нажатием на кнопку, затем долгим её зажатием. После этого подаётся питание и Raspberryзапускается.
Подключаемся к Raspberry через SSH, и проверяем состояние нашего бесперебойника.
Если ранее не использовали интерфейс I2C, тогда его требуется запустить этого выполним команду:
$ sudo raspi-config
и убедимся, что поддержка I2C включена в Interfacing Options → I2C.
Далее:
sudo apt-get install i2c-tools
i2cdetect -y -a 1
Должны увидеть:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- 36 -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Из даташита MAX17048 мы можем узнать, что он действительно имеет адрес 0b0110110 или 0x36. Также в даташите содержится информация о регистрах, среди которых нас в первую очередь интересуют VCELL с адресом 0x02 и SOC с адресом 0x04. В первом регистре содержится напряжение аккумулятора, а во втором — уровень его заряда в процентах.
$ i2cget -f -y 1 0x36 2 w
0xf0c0
Необходимо поменять местами байты в пакете. 0xf0c0 -> 0xc0f0 .
Запускаем интерпретатор Python:
$ python3
>>> 0xc0f0* 78.125 / 1000000 # показания в вольтах
3.85875
$ exit()
Уровень заряда определяется в процентаx:
$ i2cget -f -y 1 0x36 4 w
0x4a42
Необходимо поменять местами байты в пакете. 0x4a42-> 0x424a.
$ python3
>>>0x424a / 256.0 # уровень заряда в %
66.2890625
$ exit()
По тестам оказалось, что на последних версиях исправлена проблема работы от аккумулятора. При подаче питания аккумулятор заряжается и ничего непредвиденного не происходит. Разрядки до аккумулятора до нуля так же не наблюдается
А это значит, что данный модуль отлично подойдёт для нормального завершения работы, при снижении заряда батареи до определённого уровня, при этом поддерживая работу скрипта достаточно продолжительное время (около часа при малой загрузке процессами)
Статья составлена при поддержке клуба робототехники и магазина "Робот и Я" на Кантемировской - лучшего магазина с интереснейшими роботами!