Tuesday, May 9, 2017

May I sing with me

Is it really a comeback if it never really arrived?

Four years ago I started this blog with the premise in mind of it working as a motivator of sorts. I am honestly not sure if it ever did that because I still have a mile long list of unfinished projects, and an even longer one of excuses for why they are in that state.

The secondary goal I had was to share my work experience. Basically, I began studying electrical engineering because I was obsessed with guitar effect pedals, and none of my jobs have been anything like that... So what is that like? I never really cracked into this because I updated the blog like 5 times in 4 years.

So let's catch up.

Since January of 2015 I have been working as a software engineer, writing low level to application level software for industrial controllers and asset tracking devices. How did I get here, from my last reported position, making automated test fixtures? Well... it's not really that interesting, but I will break it down.

In the summer of 2013 I was fed up with my job. If my manager had been more interested in managing than ladder climbing, or if I had been more mature, I probably could have changed roles in the company or just cleaned up some of the things that had driven me to the edge. Basically, I caught all of the time critical projects, and for the most part completed them under budget, on time, etc. One of my peers caught all of the low priority projects, was never on time, always blew his budget, and basically turned everything into a Rube Goldberg science fair device that was awful to maintain and caught fire at some point during development. Any time our boss was planning future stuff (capital improvements, hiring decisions, hardware and software standardization, etc.) he would always side with this guy because they went to church together or something. I was sick of it. I was immature, and a victim of internal politics.

To compound this, the other two engineers on our four man team had just left for an aerospace place. Our manager back filled one of them by promoting a technician who was much more doer than thinker, and seemed content to leave the other spot open. I inherited a lot of their work, which led to an exchange where my manager was asking me, an electrical engineer who taught himself enough C to stop programming PICs in assembly, if I could debug a legacy C# application that was "crashing randomly in production". Maybe this was a dare to be great thing. I found and fixed the bug (the app didn't like it when work orders for parts that were not in our manufacturing database were scanned in. Surprise?) in a few hours... But I had to get out of there. There was an opening at the aerospace place, so I applied, interviewed, and started within a month.

This is one of the worst decisions I have ever made. In the interview I was led to believe I would be doing schematic and layout work bringing a bunch of ancient wire wrap boards into the 21st century. That would have been fine. I should have given proper recognition to the red flag impulse I got when the dude interviewing me asked me to interpret a wire diagram that had like... a symbol for a DAQ pin connecting to a relay... because it turns out that was the job. Not even drawing these things from scratch, but copying them out of 5, 10, 15... sometimes even 20 year old drawings. I wrote some AutoCAD macros and impressed people by finishing a job they allotted 80 hours for in two days... Which was nice, but I was back to checking indeed every morning within two months. Getting useful advice out of this job is a subject for another post. It was the longest 14 months of my life.

And it could have been longer. There was program manager at my old job who I had done a lot of work for. When I left he gave me his card and asked me to reach out if I ever needed anything. A job posting went up there for a mid career embedded programmer. My on paper experience didn't line me up for this, but based on the description I knew the group it was in, and I knew the people in that group liked me. While I was at the aerospace hell job I had spent as much time as I could either listening to the Embedded.fm podcast or on edx taking the Embedded Systems Shape the World class. Does this equal 3-5 years working with an RTOS on a cortex-m processor? Not at all, but I had some small projects I had finished at home, and had studied enough stuff to feel like I could speak the language. I reached out, met some guys for lunch, and got lucky when the more experienced candidate they wanted backed out on them to take a higher salary at his current job. It is impossible to thank people for opportunities like this.

So wrapping things up, the biggest piece of advice I have to give from this is: relationships matter.

I am a hard "I" INTJ. I am bad at maintaining relationships with family and friends who I don't see every day via work or living together. Even friends who I work with, but who sit in far away areas of the facility hit me up from time to time with stuff like "do you still work here?". This is bad, and I am working to change it. I wish I could convince myself at 17 how important this is.

Stop by and say hi to college professors during their office hours. email and check in every few months with high school friends. There is probably some way to do this that doesn't come off super weird, but I don't know it because INTJ. The point is that the one relationship I maintained basically by accident and thanks to no effort on my part ended up like... saving my career?

I have a project in mind for blogging that I will unveil in the next week or two. It will be fun!

Saturday, May 23, 2015

The Internet of ¯\_(ツ)_/¯: Part 1




As recently as a year ago I was thrilled about the mass market traction being gained by "The Internet of Things". I revamped my blog to talk about making a ZigBEE coffee pot!!! However, products I have discovered in the subsequent months have caused me to re-evaluate my stance.

