Sunday, December 13, 2015

93: More About Secure Wiring

Way back in post 59 I discussed "Bare Conductive Electric Paint." I hoped to be able to draw circuits on paper with the stuff. Well, not quite. But it was a sort of conductive glue (slow drying and not very strong).

Anyway, the stuff has stiffened up in the tube to where it won't come out the narrow spout anymore, but now I have a new use: sticking breadboard wires M-to-F or M-to-breadboard. Just dip the wire (M) end in the "paint" and insert as usual. And after 20 minutes the connection will be pretty secure and the contact will be good. Also, since the glue isn't too strong, you can get it out if you need to make a change.

Note that wisely, most glue is insulating, not conductive -- probably a good idea.

Tuesday, November 10, 2015

92: Stamp Out Loose Breadboard Wires
-- revised: Nov 25, 2015 --

I hate pulled-loose wires, also not fond of soldering. So, browsing Aliexpress I found 2 possibly useful devices: 8-wire screw terminal strips (I got 4) and a bunch of 2-wire spring clips.

Terminal Strip, Photon (imagine this with a T-cable from a Pi), Spring Clips

Anyway, I like both connectors. The screw strip is a tad over-kill. I probably won't run 220v through it. I particularly like the spring clips -- they are pretty strong. And flexible in number. And cheap: $1.30 for 10 pair.  REVISED: I tried getting more than 1 wire clamped in a single spring clip -- Sorry, not reliable (and not very useful, otherwise)!

Wednesday, November 4, 2015

91: Daylight Savings Time for "Smart Controllers"
(and why you should study cron)

Clock time is important to my "live" Particle Photon system. Imagine my surprise in finding the time off by an hour on Nov. 1. Sloppy me. Particle Docs is explicit that the provided function does not adjust for Daylight Savings.

Lucky for me, I have a Linux/Raspberry Pi to back me up. Here's a little shell script that can correct the time in my Photon program:

photon=1234... # your Photon's ID
accessT=5678... # your access_token
a=`date | sed -n 's/.* .\([DS]T\).*/\1/p'`
if [ "$a" != "ST" ] ; # previous WAS "DT"
  v=-5  # Standard Time (hours less than GMT)
  v=-4  # Daylight Time
# This can tell the Photon 
curl$photon/$thisF \
 -d access_token=$accessT -d "args=$v"

Unix and Linux have a scheduling program called cron. And each user can have a personal set of scheduled programs accessed by the crontab app.. If the above shell code is in a file called "set-tz" then this crontab entry will execute it every Sunday in October, November and March:

# min hr dom mo dow command
0 3 * 3,10,11 0 sh set-tz

Read it as: 
"at zero minutes after the hour, 
any day-of-month, 
March, October, November, 
Then execute set-tz."

Ugly, but looks isn't everything.

Friday, October 16, 2015

90: Pi Failure! And Fix.
(REVISED: seems like was SD card contacts!!!)

I have 3 Raspberry Pis: 2 of the B/rev2 and a B+. The original one operates 24/7 and provides/collects data from my live Particle Photon system.

I'll skip over #2. The B+ is connected to a large breadboard with an Arduino Nano stuck on it with USB between the Pi and the Nano -- the Nano doing analog devices. The whole setup is for trying new things.

Back to #2: this one sits in a 6" x 8" x 3" lexan box. I use it as a portable example of what you can do with a Pi (see my post 55). It is connected to a variety of devices: LEDs, PIR motion detector, temp sensor, Pi camera, clock-type 7-segment display, a 2-relay switch, a speaker for voice synthesis output, plus battery power.

And it's #2 that has failed. It had been collecting dust (not inside it's box), unplugged for 2-3 months. But I wanted to use the camera so I plugged it in and only the little red power light came on. I took the SD card out and checked it on Pi #1 with fsck. It seemed ok. So, I moved a backup SD to #2. No good. Doesn't ever find the SD card. I tried other useless stuff. Nothing. I vaguely remembered something about the Pi's SD pins getting flattened to where contact fails. Must be what happened.

