The Star Display

What’s cookin?

I wanted a fun project to freshen up my Python programming skills and I happened on this idea while putting out my Christmas lights for 2018:

Let’s make a new yard display using individually addressable LED pixels!

If all goes well, I’ll be able to replace my existing display of mini light stars with a string of these cool computer controlled LED stars. I might even be able to synchronize the display to music!

Pixels and Pixel Strips

I chose the Worldsemi WS2812B as the pixel component for this design.

Each pixel includes three internal LEDs (a red, a green, and a blue), along with a built-in controller. The controller can set each of the three LEDs to one of 256 brightness levels.

The 2812s operate from a 5 volt supply, and each has a data-in and data-out pin for the serial control protocol. The components are daisy chained by their ins and outs with only 3 wires needed between each pixel. I think less wiring means less chance for wiring problems.

I picked BTF-LIGHTING‘s IP65 strips due to their low cost and waterproof design. I really like the simplicity of the flexible strip.

I’m not sure if the components they use are actual 2812s, but they are compatible with the protocol. I’m using the black, 30 pixels per meter variety in this project. The strips can be cut at the pads and have a thin, double sided tape backing.

Star Layout

The layout was carefully planned with a few constraints from the old display. I wanted to keep a similar star size, have pixels at the tips, and avoid overlapping pixels in the middle of the star. I used a quick Scratch program to verify my layout ideas using “turtle” or “pen” graphics. I decided on a strip of 45 pixels, and cut it into five 9-pixel sections. Each section forms part of a ten pixel chord that includes the start of the next strip.

Star Strips

The BTF strips need a support structure to hold them in the star shape. I decided to design my own plastic strip that could be 3D printed, then assembled into the star shape. The ends of the strips snap together and have slots to accept zip-ties that securely hold the pixel strips in place.

I found a mail-order supplier on TreatStock and had my parts printed in ABS plastic. I unexpectedly specified 20% infill on the order, but that worked out OK with the strips being somewhat flexible for the woven assembly I wanted.

Raspberry Pi

There are plenty of choices for LED pixel controllers. For me, the Raspberry Pi works great. I have a Raspberry Pi model 3 B, so I’m using it.

I’m running Raspbian (AKA Debian Stretch) Linux. The Pi is inexpensive, and out of the box, it offers a bunch of learning opportunities with free, open source software and development suites. Included HDMI, USB ports, WiFi, and Bluetooth make this a stand-alone computer that runs from a 5V wall-wart.

BiblioPixel

I’m using Maniacal Lab‘s awesome BiblioPixel light programming system to run the display. Their open source Python3 code library is hosted on GitHub. The package supports multiple pixel types, is portable to multiple operating systems, and comes with a lot of example animations. They support pixel layouts for one-dimensional strips, two-dimensional matrices and disks, as well as three-dimensional cubes. The animations are customizable via project files written in YAML or JSON. I was able to start with their animations very quickly using their built in strip layout. I had my own animation ideas for this star, and was able to program my own animation in Python. More on that later.

AllPixelMini

There’s one more component between the Raspberry Pi and the pixel strips. That’s Manaical Labs’ AllPixelMini.

It’s a USB device that handles the serial protocol that updates the pixel colors. This frees the Raspberry Pi of that CPU overhead and allows other real-time event driven software to co-exist on the system (audio, mouse, GUI, etc.)

Wiring

In my setup, the AllPixelMini provides just the data signal (green wire) to the pixel strips (ignore the red wire above). A ground connection (white and black wires) is also required to make sure all the ground levels are common between the power supply, LEDs, and AllPixelMini. The All PixeMini gets it’s power (and ground) via the USB cable.

These 3-pin waterproof connectors work great for connecting the display to the power supply and AllPixelMini.

I plan on using the same connectors to daisy chain the stars and other display components when I scale this up.

Each 9-pixel strip is wired to the next with a 3-wire connection for 5 Volts, ground, and data.

The strips have solder pads on the back that let you keep the waterproof covering stuck to the LED side.

I also added adhesive lined heat-shrink tubing after soldering to keep the connections waterproof for outdoor use.

Power Supply

Each star of 45 pixels draws 1.66 Amps at 5V with all the LEDs of each pixel at full brightness, and 32mA in the quiescent “off” state. I’m using a 60 Amp, 5 volt supply driving the 5V rail of the LEDs directly (black and red wires connected to power supply above) without feeding power through the AllPixel Board. There’s plenty of power left for expansion, and the fan on the supply does not turn on with this light load.