The Internet of ¯\_(ツ)_/¯ is a series of posts aimed to document specious examples of modern buzzword consumer tech. Don't worry about holding onto your hat, surely we can find a maker to 3D print an IoT enabled wearable to replace it.

 /***********************************************************************/

Throughout history, the drive of technology has been improving the quality of life. A common aim to achieve this objective is taking a tedious or labor intensive task, and handing it over to a machine. From dishwashers, to calculators, to Roombas, the examples are as varied as they are endless.

The classic examples stand as such because the cause and effect is universally obvious. I spend too much time doing dishes, I will invent a machine to do it for me. I do not like long division, I will invent a machine to do it for me. I get too many scratches giving my cat piggy back rides, I will invent a machine to do it for me.

The description of the Quirky Refuel does its best to convince you that it has a place among these indispensable, life improving products:

"Nothing puts the kibosh on a cookout faster than an empty propane tank. With Refuel, you'll never get caught off guard by said BBQ bummer again. This super smart propane tank gauge connects to the Wink app on your mobile device so no matter where you are, you’ll always know when it's time to refuel."

My red flag for IoT devices is anything along the lines of "...no matter where you are, you'll always know when it's time to..."

In this specific context, what does that mean? I am out to dinner with my wife on a random Tuesday, and am suddenly possessed by the need to know how much propane I have? I am debugging firmware at 2pm the next day, when OMG HOW MUCH PROPANE DO I HAVE??!? It's Friday, 5am at the gym. I am unloading the squat press machine. The 45 pound plate tugging on my arm... this feels familiar... OMGWTF IS MY PROPANE TANK LESS THAN HALF FULL ?!!!??!!???????

I cook outside a lot, and just fail to see how having this information persistently at my fingertips would ever be useful. In the absolute best case scenario, I am shopping for things I plan on cooking within the next hour or two, wonder if I am good on propane, check my phone and discover that I am not... and have to drive back home to pick up my tank and go get it refilled??? I suppose this solves a problem for people who both cannot figure out if they can make it through a cook by just picking up the can, AND are extraordinarily concerned about both completing their cook without interruption and optimizing trips to the propane store.

So if eliminating these 5 second checks (which require you to be next to the tank) improves your life, this is a worthwhile product.

That is only half of my issue with it though.

This product retails for $49.99. A brand new 20# propane tank costs ~$30. Just keep a full tank as a backup, and your problem is solved.

It isn't a fun solution, but sometimes improving your life is pretty simple ¯\_(ツ)_/¯

Saturday, February 7, 2015

Boring Machine Disturbs Sleep



It is the day before my team was scheduled to present our senior project. We had spent months designing, prototyping, and testing circuits for a vacuum tube guitar amp and a handful of effects.

We handled all of the documentation first, assuming it would be the worst part of our final prep. The effects were already installed in their shiny enclosures. The only thing left to do was assemble the amp. I had gone through the pre-amp, power amp, and tone stack separately, and the assembly at this time reflected that, with a handful of modules jumpered together. It didn't sound great, but it worked.

It is 10pm the day before my team was scheduled to present our senior project. Re-Assembling the amp in a presentable enclosure is taking a lot longer than I had assumed. My three teammates are with me, but mainly for support. I mean... I didn't really have measurements for wire, and how many people can really solder inside an 8"x12"x2" enclosure?

It is 4am the morning my team was scheduled to present our senior project. 2 teammates have left... I am baffled by how long this is taking.

It is 8am the morning my team was scheduled to present our senior project. I finally finish. My teammate grabs a guitar and I connect the amp to the speaker cabinet. He turns it on... nothing. We are too tired to panic and skip straight to sulking. I grab a meter to start checking things, but the issue jumps out at me as soon as I open the amp: the fuse holder we mounted in this case is empty. Our test rigs had not used fuses, because we were just some wild (stupid? lucky?) kids I guess. We designed it into the final assembly for obvious reasons.

A quick re-wire to test the balance of the work validated the non fuse related portions of the project, so we went to Village Inn and ate breakfast. On the way back to my duplex we stopped at RadioShack and bought a fuse.

I restored the project to spec prior to our presentation. Somehow self oscillating delays and hendrix riffs mangled by logic gate glitch synth effects command enough attention to keep people's attention away from checking your wiring up against your schematic.

/****************************************************************************/

Most technically inclined people have a complicated relationship with RadioShack.

The function which determines the ultimate aim of one's view of The Shack has a lot of variables. What are your feelings on newspapers? Have you ever saved a project by driving 2 miles to buy an op-amp? How much does spending $3 on an op-amp bother you? Where does an employee directing you to the section of the store which sells boomboxes after hearing "op-amp" fall on your "Rage - LOLZ" spectrum?