So I took the nice setup apart. Nasty. The Pi was screwed down to a board. Then I messed with the SD pins on the under side of the Pi -- tried to pry them up a bit. The original SD endlessly tries to boot -- and fails. The backup SD from my Pi#1 works but the setup is all wrong. Crap.

* NEW *

Got a new 16gb SD card. copied Pi#1 data to it (see post 48). Changed all the files (/etc/hostname, /etc/network/interfaces, etc.). Copied Pi#2 data from backup. Inserted new card. It worked. Gimme back the hours wasted.

2 other things:
* The new SD: plastic shell seems a tiny bit thicker.
* I'd forgotten: at some point I had added a layer of tape on the non-contact side of Pi#1's SD card. It must have given me trouble. No wonder later Raspberry Pis went to the micro SD plug.

Saturday, September 19, 2015

89: I Installed a LIVE System!
(after 2+ years of messing around)
-- Revised below 10/11/15 --

Until recently, I have assumed that when it came to installing a real life system I would base it on a Raspberry Pi. But then the Particle Photon came along. Three weeks ago I installed Particle Photon in my granddaughter's farm hoop house (they used to be called "green houses"). It is programmed to support 2 temperature sensors, 2 soil moisture sensors and it provides control of 2 switched devices: an electrified deer fence and a water valve for drip irrigation. Here's the smartphone web page image:

as of 10pm, September 15

Data comes from my Photon program via Particle's "cloud" interface. The electric fence is normally turned on and off by time-of-day (the cloud provides UNIX-like time functions). But that timing can be overridden by the web page above (password secured).

I originally intended to use a Raspberry Pi but the $19 Photon's simple web interface trumped the Pi's many advantages (especially the mature software development environment).

However, the Pi is not all together out of the picture: a Pi-based cron task checks on the Photon every few minutes and sends text messages if anything has gone wrong. It also accumulates statistics and provides a specialized weather report.

The Photon, sensors, switches and wiring cost under $70. My control program in C++ is about 80 lines long (originally, now expanded to 200 lines).

Does anyone know of a reliable motor setup for safely rolling the sides of the hoop house up and down (to control inside temperature)?

Revision: I've added more information on this setup (answering questions) at --

Friday, September 18, 2015

88: Battery Backup, Revised Again

After my failures with the Adafruit Powerboost 1000 I complained at an Adafruit forum. Their responce as  that I should have used a Powerboost 1000C instead. Note the subtly added letter "C". So, gritting my teeth, I paid $19.99 (plus their pricey shipping) and tried again.

has powered a Pi for 3 weeks now

I let this setup run for over 24 hours powering either a Raspberry Pi (drawing .34 amps -- using the post 87 device) or a Particle Photon (drawing 1/8th as much) and both worked fine. I could disconnect external USB without the computers noticing but pulling the battery plug caused both processors to restart. Not nice but not a deal killer.

Note input power LED in the image. If you aimed a photo sensor at it your program could detect external power failure. You would  then have time to send out a text message and shut down "gracefully" -- whatever that means.

Wednesday, September 16, 2015

87: Handy Electrical Gadget 

I got a "Charger Doctor" from Adafruit. Not a very enlightening name but a useful device.

It alternates displaying voltage and amps (a few seconds each). The 7-segment display can make a capital 'A' (main image) but can only manage a lame 'u' for 'V' (insert).

Place your 'Doctor' between the USB source and your device to be measured. The image above shows the usual 5v in plus that my Raspberry Pi B+ with USB wifi dongle uses .32 amps.

Thursday, August 13, 2015

86: Solenoid Water Valves

My new mistakes:

1. The image above shows 2 seemingly identical .5 inch plastic valves. But the one on the right has tapered threads (about $10 from Adafruit). The left (cheaper) one did not. To get the brass fittings screwed on I had to carefully file down the end threads so I could get the adapters screwed on without butchering the plastic. Very time-consuming -- and irritating.

