The pool that I work at installed a splashpad a couple of years ago. It was a great addition and has been quite popular. Being much easier to prepare than the rest of our facility we’re able to open it up at least a month ahead of the rest of the facility to give our members and the community an extended season.
As it was being installed and while it has been in service since, and as I always do, I thought a number of things could have been designed better. In particular, I thought the controller was a bit ridiculous.
The slashpad is activated with a motion sensor which is great, not only because we don’t have to turn it on and off manually, but because the children enjoy running over to wave their hand in front to turn it back on as much as playing in the features. A 3HP motor is turned on and 8 of the 12 features use 1″ or 1.5″ 24VAC solenoid to cycle through the features leaving 4 on at any given time. It runs for 15 minutes and turns off awaiting a signal from the motion sensor.
In the image of the setup, you can see the PCBs from the controller. The top left appears to be a master controller for serial communication, below that is the board the input from the motion sensor connects to and below that is a bank of relays for the solenoids. On the right is a 120VAC/24VAC transformer and DC converter that powers the boards and remote motion sensor. Nothing too fancy, it looks like a pretty standard industrial controller. But then all of this is controlled by a touch screen computer running Ubuntu Desktop with a GUI build on a LAMP stack.
The GUI gave us no function other than a large on off button. There was a menu with links that required a login that was not given too us, but the htpasswd file was in the normal place in plain text. So that gave use a diagnostic page and and editor for the sequence, but it wasn’t terrible useful. It did look like there was some intent to have remote access for the company to configure or diagnosis things, which would make an embedded server a good choice, but I would have opted for a headless setup.
There were two problems I anticipated with the setup. The first was heat. The whole thing, including the x86 computer with 2.5″ hardrive was sealed in a plastic box in a shed outside during summer. This did become a problem and we had to leave the door open on the box to keep the computer running. This introduced another problem of moist air with chlorine ions entering and there are now points were corrosion is developing.
The second problem was dealing with the desktop operating system having problems, as they do. Once in a while, things would not operate but was solved by a reboot. The touch screen was small and not calibrated perfectly and without that difficultly added getting the managers comfortable with shutting down Ubuntu was not going to happen. The habit was to unplug it from the wall to turn it off. So I figured the hard drive would fail in a couple of years at most.
A couple of weeks ago I was greeted with the click of death when I checked on it in the morning. We had a storm and power outage the night before so that likely had something to do with it. I had made a copy of the webroot and some binaries for the serial controller, so I hoped I could get it all reinstalled on a new harddrive. After being unable to boot even after replacing the hard drive I cracked open the computer and with all the corrosion gave up on it. The boss contacted the company to get a new computer and it was not in stock, so it was going to be a while.
The boss wasn’t too excited about the only feature we had open being out of order and hoped I could get it functional in some way in the meantime. I had been thinking about how I would design it for a while so the plan was already in my head. I grabbed an Arduino pro mini and a relay board from home along with a perfboard, headers, and connectors from Radioshack. After a couple of hours, my less than $25 controller was running. The only notable difference from the outside (If you were a really keen observer) was the features switched randomly rather than in a predetermined order.
After a week we finally heard back about the new computer. It was going to take a couple more weeks after we approved the over $2000 estimate that took them a week to get to us. We had just spend a good deal of money on repairing a bit of old infrastructure that failed and we were not in the best financial spot. My boss asked if there was a reason we couldn’t keep the current setup. It was a little slapped together, but I said we could probably keep it functioning well enough and I could design it a bit better and have a couple of drop-in replacements ready for well under $2000. So, I ordered some parts for Tayda, started prototyping on a breadboard, and am starting to design a PCB in Fritzing.
I’m going to stick with the Atmega328P. It will likely be useful for other things (like a drip irrigation controller I need for another project), so I’m going to aim for cleaning things up enough to release the source.