Emitter Animation

When I first imagined the star display, I was thinking of the way firework streamers looked. You’ve probably seen animations that use particle systems to simulate fireworks. The firework explodes with glowing particles being emitted from a point. The particles stream down, flicker and fade before they burn out. This animation is similar.

The Emitter() animation is a one dimensional particle system for BiblioPixel. The animation is written in Python. My Emitter() class inherits from BiblioPixel’s Strip() animation class. You can find my GitHub repository here. Manaical Labs has also included it in their repository.

The Emitter() class has lots of parameters to control the particle effects, and the source code contains docstrings describing the parameters. Definitely check that out. The parameters can be overridden in BiblioPixel’s YAML or JSON project files. Here’s emitter_demo.yml for the demo in the video.

Each strip can have multiple emitters with programmable positions and velocities. Particles can be emitted in either or both directions. Moving emitters and particles can wrap at the end of the strip. The emitters can be invisible or have color.

Emitted particles move away from the source starting at the full brightness of a color that’s randomly selected from a palette. The brightness then varies in a random manner. The random variations are chosen from a list built at class initialization. The default settings should make the particles “sparkle” and fade. The distribution of brightness variations is adjustable.

Brightness Deltas

The Python code for plotting the histogram is here.

Individual particle velocities are random with adjustable constraints. Particles have a range and won’t go beyond a specified distance in pixels. from their emission point. At a given frame step, an emitter can start multiple particles. The starts_at_once parameter controls how many can start. The starts_prob parameter controls the probability that a particle will actually start. The variance in particle velocities lets particles overtake each other as they travel down the strip. Particles can hold a brightness level below zero and then randomly come back up above zero becoming visible again. Another effect is flares. The flare_prob parameter specifies the probability that a particle can immediately return to full brightness before resuming random brightness variations.

The particles are rendered onto the strip “screen” at each animation step. A loop goes through all the strip’s pixels and sees what particles or emitters are visible from that spot. If no particles are visible, the background color is used. The aperture parameter controls the “visibility” distance. If the distance to a particle is outside the aperture distance, it does not contribute to the pixel. The colors of the visible particles are then blended based on their distance to the given pixel. Particle positions, distances, and apertures are all floating point values. Small aperture values can cause blinking when a particle or emitter becomes invisible between the pixel locations. Larger aperture values will spread a particle’s color across multiple pixels.

See More

Check out this part of the star display demo to see all the parameters in action:

Old vs New

I spent a bit of time this morning trying to locate my copy of Forrest Mim’s Engineer’s Notebook. I was intending to write about that excellent publication being influential in my decision to become an engineer. I never did find its hiding spot. While I was hunting, I got to thinking about something else:

What do I really want to concentrate on for this new blog?

Do I want to detail my engineering history? i.e. just make a beefed up resume? Or, do I want to concentrate on the new stuff? I think I ought to lean toward the new stuff.

That said, the history of “me” really does pertain to what I’m working on now. The skills I’ve honed over time always lead me to believe I can approach a new task borrowing at least a little from what I already know. So it’s easy to say: “I can do that!” or, “I want to do it differently this time”. I’m sure I’ll get to talk about the old stuff as it comes up. That’s in my nature. I just don’t want to write only about history. I want make sure to write about now.

P.S.
There is a nice write-up on the Mims notebooks over here.

The Front Burner


– OK, let’s just call it “The Front Burner” for now.

For some time, I’ve been considering finally starting a blog that’s not a photo blog. There are more than a few things on my mind, and I want to share some things to a wider audience than my Facebook friends. The stuff I’m considering writing about involve: continuing education, my electronics projects, work, local history, and exploration of the world around me.

I really wanted to showcase some of my back-burner projects (old and new). Those are the things I think about and work on while I’m not on the job or doing stuff with the family. I started thinking of calling my blog “The Back Burner”, but then I realized the things I’d be covering would be on the front burner at the time. Double think, re-think, over-think. Oh OK, let’s just call it “The Front Burner” for now.

Steve’s Chili Colorado con Carne

When I was living in Tucson, it was pretty common to find Chili con Carne on the menus in the Mexican restaurants. Now that I’m living in Texas, I’d have to classify that style I remember as “El Paso style”. Down here in Austin, the Tex-Mex is different. There isn’t as much chili in it. I still yearn for the former so I’ve looked into what it takes to make it myself.

