00:00:20.760
Hello everyone! My name is Corey Woodcox, and I work for the OC Tanner Company. We have a lot of us here today, and it's awesome. I really like what we do.
00:00:24.880
We utilize Ruby on Rails, automated testing, and we aim for 100% code coverage—because that’s a metric that surely ensures we have no bugs in our code. We also use Angular, Roku, GitHub pull requests, and issues. Last time I checked, we were averaging about 8 to 10 continuous deployments per day, thanks to CircleCI. I had a nice chat with them last night at dinner!
00:00:55.399
We are totally awesome, and as per usual, we are hiring!
00:01:05.920
Before I get started, I want you all to know that I have zero experience in electronics engineering. I have no idea what any of this does. About 20 minutes ago, I don't know if you can smell it in the air still, but there was a distinct scent of an exploded capacitor. That was me; I blew up a capacitor back there. I drove to Radio Shack and bought a new one just in time.
00:01:30.280
So, if you’ve ever heard the expression 'doing it live,' that’s what this is—I really have no idea what I’m doing!
00:01:43.079
So, why did I do this? Home automation is really cool when you think about the electronics we use every day. The thing you probably use the most is probably one of the simplest devices ever invented: the light switch. It has two contacts and is either on or off.
00:01:54.880
And you can replicate that with this little guy right here, called a solid-state relay. It's super simple. I wanted to do something with home automation because I can't remember who said it at dinner last night, but it’s 2013, and I still have to walk through my house to turn off all the lights before I leave. Why has the future left my house behind?
00:02:17.040
I wanted to have some fun setting this up. It’s super easy; I have no idea what I'm doing, and I think I pulled it off. It's incredibly useful. I’ve always wanted to spend a fortune on a home automation system. There was a Disney Channel original movie when I was a kid called 'Smart House,' which had this holographic lady as their maid, and I thought that was the coolest thing ever. How cool would it be to have your Smart House make you breakfast?
00:02:38.000
But really, what it comes down to is that I'm all about automation because I am extraordinarily lazy. I don't like doing things over and over. I had a t-shirt in high school that said, 'Go away before I replace you with a very small shell script.' So, I like it when things are simple, fast, and easy to use.
00:03:02.960
That’s why I use Ruby. I like it when things get out of my way. A great example of this is the Nest device. It’s incredibly cool—it’s easy to use, very simple, and fast. It learns how you like the temperature in your house to be, and they say that the 'Nest moment' is when you walk up to it to change it, and it automatically adjusts for you.
00:03:15.000
That’s truly impressive, and I believe automation like that has a huge place in our lives. We should try to create cool stuff that stays out of the way, doing one thing really well.
00:03:27.199
Now, let’s discuss something from my garage. Right here, I have a timer that was built almost 20 years ago, which runs the sprinklers in my yard. It's clunky; when you turn the knob, it makes a giant clunking sound. It’s probably the scariest thing I’ve ever seen. It’s super annoying because every time the power goes out, it forgets what time it is, and then my sprinklers come on in the middle of the day. It's so slow—in fact, if you’ve ever programmed anything like that, you know that to reset the time when it forgets, you have to hold the plus button down for what feels like forever.
00:05:00.639
Things have certainly improved since then. I visited Home Depot this morning, and the modern version of my timer is still for sale, and it hasn’t really advanced much; it still has knobs and everything!
00:05:06.960
How do I set this thing up? It's really easy—you just need to watch the 10-minute instructional DVD that comes with the system. Some of these are available online. If you want a good laugh, go watch them; they teach you all about how easy it is to set everything up. However, I hate the way this works and how I have to use it.
00:05:32.560
So this winter, after I forgot to winterize my sprinklers, I decided to build something that could manage them for me. I wanted a system that wouldn’t require me to reset the clock all the time and that I could set to run stations more than three times a day. There must be better ways to manage this.
00:06:01.599
I noticed that reasonable defaults would suit most people, which is a general principle with Rails. Not everything should require a connection to a network; I can easily get the time of day. There are around 18,000 different NTP servers in the world, and my device can check for any restrictions on watering times.
00:06:23.560
I also discovered a lot about weather data. The device I am working with is a 24V solenoid. It has a little plunger inside that allows water to flow when the electromagnet pulls it up, which causes the water pressure to push the valve open. It’s dead simple, and so far, mine has been installed for 20 years and still works great.
00:06:48.680
So, let’s wire up an Arduino to make this work. However, I don't want to deal with the Arduino environment because it's mostly C-based. While you can write Ruby and compile it down to the Arduino, I find Ruby a lot more fun. And using Linux dramatically simplifies things, which is why I decided to go with a Raspberry Pi.
00:07:09.960
The great advantage of using a Raspberry Pi is that it's a full-fledged computer running a Unix system. You get native Ruby and can use an NTP connection, so it automatically knows what time it is; it's pretty amazing. You also get UNIX sockets and so much more with Linux without any hassle.
00:07:29.200
However, compiling Ruby takes a long time, but I'm working on optimizing that. I have a build system at home that’s almost ready.
00:07:51.000
Austin Vance, a colleague at Pivotal, gave a talk about Arduino at RubyConf back in October. Arduino is great for small, repetitive tasks because you burn the chip for the specific functions, and it keeps doing those functions as long as it's powered.
00:08:03.920
It's fantastic for automation and regulating inputs and outputs. If you turn on two or three pins on your Raspberry Pi, it can react accordingly, while Arduino has many more GPIO pins available, enabling extensive automation.
00:08:29.199
Sadly, most Arduino projects I’ve seen require a laptop to control everything, which ties you down—the opposite of what I want! Austin made the point that Arduino works best with a connected computer around.
00:08:50.760
But with the Raspberry Pi, you get the full power of a Linux computer that boots right up and allows you to do everything you could ask for in automation.
00:09:08.960
Now, I came across a tweet from Gary Burnhard about two days ago that sparked my interest. It states that we often get excited about software and libraries because we assume they work perfectly, which is not always the case.
00:09:30.080
Unfortunately, I don't have a working example of a Raspberry Pi and Arduino communicating directly yet. However, I do have a functioning example of turning on a valve with the setup I have made.
00:09:40.199
When I set all this up, I thought it'd be neat to blink an LED or something with the Raspberry Pi to showcase everything. But ultimately, I decided to work with a real sprinkler valve that will open and close and actually control water. So we’re going to do that!
00:10:02.640
I pleaded with myself, 'What could possibly go wrong?' I didn't exactly tell Mike what I was planning to do, and I could get into some trouble. You all recognize the meme of Michael Jackson eating popcorn; that felt appropriate given the situation.
00:10:26.640
Now, I have two valves here controlling the hose output. First things first—we need to communicate with this Raspberry Pi.
00:10:38.160
We won’t be doing it over Wi-Fi; I’m smarter than that. Just a little bit of water spilled on the table from my preliminary testing, so let’s see if we can establish a connection.
00:10:52.159
So we’ll just do it live, right? Famous last words! Alright, it came right up, which is fantastic.
00:11:14.440
Last year, I was working on a gem called gpio, which is supposed to handle the differences between Raspberry Pi versions and abstract away some of the operating system interaction. Although I haven’t had the best experience with it, it’s what we’re using today.
00:11:35.120
The interface is quite nice, and I plan on improving it. Let's set up the GPIO output to control the pins.
00:11:48.560
We are going to output to pin seven. Let's see if this works and open the valves!
00:12:02.560
One... That's a good sign; I like this. (Laughter) Now for the second one... Okay, we have water flowing into the bucket, and the valve is closed. It needs to prime for a second because it’s water pressure that actually keeps the valve shut. Let me drain it.
00:12:32.600
When I turn the pin on, we dynamically create control here. Woohoo! Look at how cool this is! It’s so easy, you guys have no idea how simple it is.
00:13:10.320
I have the components I used right here, as well. If you’ve ever been to Adafruit, they have incredible stuff, including wiring harnesses perfect for Raspberry Pi. There's also the Pi Cobbler; it's a printed board with a ribbon cable and pin headers you can solder together. If you get a good soldering iron, you’ll be fine. It’s very straightforward.
00:13:34.480
For switching AC power, I employed a solid-state relay. I can’t remember the exact name for it right now, but it’s basically an optical isolator. This can handle up to 250 volts at 8 amps and can be switched on and off with a mere 3.5 volts, which is incredibly simple. If you follow the instructions, it would take about an hour to set up.
00:14:11.760
The good news is that Raspberry Pis are no longer on backorder, so you can get one shipped to you within a week. However, I’m still building a shopping list for all the components I want to use.
00:14:38.560
Do you guys have any questions for me?
00:19:08.640
Awesome, well...