# Gas station without pumps

## 2018 July 19

### Dropping old LED lighting project

Filed under: Uncategorized — gasstationwithoutpumps @ 14:28
Tags: , , , , ,

About 4 years ago, I started a project to replace the breakfast room ceiling fan (which my wife has always hated) with an LED fixture of my own design.  In order to do this, I designed some custom LED boards that could work over a range of voltages with PWM control of the brightness and I made some desk and table lamps using the boards, as well as a stroboscope (Summer project, LED board I-vs-V curve, Summer project 2, Desk lamp, Newer dimmer software, LED strobe using dimmer boardHalloween 2016, … ).

Although I have had the electronics done for the breakfast room fixture for about 3 years, I’ve not been able to come up with a mechanical design that I think will look good.  Also, the task of cutting the conduit in the attic to install an outlet for the wall-wart power supply did not appeal to me, so I kept putting off the project.

Last weekend, my wife, my son, and I went to the local Habitat for Humanity ReStore, ostensibly to look for cabinet handles and doors, but mainly just to browse. While there, we saw a used drum light ceiling fixture that was on sale for only about $16 (it is one that normally sells for around$120 new from Home Depot).  Since I had pretty much given up on coming up with a design using my LED boards that would look good, and my wife liked the drum fixture, we bought it and my son helped me install it.

The hardest part of the installation was probably pulling new wire through the conduit, since I did not want to use the old cloth-covered solid copper wire that was there.  I also added a grounding screw to the junction box for the lamp, since the old ceiling lamp had no ground connection.

Here is the “new” ceiling lamp in daylight.

Here is the ceiling lamp with 3 2700K LED bulbs.

Lining up the screw holes of the fixture with the screw holes of the junction box was also a bit tricky—my son’s holding the fixture while I fussed with that was a big help.

The whole project cost under $30:$16 for the fixture, <$3 for screws and wire,$7.50 for 3 LED bulbs. The new lamp is not dimmable (because of the cheap bulbs I chose), but that feature was not really needed for the breakfast room anyway.

So I now have a lot of spare LED boards that I need to find a project for—I’ve used a few of the boards for the desk lamp and stroboscope projects, but I don’t really need another desk lamp or stroboscope.  Anyone have any ideas?

## 2016 November 2

### Halloween 2016

Filed under: Uncategorized — gasstationwithoutpumps @ 16:47
Tags: , , , ,

Halloween was a bit of an impromptu arrangement this year. I was at the iGEM Jamboree all weekend, and my wife and I only got home from Boston a little before 7 p.m. on Halloween, so we did not have time to carve a pumpkin this year.  Instead, I decided to improvise a very fast pumpkin surrogate:

First, I found a cardboard box large enough to hold the LED stroboscope that I had made for the mini Maker Faire.

Then I cut out a stencil pattern from a piece of heavy paper.

I made one mistake when cutting the stencil, cutting away the opaque center for the lower part of the B. I just used blue painter’s tape on the back of the paper to stick the piece back on, and recut the B.

Initially, I tried taping the stencil over the opening in the box, but the light was not diffuse enough—the individual LEDs were visible and the stencil pattern unclear. I then tried taping the stencil to the cutting mat and taping the cutting mat to the front of the box. It wasn’t very secure (painter’s tape is not very sticky—by design), but it worked for the evening.

The final result looked much better in the window than a 20-minute project had any right to.

## 2016 April 4

Filed under: Circuits course — gasstationwithoutpumps @ 22:44
Tags: , , ,

I spent all day Sunday grading the first set of lab reports.  I was expecting 24 reports of about 3 pages each, but I got 25 averaging about 5 pages each.  I think that the reports were a bit better this year than at corresponding times in previous years, but I did not get my grading done until almost midnight Sunday night, keeping me from getting much else done this weekend.

(I did manage to get my hair cut and to build a new strobe stand with room for 20 of my LED boards, which should give 1800 lumens during the flash. With a duty cycle of only 1/65, I don’t think that I need heat sinks on the boards for the strobe, as the average current should be only 40mA, though the peak current will be about 2.6A.)