Personally? I have always appreciated RadioShack.

I will never understand how they made enough money to stay open.

Their inability to capitalize on the hacker/maker/STEM momentum of the past 5ish years is as confounding as it is depressing.

Trying to upsell a cell phone plan to a man buying a 555 timer always struck me more as a bizarre joke than a call to consumer arms.

Every non conference attending work trip I have ever made has featured a trip to RadioShack. Design engineers usually get sent on trips because something they designed is not working in a pretty significant way. Working on the road is an art in and of itself, especially if you don't check a bag (fun fact: you can't carry on a screw driver that is >6" long, but a PCBA that can talk ARINC-429? Totally fine!), but you will always need something you don't have. A tool, a part, some wire, etc.

The parts bin at RadioShack is limited, but I have solved a lot of problems with it. Their cheap soldering irons are terrible, but when swapping some resistors will send you home earlier than waiting for a replacement PCBA, you make it work.

It is easy to mock RadioShack, but I always saw it as the store in a mall that sold perf boards. How can you tell me that the world is a better place now that I cannot buy a perf board at the mall???


Sunday, August 10, 2014

The Coffee Pot: Let's Make Some Plans

Let's start out by revisiting our design goals:

Base Goals:
-Remote Start
-Activity Sense On/Off
-Clock that retains setting through power outage
-Indication for lack of water/grounds
-Brew Complete Buzzer

Stretch Goals:
-Web Interface
-Brew Temp Control
 
Now let's look at them one by one.
 
So how do we implement a remote start?
 
The first thing we need to do is control the on/off switch hands free. Since this switch is passing 120VAC, I will be using a relay for this function. The relay will be triggered by a buffered GPIO on my microcontroller. The microcontroller will also talk to the other half of the remote start, which is the XBee transceiver.

I am choosing XBee for a few reasons. Mainly that the information on Sparkfun makes it look really easy to implement, but the low power aspects, small footprint, and range of it are nice as well. The master plan in play here, is that I will eventually have several XBee remotes on miscellaneous devices around my house, all controlled by the unit that will be born here.

Moving on to the activity sensor. The main thought I had here is that the user should not need to worry about the coffee pot being left on. There is the leaving the house concern, and then there is the making an awful smell by leaving the burner on when almost no coffee is in the pot concern.

The first one is easy to solve. Just have the burner turn off on a timer. Since my next goal involves a clock, and this burner is about as dumb as could be, this will be easy. Yahoo! Answers tells me coffee tastes bad after sitting on the burner for an hour... so lacking an expert objection, I will just go on that (this blog does not recommend using the Yahoo! Answers: Come at me if you know better method of reasoning for decisions less trivial than the shut off time on ones remote control coffee pot). The trickier one is figuring out if the pot is empty before 60 minutes has elapsed. I don't have a firm answer on this yet, but I will be experimenting with range and light sensors with the hope of developing a reliable "coffee/no coffee" detector that can fit in the back of the coffee maker.

Why would I add a clock to a kitchen device that does not have one? There are so many appliances that have clocks that do not need to know what time it is so much as they need to have an awareness of how much time has passed... So why would I add to this lot? Well, the coffee pot this one will be replacing has one... and while that isn't a great reason, it would be nice to have one appliance in the kitchen that keeps reliable time through power outages, if for no reason other than having a convenient source to reset the others from.

So a real time clock is the solution. I will be using a Maxim DS3234 because I found a Sparkfun board using this in a derelict project. I'm unsure on what sort of display I will be using at this point, since part of me still thinks it may be possible to fit this stuff into the existing coffee maker chassis.

Detecting a lack of water and/or grounds is another thing that will take some experiments. I would prefer using some sort of weight/pressure sensor for each, but finding something that is cost effective, and rugged enough without serious modification could be difficult, although this little guy from Sparkfun has potential. Both of these status items will be read by the on board microcontroller and sent back to the "control station". I referred to it briefly earlier, but the control station will receive its own post at a later date, as my plans for it extend beyond this project.

As for a completion buzzer? This could work in conjunction with the water sensor, or just be another function of experimentation and time. I think the time method will be more reliable, given what we learned about the reservoir setup during the teardown.

I will leave the stretch goals for future consideration. I want to make sure I can get my real time clock drivers running first. In my next post, hopefully I will be able to share some firmware!