2. Also, why did I go cheap? For about $25 I could have a brass valve to go with the pair of $15 fittings. And the whole thing would likely have been more reliable.

Tuesday, August 4, 2015

85: The Particle Photon Moves Up
* updated 8/26/15 *

My $19 Photons are moving farther ahead of Arduinos and edging toward Rpi. Having accurate time functions available from the cloud makes a difference. It isn't crontab but operations can be scheduled. See Getting connected to wifi & the cloud is a cinch; program development: not so great (yet)!

Thursday, July 23, 2015

84: Adding a Small Monitor

I'm installing an Rpi away from my iMac and SSH. So I bought a cheap keyboard and a 7" 1024x600 HDMI monitor.  To make this work, you first need to make the following change:

% sudo nano /boot/config.txt
(delete the "#" from this line)

(delete the "#" and change 1280 to 1024)
(delete the "#" and change 720 to 600)

(press CTRL/o, type y, press CTRL/x)
% sudo reboot

I then needed to enlarge the console font size from 6x16 pixels to something I could read. I did it like this:

When you log in to Linux (or Unix) a file named ".profile" is executed by the shell. To make the little screen readable I edited the .profile file and added the following line at the end:
setfont /usr/share/consolefonts/Uni3-Terminus28x14.pst.gz
(another reboot)
The 14x28 pixel font works for me. There many (hundreds of) fonts. If you like a bit smaller try 24x12 or bigger 32x16.

Tuesday, June 30, 2015

83: Battery Backup Correction
** revised 7/16/15 **

See, post 16.

As I am wont to do, I posted without enough testing. Hopefully, corrected now. I'm surprised (shocked?) at how little interest there is in this topic. Anyway, the setup pictured only works if the USB out draws less than 500mV. None of my Nano test setups take this little -- nor does my Particle Core. So regardless of 5V USB input the the system fails when the battery runs down (USB output drops to 4.1V).

Saturday, June 13, 2015

82: Soil Moisture Sensor

These things need analog. So I'll read it through the ether (wifi) from a Particle Core (like Arduino Mega with built-in Cloud access). See my Arduino/Particle blog post 15.

Saturday, April 25, 2015

81: Let's Review
Apr 25, revised: May 2, Aug 1, Nov 18, 2015

Devices I've wired/programmed* for the Raspberry Pi, Arduino and Spark Core (now Particle Photon)
  • LEDs (everyone starts with these) - RAS
  • Push buttons - RA
  • PIR motion detector - R
  • Magnetic door sensor - RAS
  • Photosensor RAS
  • DS18B20 temperature sensor - RAS
  • DHT22 temperature/humidity sensor - RAS
  • TMP36 temperature sensor - AS
  • Raspberry Pi camera (B/W conversion, timelapse, security cam) - R
  • Relay Switches - RS
  • Water (moisture) sensor - R
  • Soil moisture sensor - AS
  • Water valve/solenoid control - RS
  • Rangefinder: ultrasonic, IR (several models) - RA
  • Speakers - RA
  • CO gas sensor - A
  • Natural gas/propane sensor - A
  • Mini vibrating motors - A
  • Pi - Arduino Com over USB - A to R
  • RF read & write - A
  • RFID sensor - AS
  • 16x2 LCD text device - RA
  • 7-segment clock device - R
To make the above work--
  • resistors, capacitors, diodes, transistors, 
  • Darlington array - R 
  • I2C (MPC2308) - RS 
  • MPC3008 (analog) - R
  • PWM - A
  • Backup battery setup - RAS
  • Also: Internet upload/download, email, text message - RS
* Programmed in Python, C, C++, Linux Shell, Crontab

Saturday, April 18, 2015

80: More on My UPS Battery Setup

