I spent lot of time, lately, investigating the various hardware & software options currently available to build an home-automation system. Such a research was determined by two different factors:
- the dissatisfaction that I had evaluating commercial/proprietary solutions;
- the need to design the infrastructure of the electrical wiring of my new house.
As for point 1), let me be absolutely clear: it’s not only a matter of money (even tough the solutions I’ve been presented were relatively expensive). It’s first of all a matter of freedom! I don’t want to embrace a product/solution/platform that clearly impose serious constraints on future improvements; I want to keep control over the platform, so to let it grow as much and as high as I will decide!
Even tough I already heard about Arduino, I never focused on it seriously. You know: I’m from the “PC/server” world. It was not a problem, for me, to understand what was going on with the Raspberry PI revolution. But I was really missing the main, fundamental, difference between a single-board computer and an Arduino. This was a really big gap, indeed, for me.
Things started changing around the end of 2015, when I received my first Arduino Mega 2560 R3 (a chinese clone, BTW), and I started experimenting, searching for help and support, and developing.
I quickly realized that the Arduino ecosystem was much, much larger than what I expected: there are A LOT of really interesting communities (like the arduino.stackexchange one) and websites (like SparkFun, AdaFruit and lots of others), really full of well-described, detailed and useful content. I even had the chance to exchange some e-mails with a couple of really interesting men, namely Nick Gammon, one of the leader of arduino.stackecxhange and with no doubt a key-reference within the global Arduino community, and Andreas Spiess, whose youtube channel provides really valuable information.
While getting deeper with Arduino, I also started experimenting with sensors, relays, LEDs, pushbuttons, reed-switches, breadboards and other hardware tools, as well as power, current, resistors and other electrical/physics concepts.
As an open-source advocate, I particularly appreciate some aspects of the Arduino ecosystem:
- the “open-source” approach, translated to hardware: Arduino boards schematics, projects and diagrams are released under open-licences. This means that in the official page of each board (here are the one related to Arduino Mega 2560 Rev3), you can find all the technical documentation granting you the possibility to assemble such a board by yourself, without the need to pay any kind of royalities or fees. A quite large ecosystem grown up from this model, producing several consequences. What I want to underline, here, is that you have plenty of choices in deciding what to buy, ranging from the “original” Arduino board (that you can buy from http://arduino.cc ), to “clones” produced by some USA companies like Adafruit, to chinese “clones” like this.
I’m not going to tell you “what” to buy, and “where”. You’re free to decide by yourself (and, BTW, you’ll LEARN by yourself!). And this is the first very good news. - an “open-source” development-environment: in order to use an Arduino board you have to write a program (in Arduino jargon, this software is called “sketch”). The official development-environment is released under the GPL, so you’re able to use it as you want, and even able to improve/extend it to suite your own needs! Again: freedom!
- a community whose default is “open-source”, when talking about sketches: I’ve been quite impressed in observing that basically EVERYONE building sketches, now, in 2016, is really eager to SHARE such a sketch with everyone else. To me it looked like a big jump in the past, well before the proprietary-software revolution, when the “sharing of code” was the normality within the community of computer technicians (BTW: I’ve born on 1971, so I have not actively lived such a timeframe. But I’ve been lucky enough to learn about it…. first of all thanks to Richard Stallman and this related reading). Back to community, I found this aspect absolutely critical and really important to introduce young generation, young students or even childrens, to the wonderful world of programming and technology: the combination of the Arduino “open” platform and the “open-approach” of the community is a perfect match to help young students in “driving” the technology (…and not only “consume” it!);
- a really-low barrier to enter, in software terms: learning software development, nowadays, can be really challenging. Currently, things are much different than 15 years ago. If you try to enter the software development world from the WEB way, or from the PC way… things can quickly became really complex. And if you try to avoid such a complexity, chances are high that the software you’ll build will be… outdated quite early (or useless)!
Now enter the Arduino world: in around one year, the biggest/largest software I’ve encountered is by far smaller than a “common” library used on a daily-basis for every modern web project. As an example, the RS485 non-blocking library written by Gammon or the whole Souliss framework are way smaller (…and simpler to understand) than the current Angular library. The good news is that given the extremely small memory available on an Arduino (in the order of KB!… and NOT GB, as for current single-board-computer), the size of Arduino sketches will not increase much in upcoming years!
Taking all of them together, above factors imply that the Arduino ecosystem is a perfect fit for everyone that want to LEARN, want to PRACTICE, and want to SHARE about programming and technology.
Obviously such a “simple” technology presents also several “limits” but…. the good news is that it’s really possible to mix an Arduino with a single-board-computer so to benefit of the goods of both worlds. As an example, you can easily have a Raspberry PI with all the software you need (a web server with some custom web-pages) interconnected with an Arduino (via WiFi, via Serial, etc.) so to turn_on/turn_off a light (by Arduino) with a click on a web interface (on the RPI)…. But it is a story for a completely different post 🙂
Stay tuned! And feel free to comment!