You have to start with chilies of course. While you can get the dried chili pods in the produce section at H-E-B, I happened to remember being able to pick up chili pods in half pound bags at the Tucson grocery stores. Here’s what I used to see there:

Barker’s New Mexico Chiles

I have also found them at tourist stops along I-10 in New Mexico. Of course it’s now possible to order these on line. I have my own El Paso connection: Joey’s mom! She graciously brought me about three year’s worth on top of his last order from back home.

Since my earlier trials of the now revised recipe below, I switched from simmering the de-seeded chili pods to just pulverizing the de-seeded dried pods into a powder with our Vitamix and keeping that around to use as chili powder. I don’t strain the solids either. This allows for easier chili storage, and less mess and fuss.

OK, so here’s the recipe I currently use:

Steve's Chili Colorado con Carne

  • Servings: 4
  • Difficulty: medium
  • Print

Red Chili and Meat

Chili Sauce - Step 1

  • 1 yellow onion
  • 6 cloves fresh garlic

Slice the onion into eighths and peel the garlic. Roast both on a sheet of aluminum foil in a 350°F oven for 30 minutes.

Meat

  • 3 pounds chuck beef or pork loin
  • 1 teaspoon salt
  • 3 tablespoons flour
  • 2 tablespoons olive oil

Trim the meat and cube it. Load it into the pressure cooker, then sprinkle on the flour and salt to coat the meat evenly. Add the oil and stir. Brown the meat in the open pressure cooker.

Chili Sauce - Step 2

When the onion and garlic are roasted, finish up the sauce in the Vitamix. Add the onion and garlic and these additional ingredients:

  • 1-½ cups cold water
  • 4 teaspoons beef “Better than Bullion”
  • 4 tablespoons chili powder
  • 1 teaspoon cumin powder
  • ½ tsp cayenne pepper
  • ¼ teaspoon dried oregano

Liquefy.

Add the sauce to the meat in the pressure cooker. Stir. Put on the pressure cooker lid and cook at high pressure for 45 minutes.

Salt and season to your taste. Maybe another ½ tsp salt, ½ tsp cayenne pepper?

Don’t forget serve with some flour or corn tortillas! We like to have ours toasted on our cast iron skillet.

The 2017 Total Solar Eclipse

🌞 🌚 🌎 😎

The Sun, the Moon, and the Earth lined up on August 21st, 2017. We did our best to be lined up too. We traveled to St. Joseph, MO to be along the center-line of the swath of totality that crossed the United States.

The back-dated posts below detail the running log of our preparations and journey that I had incrementally posted to Facebook in the summer of 2017.

There are a few things to note before we start. At first, I did not know if we would be able leave town to see the total eclipse. My wife and I were both looking for work and money was a concern. I might be satisfied with just viewing the partial eclipse from Austin, TX, so at first started getting ready for the partial here in Austin. I wanted to use equipment that I already had, with a minimum of extra expenditure. We also had a probable summer trip to see relatives near Wichita, KS in the back of our minds. Eventually we combined that trip with an extra jaunt to the north to put us on the centerline.

Our Eclipse Day Adventure

August 21, 2017. The day had arrived!

The eclipsolunatics arose before the Sun, dressed, and descended to the feeding area. In case you didn’t notice, we added a fourth while we were in Wichita. Our niece/cousin (in pink) who had some free time to spend with us before school started.

My white version of the eclipsolunatic shirt touts the 7/11/1991 eclipse

When we stepped out of the hotel at the crack of dawn, the worry seemed to drain away. You could see an eclipse in this weather.

It wasn’t perfectly clear, maybe a little hazy, but not bad at all
Eclipse day

We were on the road from Kansas City, MO to St. Joseph, MO as the Sun came up. A trek of 30 miles. More signs heralded the event.

St. Joseph is only a few exits away. You could walk to the centerline from here
The journey is almost over! I hope the spot we picked is still available
No traffic! That’s a relief! It sure does look cloudy up here
N39.780147° W94.786578°

By 7:00AM, we’d made it to the viewing site. No crowds. No traffic jams. The sun is shining. Why are we here so early?

The spot I’d picked was the parking lot of Our Lady of Guadalupe Catholic Church. I’d e-mailed ahead to ask permission to use a few slots. I’d received the green light from Steve K. (facilities) and Fr. Christian.

We found a Red Cross trailer on the lot and used it as one of the walls for our shelter

I heard later, the trailer was a pre-staged advance preparation in case there was a disaster in the area during the time frame of the eclipse.

