HsMouse
Experimental control software for robotics, tested on Raspberry Pi 5.
System Configuration:
To configure the system, the files in the sysconf directory must be
installed:
- Copy the UDEV
*.rulefiles into/etc/udev/rules.d - Copy
config.txtto/boot - Reboot the Raspberry Pi for the changes to take effect
Low Power Consumption When Powered Off:
By default, the Raspberry Pi 5 keeps the SoC powered on (in a shutdown state) even after the system is shut down. As a result, it continues to consume 1.2-1.6W of power, even with nothing plugged in except for power. For more details, see: Reducing Raspberry Pi 5's Power Consumption
This can be easily fixed by editing the EEPROM configuration with the following command:
user@alarm$ sudo rpi-eeprom-config -e
Ensure that POWER_OFF_ON_HALT=1 is set, while leaving the other variables
unchanged:
[all]
BOOT_UART=[...]
POWER_OFF_ON_HALT=1
BOOT_ORDER=[...]
To run rpi-eeprom-config on Arch Linux, you’ll need to install the
rpi5-eeprom package from the PKGBUILDs repository. Run the following
commands to do so:
user@alarm$ git clone https://github.com/archlinuxarm/PKGBUILDs
user@alarm$ cd PKGBUILDs/alarm/rpi-eeprom
user@alarm$ makepkg -s
user@alarm$ sudo pacman -U rpi5-eeprom-*.pkg.tar.xz
GPIO and PWM Access Without Root:
To enable GPIO and PWM access without root privileges on the Raspberry Pi 5, follow these steps:
- Create two new user groups:
gpiodandpwm - Add your user to both groups
- The UDEV rules installed previously will grant the
gpiodandpwmuser groups permission to access the respective subsystems.
This configuration ensures that GPIO and PWM operations can be performed without needing root access.
Libcamera Setup
The upstream libcamera package in Arch Linux ARM (as of August 2025) has compatibility issues with the Raspberry Pi kernel, preventing detection of official camera modules. Until this is resolved upstream, you'll need to build the Raspberry Pi Foundation's supported version:
user@alarm$ sudo pacman -S boost cmake gcc git libdrm libexif libjpeg libpng libtiff meson pkgconf python-jinja python-ply python-yaml
user@alarm$ git clone https://github.com/raspberrypi/libcamera
user@alarm$ cd libcamera
user@alarm$ meson setup build -Dprefix=/usr
user@alarm$ ninja -C build
user@alarm$ sudo ninja -C build install
References:
I2C Setup:
The provided config.txt exposes /dev/i2c-0 on GPIO pins 0 (SDA) and 1 (SCL).
Ensure your user has I2C permissions:
user@alarm$ sudo usermod ${USER} -aG i2c
Verify the interface works. Expected output (no devices yet):
user@alarm$ sudo i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Battery Monitoring with INA226
This repository includes INA226 voltage/current sensing via I2C. For battery-powered operation:
Hardware Connections
- Battery terminals: V+/V- on INA226
- Load current path (Pi + motor controllers): I+/I- on INA226
- I2C lines: SDA/SCL (GPIO 0/1)
- 3V3 power and GND
The INA226 should appear at address 0x40:
user@alarm$ sudo i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Build Instructions:
- Install
stack. It’s recommended to useghcupfor installation. - Run
maketo compile the libraries and executables
Note: You may need to install system dependencies on your host first (e.g.,
libgpiod,libcamera, etc.)