I know a lot of things were kind of glossed over here, but this post was as much shared brain storm as anything else. I just spent two weekends repairing my lawn mower and catching up on home maintenance hell, so a little bit of mental calisthenics was necessary. Once the project is complete I will share complete schematic, bill of material, and firmware. If I ever sound like I am being intentionally vague, it is probably because I have yet to arrive at a solution I like.

Sunday, July 20, 2014

The Coffee Pot: Unboxing




I had never really considered how a coffee maker functioned before. The general process of getting the water hot, and then dumping it on the grounds is obvious, but how does the machine make it happen? How does it move the water from the reservoir to the basket with the grounds? How does it know when the water is hot enough? How does it do these things with components that come together and sell for profit at a shelf price of $10?



These are not questions that typically occur to me, especially at the time of day and state of mind that leads me to seek caffeine. They occurred to me as I was opening up my coffee pot, but even then... not really in any depth. I figured the switch would heat the reservoir and then it would have some sort of temp sensor and a comparator, and once a level was reached the water would be dumped into the basket with the grounds.

That method would work... but probably not for a product with a sale price of $10. It also would not work for a product where the reservoir and the grounds basket exist side by side, a fact that somehow escaped me. I'm an electrical engineer, dammit! I think in circuits, not... with my eyes???

Anyway, before we get to how this thing functions, I have someone for you to meet:




If this screw had his way, I would not be typing this right now. Instead, I would be googling methods of fashioning custom screw drivers out of melted plastic, and other atrocities.

Thankfully, the plastic on the bottom of the coffee pot is so bendy, I could just release the latches on the back, and fold it away.




 So... There is basically nothing in here. This should not have surprised me. I mean this coffee pot was purchased for $10.

The external switch connects the high side of the AC wall voltage to a heating element. There are two resistors in series with the heating element that I am guessing regulate the current through the element, which is probably cheaper than manufacturing what would basically amount to a horseshoe shape ceramic resistor.

I saw and took a sniff of the white stuff on the edges of the heating element. It's thermal paste! the heating element is not welded to the plate the pot sits on, it is pressed onto by the cross beam seen above. Kind of interesting?

Finally, for completion sake, we have a shot into the reservoir:




I drew a model to help visualize the system:



So the switch is turned on after the reservoir and grounds are loaded (or before, but why would you do that?). The water conduit in the bottom, and the plate that heats the pot are joined to the heating element by compression and thermal paste. As the water heats up it climbs the conduit until escaping into the basket, where it soaks the grounds, and coffee happens.

Next time I will compare the findings of my deconstruction to my design objectives from the previous post and discuss solutions. See you then!


Sunday, July 13, 2014

Project 1: The Coffee Pot

I do not drink coffee. I don't like it black and feel silly loading it up with cream and sugar. Even a tea man such as myself can see flaws in the coffee pot feature set though.

Programmable brewing is nice... But what if I don't get up at the same time every day? What if the power goes out and resets the clock? What if I forget to put water in it? What if I forget to turn it off?
So what are we looking at?
Market Research: Browsing coffee pots in Walmart a year ago.

Side note: There may be realized solutions on the shelf today that do not void a warranty. However, keep in mind that the primary motive of this and future projects is not altruism, but a selfish desire to increase my utility as an embedded system designer.

Base Goals:
-Remote Start
-Activity Sense On/Off
-Clock that retains setting through power outage
-Indication for lack of water/grounds
-Brew Complete Buzzer

Stretch Goals:
-Web Interface
-Brew Temp Control

The setup I have in mind right now will use a couple of MSP430s to setup a ZigBee network, consisting of a remote that will control the coffee pot, and a controller I can keep next to my bed. The controller will be expandable so I can add future home automation devices to it (you know, in case I want to open the garage while I'm in bed... Or something)

NEXT TIME: opening up the $10 coffee pot I bough at Walmart. Complete with #gutshots!!!!

Thursday, July 10, 2014

RESET

There's not really a good way to address my treatment of time other than saying some resolutions fall apart.

CF-1 flight test.jpg

I have not been blogging, obviously, so what have I been doing?

I gained a rudimentary knowledge of C++, changed jobs, and increased the length of my unfinished projects lists! Why is it so much easier to come up with ideas than it is to like, you know... do all of the tedious stuff necessary to complete them?

Well, mainly because daydreams are the fun part! Figuring out why your ARM launchpad keeps hanging up when you try to configure the PLL? Not so much.

My solution to this is to pick single projects and work on them until they are finished. I will hold myself accountable by making a blog post every Sunday.

The solution to being a flighty dreamer is to be more focused #FACT

The Lord accepts scheduled blog entries as praise #WHYNOT

That being said, I will reveal my first project, along with some sort of software/hardware requirements on Sunday July 13th.