We started setting up, and then I realized the church patrons were arriving for daily 8AM Mass. I’m not sure how I missed the timing of that on the website, but I started to realize we had the time to attend, and it was the right thing to do. There was still a go/no-go decision to be made about staying at this spot, but it was too early to make the decision. 10:00 was the right time. We paused our set up and went in.

9:30AM

When we came back out, we realized it had rained. Nothing but the tent and the vehicles got wet. The sun continued to shine, and we decided to continue our set up.

10:00AM. I set up the telescope and attached the camera

I connected the inverter to the car battery and set up the 24” computer monitor and hood. The family devoured “eclipse nuts”. Those are annular dough cakes covered with powdered sugar or chocolate icing. You can get them in packs of 6 at the gas station. If you take a bite out of one it looks like an eclipse. You see, there is more than one kind of eclipse nut. Our boy kept himself entertained with a little Hot Wheels track fun. He took the time to video his setup and luckily got this shot of the nearly completed observatory.


8/21/2017 11:50AM N39.514919° W94.787881° Near Dearborn, MO

Hey, wait! This isn’t where where were at 10:00AM. What happened?

Well, at 10:15 as I was completing the last steps of the set up, I looked to the South West, and saw rain heading our way. Looking at the radar, I realized we were in the path for an extended shower that might soak our plans. We decided to pack all the eclipse gear in the SUV, all the other stuff in the car, and try to scoot out from under the downpour in the SUV, leaving the car. We were packed in about 20 minutes and nothing was damaged by the rain that started.

We needed two adults in the SUV. One to drive and one to navigate away from the clouds. We found a hole in the clouds and pulled off the highway. A commuter lot just happened to be at the exit we tried, and there were still parking spots available. Everyone else that was there was doing the same thing.

Did our plans change? You bet they did. Plan B was in place. The continuous chance for rain meant that we wouldn’t risk setting up the scope or shade tent for the rest of the day. We had to stay agile and mobile chasing the holes in the clouds.

This shot was taken from some accidental video and shows the rain falling right across I-29

We got to see the first of the partial phases here. We missed first contact (C1) by just a few minutes. We did get to see a small bite here. The sunspots were evident in the binocular image.

The hole we were under closed just a few minutes later. We were the first to abandon this spot, and we moved on, following the hole to the north east.

The cloud cover was not easy to predict. There were two layers moving in different directions. Following one hole didn’t always result in a clearer sky.

8/21/2017 12:55PM N39.571806° W94.684278° Near Faucett, MO

With plan B still under way, we chased the holes in the clouds. Two layers of clouds made it impossible to use the news radar for anything but avoiding the huge cells. We sought out light spots and chased them down the back roads. We moved East on State Route [H] to the intersection of [H], [Z], and [Y]. North on [Y] to (116). (116) to [E]. Man oh man. It’s getting dark. It’s only 15 minutes to totality. We need to stop. Every place around has the purple fencepost markings indicating no trespassing. Don’t park there. OK, right here. We have a triangle between the roads. The middle must be county property. Stop here. Draw the line in the sand, and hope the clouds give us a hole.

We were at the South side of the triangle at [E] and [DD].

Have you seen this fellow? Stay well clear of him. That’s an eclipsolunatic. Do not get between him and his prey.

N39.571806° W94.684278° Near Faucett, MO
We’re all here in the SUV. We’re playing the waiting game.

When the rain stops, we can get out and use our glasses, binoculars, and cameras. When it’s raining we can look through the windows and stay dry.

A bright boy realizes we can use the sunroof to look at the eclipse: “That’s why they call them sunroofs!”

A smile? Eclipse chasing might be fun.

The guy in the front seat is too busy to notice. At least we have snacks.

There are alpacas watching us from the fence line back there.

Are we going to see anything other than it just getting dark? Partial phases? Totality? Corona? Prominences? What about all that other cool stuff I told everyone about? I just don’t know.

Camera Model: NIKON D7100
Original Date/Time: 2017-08-21T12:45:28.1
Exposure Time: 1/3200
Shutter Speed: 1/3200.00
Aperture: 6.00
F-stop: f/8.0
ISO Speed: 1000
Lens: 70.0-300.0 mm f/4.0-5.6
Focal Length: 250.00

Once we were parked, and a hole “opened” (I use the term loosely), I was able to take a few shots through the windshield with the D7100. The filter was cutting out too much light, so I did the unthinkable. Don’t look! Too late. Eclipsolunatics are fast and loose. I wanted closer (300mm) and tighter (focus) on this one. Totality is about 20 minutes away. Hand held.