I have tested the setup shown in post 79 (explained better in my Arduino blog post 11:

First, I tried it with an Arduino Nano (most expendable). Worked.

Then, my Spark Core setup. Worked, too. I let the battery run down on this test. I'm not sure how long that took (+2 hours?) and I had not recharged the battery after trying it with the Nano. Then something nasty happened: the Powerboost 1000 sort of hiccuped off and on powering the Spark back on for a second each time. Good old Spark survived this but I wouldn't bet on a Pi doing as well. Also, the Powerboost was fried (Adafruit replaced it).

Finally, on a Raspberry Pi B (rev 2) with a fair number of GPIO pins connected including a WIFI dongle, a Pi-powered relay switch and a 7-segment clock display. I let it go nearly an hour then the Pi stopped running while the Powerboost still showed its green "powered" LED. Hummmm.

This is what I want for my Pi setups:

1. Detect fail (eg: by reading photosensor pointed at extern power light on Lipo charger).

2. Send out email and text msg warnings to humans (if internet-connected):
    "Power fail. Shutting DOWN! date/time".

3. In Linux: kill my running processes (especially anything writing files):
   % pgrep -u pi | sudo xargs kill -9 (for user "pi").

4. Linux: % sync; sync; sleep 5

5. Shut off 5v power from battery before voltage drops but so the system will restart when external power is restored.

Suggestions? Will the "Pi Juice" (see Kickstarter) do all of this?

Tuesday, April 7, 2015

79: I built a UPS (uninterruptible power supply/battery backup)

Under $35. Works with Raspberry Pi, Arduino, etc. I'm surprised UPS (reasonable price/size) isn't a hot topic in this (computer geek?) world.

Not difficult! Details at my Arduino blog, post 11--

Sunday, March 29, 2015

78: Controlling my Spark Core Wirelessly over the Internet

My Raspberry Pi can now read sensors and switch relays on my Spark and post results to a Web page! Details at --

Battery powered Spark Core

Tuesday, March 24, 2015

77: More About* Time Lapse with the Pi Camera

For my last example (post 71) I used the timing/counting features of the raspistill command to record my image sequence. But this time I want to capture a JPEG per minute from sunrise to sunset. Here's the shell program I wrote:

hr=`date +%H` # just the hour
while [ "$hr" -ge "07" ] && [ "$hr" -le "20" ] ; #e.g.: 7am to 8pm
  ct=`expr $ct + 1`
  num=`expr 0000$ct : '.*\(....\)$'`
  raspistill -w 1280 -h 720 -t 1 -o i${num}.jpg
  sleep 60
  hr=`date +%H`

The 2nd expr command makes sure that the $num variable is a zero-filled 4-digit number (required in the convert-to-movie step). Also, about 1975 I wrote the original UNIX expr command -- so I like to use it.

* Did you know that when millions of English words were checked, the first (most common) 130 were all one syllable. The first two-syllable word was "about." Does that mean something? Trust me, "exactly" was way, way down the list.

Monday, March 16, 2015

76: Raspberry Pi to Spark Core

It wasn't too painful. I have successfully sent a command to the Spark and gotten data back. My Core is sitting a foot from the Pi but it could be anywhere there's Internet. Details at my Arduino site:

Spark Core in its cute box

Friday, March 6, 2015

75: A New Way to Connect an RPI?

Spark Core: Where have I been? Sounds like what I've been looking for. See--

I ordered one. Let you know.

Tuesday, February 24, 2015

74: Raspberry Pi B 2 and "Real Time"

Many posts ago (50 & 54) I complained that the otherwise convenient Linux multiprocessing overhead could screw up getting time-critical readings from certain sensors. I don't have a Pi 2 yet but with a quad processor that problem may be history. I'll let you know when I find out.

Saturday, February 7, 2015

72: Raspberry Pi 2 as a "PC"

So if you already have a monitor (HDMI or DVI -- forget others), USB keyboard & mouse and $100 you can have a desktop Linux that is now (with the new ARM7) very responsive. Still no Adobe Flash support but otherwise...

What do you need?

* Pi 2 $35 (?)
* 16gb micro SD $25
* Wifi USB plug $15
* Powered USB hub (more ports + power for the Pi) $20
* HDMI cable $5 (or HDMI to DVI: $25)
* Case for Pi $10 (and up)

Most of the apps PC or Mac users are used to will be available with Linux, but with different names & they will be quirky. Here's an analogy with hiking trail difficulty: out East where it's fairly flat they use these terms--

1. Easy
2. Easy/Moderate
3. Moderate
4. Moderate/Difficult
5. Difficult

Changing to Linux has to be a 2.5, at least.


Sunday, January 18, 2015

71: My Pi as a Time Lapse Camera

I used raspistill taking 1 still per minute. Moved the JPEGs to my Mac and turned it into MP4 at 10fps. 450 minutes crunched to 45 seconds.

The .mov clip below is seriously down-sampled.

Noon to Sunset
Nothing much happening.

This command on the Pi took the stills:

  raspistill -w 1280 -h 720 -tl 60000 -o i%04d.jpg -t 28000000

(Having to time everything in milliseconds is tiresome.)

On my iMac this converted the stills to MP4/10 frames-per-second:

  ffmpeg -r 10 -i i%04d.jpg clip.mp4

I could have done this step on the Pi but it would have taken a lot longer. BTW: the video quality from this step was very good -- not like the above.

Saturday, January 10, 2015

70: PWM -- Another Reason to Front-end Your Pi with an Arduino

I just discovered the joys of Arduino PWM (pulse width modulation). Easy on my Nano, except for 1 GPIO pin is's a nasty kludge on the Pi. Ha! (I listed USB-connected source code for Pi and Arduino back in Post 66.)

BTW: PWM is useful for things like dimming LEDs. In my case, I wanted a user to notice differences in output of mini-motor vibrators (e.g., from Adafruit). You have 256 output levels: 0=none(OFF), 127=half, 255=full(ON).

P.S.: While Pi prices are pretty standardized, Arduino prices are all over the place. I've noted Internet-listed Nanos (my favorite model) at anywhere from over $30 down to $3.30 (no cable, soldering required, delivery from China).

Thursday, January 1, 2015

69: To Catch a Thief
(Raspberry Pi Security System)

My daughter's dog is an inveterate thief of any food left within even implausible reach. The previous time we dog-sat for him he managed to steal over a dozen home-made cookies. So I decided to catch him in the act using my Pi+camera+Python program. I have a (fairly) portable Pi system:
Notes on the configuration:
  • The 12,000mAh battery will power the Pi for about 10 hours. Unfortunately the battery can either charge or discharge but not both at once. Otherwise it would make a very nice UPS (uninterruptable power supply).
  • As shown, it has LED output, PIR and Pi camera input and a 7-segment display. On the side there is a Cat5 socket (provides 8 wires for remote sensors) and a pair of relay switches.
  • I use the speaker for text-to-speech output.
Anyway, I baited the kitchen counter with a piece of meat and set the porta-Pi aimed at the counter. On my first attempt my program just used the camera to detect motion. About once per second the Pi can take a grayscale 120x90 pixel image which the program compares pixel-by-pixel with the previous image. When more than an arbitrary number if pixels have changed by more than an arbitrary difference then the program takes a full-res image and saves it to the SD card filesystem.

This first test failed for 2 reasons: a) the dog ignored the bait; b) while we were away for about 3 hours the sun went under a cloud and back out about 100 times and my dumb program decided that each such change was "motion."

So, for my second try I added the PIR device -- logic as follows:

    IF the PIR detects motion AND the 2 camera images differ THEN store the high-res image.

This attempt failed too: at  a distance of about 12' the PIR didn't notice the 30-pound white dog (but he stole the meat).

I need a better motion detector.