In class on Monday, I gave students some group feedback on their writing, plus a couple of $\LaTeX$ pointers, then took questions, some of which were about writing, but most were about the optimization of the fixed resistor in the voltage divider for the resistance-to-voltage converter in the thermistor lab.  I showed them how to set that up, but did not try to solve it in class.

After class, when I was making up the key (redoing all the problems—I don’t like just looking up results—refreshing my memory on how to solve the problems by resolving them is best), I ran into a little trouble doing the optimization. I used to be able to just ask Wolfram Alpha to solve the differential equation, but their newer parser seems to be much harder to convince to do anything.  I eventually gave up and used a cruder tool to just take the second derivative and solved for the resistance by hand.  That was faster than the time I wasted trying to get Wolfram Alpha to do anything useful.  (I suspect that they have deliberately crippled it, to make people pay for Mathematica.)

Monday afternoon and evening (from about 1:30 to 7:45) was spent grading the first pre-lab homework.  Again the results are a little better than previous years, but there were 9 prelabs fewer than I expected (3 students have dropped already and 6 did not do the prelab).  I hope that those who did not do the prelab were just confused about when it was due, and not starting a trend towards coming to class and lab unprepared. I also hope that no more students drop—this class is not a weed-out class, though it is a lot of work.

Back in January, Mike wanted to know where I ended up doing my grading. Sunday I did my grading in my breakfast room, with the laptop on the floor where I could get to it if I really needed to look something up, but where it was not a constant temptation to goof off.  On Monday, I worked in my office on campus, where the e-mail was a minor distraction that I checked between problems.  (For the prelabs, I graded the entire stack for problem 1, then the entire stack for problem 2, and so forth.  This makes for more consistent and faster grading than grading a student at a time, but it would be faster still if the students didn’t put their answers in random order on what they turned in.) I’ll probably continue with weekend grading in the breakfast room and prelab grading in my office until the distractions get to be too much—then I’ll look for a coffeeshop to grade in.

## 2016 March 30

### Class topic not what was planned

Filed under: Circuits course — gasstationwithoutpumps @ 21:27
Tags: , , , ,

In my Applied Electronics for Bioengineers course, I had planned to spend the lecture time today talking about sampling and aliasing, but that is not what ended up happening.

I am making it a point to answer student questions (unless they are irrelevant) first, before doing whatever I prepared. The point of the lectures is to help students understand the reading and do the design work for the labs, and anything I have prepared is just a best guess at what the students need. Their questions address more directly what they perceive as their need.  Most of the prepared lecture material is in the book (I wrote the book based on what I have covered in lectures), so answering questions from students who have read the book and are still confused is going to be better than my repeating what is in the book.

Today students had some logistic questions about what to write up for Lab 1 (not much, it was just soldering headers onto the Teensy boards and setting up PteroDAQ—I just asked for a description of what they did, whether anything went wrong, and what they did to fix the problem) and about prelab homework for Lab 2 (do it, but don’t turn it in, it is just setting up gnuplot so that they can use it for the lab).  Those only took a couple of minutes.

The big question that diverted the entire flow of the lecture was a request for an explanation of the high-pass filter in Lab 2 that is used for recentering the function generator output at 1.65V. This lead to several things:

• Description of block diagrams as functional blocks connected by interfaces, and why this was an important concept in engineering. Frequency and voltage information was put on the block diagram  connections.
• Capacitor symbol and DC-blocking property of capacitors.
• Resistor to Vref and why that would cause the output to become Vref, if there was no current through the output.
• Back to the block diagram to add the constraint that the analog-to-digital converter on the Teensy board couldn’t take any current from its input.
• Definition of “gain” as $\frac{dV_{out}}{dV_{in}}$.
• Showing the high-pass filter Bode plot as two lines meeting at the corner frequency, and giving the corner frequency as $\frac{1}{2\pi R C}$, without derivation.  I promised the students that we would derive that result in a few weeks, once we’ve had complex impedance.
• Replacing the resistor to Vref with a pair of resistors to 3.3V and Gnd.
• Introduction of the triangular ground symbol, and rejection of the chassis ground and earth ground symbols as not relevant for the class.
• Derivation of the voltage-divider formula from Ohm’s Law, using the important constraint that no current is taken from the output node of the voltage divider, so that the two resistors have identical currents. I had the students help with this, in order to elicit the most common mistake
• Assertion, without derivation or explanation, that the RC time constant for the high-pass filter should treat the two resistors as being “2R” rather than “R”.

