me to use a slightly higher resolution on the USB camera. Also, my old Pi which was built into my car
would get fairly hot during the summer. Being somewhat reluctant to relocate it and well, you know,
gadgets, I bought a UPS PIco with the separate fan kit. This means I can cool the Pi and hopefully wire
up the dashcam back to the car ignition. The PIco provides an uninterruptible power supply, lots of
additional functionality and for the cost seems a great solution.
Important note, the UPS PIco uses GPIO22 & GPIO27 to communicate with the Pi.
These need to be free for it to function.
Using the Pi camera, USB camera, GPS and a couple of LEDs I would get around 8 minutes
of run time from a fully charged 300mAh battery. The 3000mAh gave me around 40 minutes but
it is large, about the size of a 9v battery.
Here is my quick setup guide…
I2C setup
First install i2c-tools.
[root@picodash ~]# pacman -S i2c-tools
Edit /boot/config.txt to configure the bootloader to enable i2c hardware. It should just need
uncommenting and changing from 'off' to 'on'
device_tree_param=i2c_arm=on
Edit /etc/modules-load.d/raspberrypi.conf and add 'i2c-dev' & 'i2c-bcm2708'. My file looks like this:-
[root@picodash ~]# cat /etc/modules-load.d/raspberrypi.conf
bcm2708-rng
snd-bcm2835
i2c-bcm2708
i2c-dev
Now we need to reboot the Pi and after that we can check if the PIco is recognised. If you have
a newer Pi (2B or B+) then the i2cbus will be number 1, for older Pi's it will be 0.
[root@picodash ~]# reboot
.
.
.
[root@picodash ~]# i2cdetect -y 1 (or i2cdetect -y 0 (on a A+))
Great! Time to enable python to use the GPIO pins.
[root@picodash scripts]# pacman -S python-pip
[root@picodash scripts]# pip install RPi.GPIO
To test the PIco UPS is working run this small python script which enables and monitors GPIO22 and
GPIO27. This program is included with the other scripts or copy and paste it from below.
[root@picodash ]# /root/scripts/picofssd.py
[+] Click to view the script
[-] Hide the script
[-] Hide the script
#!/usr/bin/python
# Import the libraries to use time delays, send os commands and access GPIO pins
import RPi.GPIO as GPIO
import time
import os
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) # Set pin numbering to board numbering
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Setup pin 27 as an input
GPIO.setup(22, GPIO.OUT) # Setup pin 22 as an output
while True: # Setup a while loop to wait for a button press
GPIO.output(22,True)
time.sleep(0.4) # Allow a sleep time of 0.25 second to reduce CPU usage
GPIO.output(22,False)
if(GPIO.input(27)==0): # Setup an if loop to run a shutdown command when button press sensed
os.system("sudo shutdown -h now") # Send shutdown command to os
break
time.sleep(0.4) # Allow a sleep time of 0.25 second to reduce CPU usage
# Import the libraries to use time delays, send os commands and access GPIO pins
import RPi.GPIO as GPIO
import time
import os
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) # Set pin numbering to board numbering
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Setup pin 27 as an input
GPIO.setup(22, GPIO.OUT) # Setup pin 22 as an output
while True: # Setup a while loop to wait for a button press
GPIO.output(22,True)
time.sleep(0.4) # Allow a sleep time of 0.25 second to reduce CPU usage
GPIO.output(22,False)
if(GPIO.input(27)==0): # Setup an if loop to run a shutdown command when button press sensed
os.system("sudo shutdown -h now") # Send shutdown command to os
break
time.sleep(0.4) # Allow a sleep time of 0.25 second to reduce CPU usage
The flashing green UPS LED should switch off. After a second or two it will start flashing about
twice a second. The CHG LED will probably also come on. Control-C to stop the program.
So this script runs automatically after boot up we'll create a start up service for it...
[root@picodash scripts]# vi /usr/lib/systemd/system/picoups.service
[Unit]
Description=PIco UPS startup
After=local-fs.target
[Service]
ExecStart=/root/scripts/picofssd.py
Type=simple
[Install]
WantedBy=multi-user.target
Save the file and enable the service.
[root@picodash]# systemctl enable picoups
Start the service to test. The green UPS LED should start flashing as before.
[root@picodash]# systemctl start picoups
To check it really is working first set the number of seconds before the Pi will shut down after power loss.
[root@picodash ]# i2cset -y 1 0x6B 9 20
Pull the power supply from your Pi. After 20 seconds the Pi will shutdown. If you return the power
before then the shutdown of the Pi will be cancelled.
The software RTC
An optional step. If you need an alternative system clock you can use the PIco.
Edit /etc/modules-load.d/raspberrypi.conf and add 'rtc-ds1307' followed by another reboot
[root@picodash ~]# vi /etc/modules-load.d/raspberrypi.conf
bcm2708-rng
snd-bcm2835
i2c-bcm2708
i2c-dev
rtc-ds1307
Create the device (change i2c-1 to i2c-0 for an A+ model Pi)
[root@picodash ~]# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
Check the clock is working.
[root@picodash ~]# hwclock -r
Write the current system time to this new clock
[root@picodash ~]# hwclock -w
Write the current system time to this new clock
[root@picodash ~]# hwclock -w
If you would like the PIco to update the Pi's system time after a reboot then you need to create
this device each time and tell it to update the system time from the PIco. For example after
a reboot you would need to run...
[root@picodash ~]# echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
[root@picodash ~]# hwclock -s
Another optional step, if you'd like to check the PIco is responding...
The PIco has two jumpers RXD0 & TXD0, which when in place allow you to connect to it via the
serial port. The serial line has to be available by removing the parts that contain ttyAMA0 from the
/boot/cmdline.txt
[root@picodash ~]# cp /boot/cmdline.txt /boot/cmdline.txt.org
looks something like this...
[root@picodash]# cat /boot/cmdline.txt
[root@picodash ~]# pacman -S minicom
When done reboot the Pi, login and connect to the PIco
[root@picodash]# minicom -b 38400 -o -D /dev/ttyAMA0
When connected press the UPSR (UPS Reset) button on the PIco. It will restart and display
hardware and firmware information and the current status. If the text is garbled type Ctrl+A then z
followed by an x (eXit and reset) and Yes to leave the mincom program. Then reconnect as above.
Here are some example commands (please note, your keystrokes will not be displayed).
@version
@status
@bat
If you need /dev/ttyAMA0 for something else, for example a GPS don't forget to remove the
RXD0 and TXD0 jumpers from the PIco when you have finished and it has been shut down.
Check here for manuals on the UPS PIco and further documentation.
Battery runtime after power loss before shutdown in seconds (fssd_batime)
# i2cset -y 1 0x6B 9 30
( Must be > 15 secs. & < 255 secs. )
Fan mode (fmode)
# i2cset -y 1 0x6B 15 [ 0x00 (fan off) | 0x01 (fan on)
Fan speed (fspeed)
# i2cset -y 1 0x6B 16 [ 0x00 (0%) | 0x01 (100%) | 0x02 (25%) | 0x03 (50%) | 0x04 (75%) ]
------
Battery voltage (mV)
# i2cget -y 1 0x69 1
Voltage supplying RPi (mV)
# i2cget -y 1 0x69 3
Voltage supply USB (mV)
# i2cget -y 1 0x69 5
Voltage supply EPR (mV)
# i2cget -y 1 0x69 7
Temperature in C of SOT-23 sensor (values in BCD format)
# i2cget -y 1 0x69 12
Temperature in C of TO-92 sensor if installed (values in BCD format)
# i2cget -y 1 0x69 13
------
Unconditional FSSP and power off (when battery powered)
# i2cset -y 1 0x6B 0 0xcc
Reset UPS Pico
# i2cset -y 1 0x6B 0 0xee
Voltage supplying Pi on J8 (5v)
# i2cget -y 1 0x6B 2
Battery voltage on UPS Pico error
# i2cget -y 1 0x6B 4
Battery sensor temperature
# i2cget -y 1 0x6B 6
------
Immediately start FSSP and restart
# i2cset -y 1 0x6B 8 0x00
Enable and start counting down the Still Alive Time Counter in seconds ( 0x01 - 0xfe )
# i2cset -y 1 0x6B 8 0x01
Disable counter
# i2cset -y 1 0x6B 8 0xff
No comments:
Post a Comment