Camera Model: NIKON D7100
Original Date/Time: 2017-08-21T12:58:44.4
Exposure Time: 1/20
Shutter Speed: 1/20.00
Aperture: 4.53
F-stop: f/4.8
ISO Speed: 1000
Lens: 70.0-300.0 mm f/4.0-5.6
Focal Length: 210.00

The next hole that opened let more sunlight through. I used the DIY filter with the Thousand Oaks Black-Silver Polymer here. I was also able to stand outside the SUV. Less than 10 minutes to go. Hand held, leaning against the SUV.

Time to Start the GoPro

The video is here.

The rain let up! Just a few minutes left. The clouds have cleared. Everybody out!
(still frame from GoPro video)
Another eclipse chaser arrives behind us
(still frame from GoPro video)
Look! a hole in clouds!
(still frame from GoPro video)
Look! a hole in clouds!
(still frame from GoPro video)
It’s starting to get dark! The clouds were pretty thick. We didn’t need the glasses at this point.
(still frame from GoPro video)

These three photos are the money shots. They’re still frames from the GoPro video. I can’t even believe we could see it. The clouds parted just enough. It was still amazing. In the video you can hear us say so.

This one is the diamond ring
Mid eclipse. You can discern the corona through the clouds.
Maybe the diamond ring, maybe just a hole to let more of the corona light through.

I didn’t have the D7100 or telescope out on a tripod due to the nearby rain. The GoPro video is what we ended up with.

Looking North to the rain that passed us.
Looking NW at rain and the day rushing in.

Our son took these three stills of totality on or Samsung Tab-E. I cropped them to 16:9.

Looking at the exiting partial phases. Back to the “weeny sliver”. That’s a technical term used by eclipsolunatics.
A post totality panorama of the site

The photo is blown out some. The white is not blue sky. Just lighter grey. He’s playing with a fallen sign that said “Backwoods ->”.

New family tradition? Eclipsewiches. We were starving after that chase. It’s raining.

We ended our chase of holes in the cloud cover and headed back north to St. Joseph to get the car. Lots of traffic was going South to Kansas City. The flow leaving the centerline went on for hours.

The day before the eclipse

The second leg of the journey was the 200 mile hop from Wichita, Kansas to Kansas City, Missouri where we’d reserved a hotel room. The hotel was inside the totality band, but far enough away from the centerline that we were able to find a room due to the number of hotels in the area.

These signs along the way were a frequent reminder that many other people were also excited about the eclipse.

After checking in, we moved North for a scouting mission to the centerline at St. Joseph, MO. We looked at the site I’d selected and then we had some time to kill. No one had a MO geocache yet, so that’s what we did. Well, after eating ice cream anyway. We picked a good one and converted another muggle.

That was one fancy geocache container!
The end of the day on the 20th gave us a nice sunset

The sunset worried me.

The clouds were starting to build, and the NOAA forecasts were calling for 60% cloud coverage in our area on the 21st. The forecasts showed clouds for a two state radius around us. There were only two directions to go for clear skies along the totality path. East to Kentucky, or West to Wyoming. We were already exhausted. We decided to stay, wait, and see.

The Eclipse Chase Begins

At last we’re on our way

Today we started the first leg of our road trip to the eclipse site. Tonight we’re two thirds of the way there! We’ve traveled 540 miles from Austin, TX to Wichita, KS where we’ll spend a few days with family before moving North another 200 miles to Kansas City, MO on August 20. The plan is to travel the remaining 55 miles to St. Joseph, MO on the day of the eclipse. Our son took this cool shot of our prey as we passed a wind farm at sunset. I think it was in Kansas. Two and a half days to go!

Good morning, ordinary people!

As the rest of the world does their morning routine…

I’m pondering what everyone else is doing this beautiful Thursday morning. The eclipsolunatic is poring through all the checklists he’s been building these last few months.

Yes, I’m packing for departure to-mor-row mor-ning! But first, I’m starting off with a cup of Joe in my spiffy new mug.

The ordinary people idea is a nod to character Sheldon Cooper’s visit to the grocery store:

Sheldon: This is great. Look at me, out in the real world of ordinary people, just living their ordinary, colorless, workaday lives.

Penny: Thank you.

Sheldon: No, thank you. And thank you, ordinary person.

“The Luminous Fish Effect”, S1E4, The Big Bang Theory

One of these days I’ll drone on about my frustration with the show making fun of scientists and engineers, but today I’ve got a lot of things to do.