For the last couple of minutes of class, I finally got to do the demo with the homemade stroboscope and pendulum of aliasing, but it was not very effective. Even with the lights off in the classroom, there was enough light through the windows to wash out the strobe. I could not easily keep the pendulum swinging with one hand and adjust the strobe with the other.  If I do this again next year, I should make a panel with about 20 of the LED boards, for around 2.35A during the flash.  At 1.64ms for the longest flash, that’s 3.85mC, which would drain 8.2V from the 470µF capacitor, if the power supply weren’t capable of delivering that much current (but I have a 6A 9V supply, so there should be no problem delivering full power).  Hmm, maybe I should make up that panel for the Mini Maker Faire, instead of the wimpy 4-LED strobe I now have.

I’m actually pleased that I didn’t give the lecture I had planned—my book, which was based on my lectures, already covers the material adequately, and I’d much rather spend precious class time explaining the things that aren’t clear in the book.  The only way I can know what the students need to hear is for them to ask for clarification where they are confused.

## 2015 July 29

### LED strobe using dimmer board

Filed under: Uncategorized — gasstationwithoutpumps @ 23:49
Tags: , , , , , ,

In the evenings this week, I soldered up another PWM controller for the LED lamp projects, and programmed it with the ISP cable I made.  The intent was to use this dimmer either with the breakfast-room lighting fixture (which I’ve not made yet) or reprogram it to act as a strobe rather than a dimmer, to replace the Xenon-tube-based Velleman strobe kit that failed last Thanksgiving.

This project took me much longer than expected, because of stupid mistakes I made:

• I forgot that there was a silkscreen error on the dimmer boards that I had designed.  The outline for the voltage regulator is flipped, because I had not noticed when reading the spec sheet shows the device from the bottom—I’m used to chip views being from the top.  This is the second time that I’ve soldered a voltage regulator on one of the boards backwards, and had to cut it off and replace it with a new one.  I guess I’d better take a permanent felt-tip marker and draw the correct orientation on the remaining boards, so that I don’t make that mistake a third time.
• When playing with new code for the strobe, refamiliarizing myself with the ATtiny13A processor, I changed the prescaling on the system clock from the default 1.2MHz down to about 75kHz.  What I had not realized is that the on-chip clock is used during the reprogramming also, and the Arduino ISP is not set up for slowly clocked chips.  I found code for TinyISP, which has code for 128kHz clocks, but even when I modified it for 75kHz clocks I couldn’t reprogram the chip (always getting the “Yikes! invalid device signature” message with a signature of 0). Eventually, I gave up, unsoldered the ATtiny13A and put in a new one.  I’ll be very careful in future not to slow down the system clock so much.
• I got the strobe working this morning, but when I looked at the output pin that was driving the FET gate, it was only going up to 1.3V, not 5V, and the pulse was much longer than I expected.  This mystified me for a while, but I finally realized that I had forgotten to turn the pin on as an output, so I was driving the output just through the built-in pullup resistor, resulting in a very large RC time constant.  The flat top I was seeing on the pulse was probably the Miller plateau.  Enabling the output pin correctly got me back to crisp 5V pulses of the designed duration.
• The designed duration for the pulses was a bit too short, resulting in a somewhat dimmer than desired flash.  Lengthening the pulse to 1ms was fine for the slow strobes, but at high flash rates the strobe got too bright. So I reprogrammed the flashes so that the on-time was 1/64th of the off-time, but with a maximum on-time of 1.6ms. (I also tried on=off/128 with a maximum of 1ms, but I liked the 1/64 better).

