I recently heard about Arduino and am extremely excited to begin working on a long-term project to automate several parts of my home. However, I'm not quite sure how to approach the idea I have in mind. Any direct help or links to relevant guides or similar projects is greatly appreciated.
The whole idea behind my approach to this build is to ensure future expandability, in that I don't mind taking extra steps now to make things simpler and more flexible later. I want to tackle this project with the goal of having several ways to control various Arduinos while being able to add more in the future. I tend to ramble, so I'll try to keep this as succinct and logical as possible.
The foundation of this project will be the data-gathering sensors placed around the house. These will include a single light sensor, a motion sensor or two in each room (however few I can get away with), and microphones in several main rooms (if this part is possible – I haven't found much on this in my research).
The reason I listed only one light sensor is because I want it to detect daylight and report its findings back to a server that controls other Arduinos based on this data. For example, if it's daylight outside, the window blinds around my house will open per this project, while they'll close once it grows dark outside. Because I'd like to apply this to blinds around my house, instead of putting a light sensor alongside each and every blind, I want one separate light sensor to report this data to all the blinds in the house. Hence, a central server to process this data and distribute commands.
Once the server receives data that it is dark outside, it should then send a command to all relevant actionable Arduino points (in this case, those connected to servos which operate window blinds) to carry out their appropriate action. I plan to eventually have several different types of actionables that receive commands from the server to carry out their function when appropriate, hence the need of scalability.
Sure, controlling the lights or temperature with your phone or smartwatch is cool, and I want to implement that, but why dwell in the Stone Ages when we can have voice control? This is where things get a bit more tricky and where the majority of time will likely need to be spent, but I essentially want to say "Lights" and have the lights in that particular room – but no other room – toggle. This shouldn't be difficult logic-wise, as each mic will be grouped with the lights in its room, but the biggest issue I foresee is having an always-listening mic (or more) in every room that will pick up on these commands (perhaps with a keyword beforehand).
My current thinking is to have the audio feed back to the server, which processes each feed for keywords and sends execute commands to appropriate actionables once invoked. As I said, this could get tricky, but I definitely want to include this ability, or, at least, room for it to be added in later.
More Server Details
Another need for a central processing unit for the whole setup is so I can modify code accordingly. For example, I can have the light sensor report back its information regularly, and I can tell the window blinds servo to turn so many degrees when it receives a certain command – these will need little to no future modification of code – but I need to be able to add new commands, inputs, outputs, and workflows without troubling to update all the Arduino components involved in whatever the additional action might be.
Scalability is key, as I want the single light sensor to enable the server to close blinds, turn on outside lights, shut in the chickens, and whatever else I might add in the future. Every component should talk back to the server, which would in turn allow every component to talk to the other. Additionally, I would greatly like for the majority of this to be wireless if at all possible and feasible.
I was thinking that the best way to handle this would be to have the Arduino peripherals talk to a central Raspberry Pi which would act as the server. I considered having a PC as the server, but that would require it to be always-on, and the energy consumption, as well as the occasional necessary reboot, wouldn't make that practical.
Because I'm relatively new to all this and have virtually no hands-on experience with setting up Arduinos, I'm not sure how much I'm asking here, although I'm relatively sure it's possible, albeit an extensive project. I am proficient in C#, and I'm pretty sure I can get up to speed on C for what I need in coding the Arduinos.
Any tips, advice, suggestions, guidance, bits of wisdom, and especially links to resources, tutorials on subsets of this project (such as voice-controlled ceiling lights), similar projects of this scale, or tutorials on similar projects of this scale (!) would be greatly appreciated. I'm certainly excited to join the Arduino community and am looking forward to getting creative and exploring the infinite possibilities with you all.