I timed the strobe pulses from the board (looking at the output of the ATtiny13A pin 6, which is also connected to the MISO pin of the ISP header, so is easy to connect a jumper wire to) with PteroDAQ (through a voltage divider, to drop the voltage from 5V to 2.75V).  By triggering the PteroDAQ on edges of the signal, and averaging many measurements, I got very precise timing measurements:

setup on-time off-time
slowest setting, 1:64 1.63745ms 1.52372s
fastest setting, 1:64 104.958µs 6.98761ms
slowest setting, 1:128 955.277µs 1.55881s
fastest setting, 1:128 51.3123µs 6.99286ms

The difference in the “slowest” settings is probably just from my inability to set the knob identically—it has to be just above a threshold below which the strobe doesn’t flash at all. In any case, I have a period from 7.1ms (141Hz) to 1.525s (0.6556Hz), which is a pretty useful range.  I also made the range very smooth, by taking the 10-bit ADC range and converting it to this 215:1 range sort of exponentially with just a few instructions:

if adc < 40, then OFF
frac = 0xff - (adc & 0x7f)
off_time = (frac << 8) >> exp


The tiny number of instructions provides a surprisingly smooth and strictly decreasing approximation to the desired exponential.

The transition is smooth because every time an increment increases the exponent, the frac part is doubled (from 0x80 to 0xff).I use a 16-bit word for the off_time and count it down with an interrupt once every 26.67µs (256 of the approximately 9.6MHz clock ticks). I think that I’ll do a similar thing for controlling the duty cycle of the dimmer, rather than the table of bytes that I currently use, though the duty cycle is limited to a single byte, so I’ll only have 256 levels, and not 1024, and I’ll want the duty cycle to increase exponentially, rather than decreasing, but those are easy fixes.

I also reduced the size of the program in flash, by getting rid of some of the overly general code from core13 and just manipulating the peripheral control registers directly.  I didn’t need to do this, as the ATtiny13A has 1kB of flash, but I got down to 364 bytes (and could probably strip out another 50–100 by getting rid of even more of core13).  The old dimmer code, which doesn’t have much more to do, currently takes 806 bytes, so I might try tightening that up tomorrow.

I also tried powering the strobe off a 9V battery.  The LED board takes about 117mA when turned on (see LED board I-vs-V curve), and if I keep the duty cycle below 1.5%, then the average current is dominated by the ATtiny13A’s worst-case 6mA current, and the total current for the board is probably less than 8mA.  According to Duracell’s data sheet for their 9V alkaline battery, I should be able to get about 50 hours of life before the voltage drops below 6.7V (at which point the LED board no longer maintains the constant current, but I could run the strobe a bit longer getting dimmer).  The 6.7V is also about the voltage where the LDO voltage regulator starts being unable to supply 5V to the ATtiny13A, though that is less of a bottleneck, as the chip can run with the 9.6MHz internal clock down to 3V with no problems.

The battery does not have to provide a full 117mA for the pulses, as there is a 470μF polymer electrolytic capacitor on the dimmer board.  Delivering 117mA for 1.6ms is only 187μC, so the voltage on the capacitor would dip at most 0.4V during the pulse, even without the battery.  The 9V battery has an internal resistance of 2Ω–4Ω, so it could provide 117mA with about a 0.35V drop, so the capacitor isn’t really necessary for one LED board.  It probably increases the efficiency slightly, as the I2R power loss in the internal resistor is reduced if the current is spread out (half the current for twice as long is only half the I2R loss).

I could put more LED boards on the strobe, as the dimmer is designed to handle 5A or more, but battery  operation would limit me to about 10 boards before the voltage drop was large enough to cause problems for the current regulation.  One LED board is bright enough for a Halloween pumpkin, but I could run wires between pumpkins to power several off the same controller.  (I could also keep the controller in the house, powered by a wall wart, and run wires out to the LED boards—I could then power 40 or 50 LED boards off the strobe, though I’d have to watch out for IR drop in the wiring.)

I might try wiring up 10 boards tomorrow, and see whether a battery really can power that many.