Annons
Vi har tidigare pratat om de relativa fördelarna med Arduino och Raspberry Pi - de har alla sina styrkor. De behöver dock inte vara ett val eller ett val - kombinera dem för att få det bästa av båda världarna. Hemmeautomation är den perfekta kandidaten för detta. Hemmautomationsmarknaden är översvämmad av dyra konsumentsystem, oförenliga med varandra och kostsamma att installera. Om du har en Raspberry Pi Raspberry Pi: Den inofficiella självstudienOavsett om du är en nuvarande Pi-ägare som vill lära dig mer eller en potentiell ägare av denna kreditkortsstorlek, är detta inte en guide du vill missa. Läs mer och en Arduino, kan du i princip uppnå samma sak till en bråkdel av priset, förutsatt att du är villig att lägga in tid och ansträngning.
Uppdatering: Sedan den här artikeln skrevs, har jag upptäckt OpenHAB, en gratis och öppen källkod för hemmeautomation som körs på Raspberry Pi och kan integreras med ett stort utbud av smarta hemsatser utanför hyllan liksom Arduino. Kolla in videon nedan för en sniktopp, och fortsätt sedan till vår Komma igång med OpenHAB på Raspberry Pi Komma igång med OpenHAB Home Automation på Raspberry PiOpenHAB är en mogen, open source-hemmeautomationsplattform som körs på en mängd olika hårdvara och är protokoll agnostic, vilket innebär att den kan ansluta till nästan alla hemmautomationshårdvara på marknaden i dag. Läs mer guide för att lära sig mer.
Heimcontrol.js är en Node.js-app byggd för att köra på Raspberry Pi. Kombinerat med en Arduino och några fjärrkontrolluttag utanför hyllan gör det enkelt att styra växelströmsapparater. Du kan lägga till temperatursensorer och till och med styra din TV - men vi kommer att hålla saker grundläggande idag och utöka projektet i en senare självstudie.
Här är en uppdelning av projektet:
- Raspberry Pi kommer att fungera som hjärnan och porten för operationer - den kommer att köra en Node-app, bunden till en Mongo-databas och servera gränssnittet till alla webbläsare.
- En Arduino, som drivs från Pi, kommer nu att gränssnittet mellan strömbrytare för elektronik - radiostyrning.
För att göra detta behöver du:
- Arduino och en hallonpi
- Några fjärrstyrda uttag och styrenhet (jag använde dessa)
- Driven USB-hub

Innan vi börjar är här en demovideo från projektskaparen själv.
Börja Afresh
Vi kommer att använda Raspian för det här projektet 11 operativsystem som körs på din hallonpiOavsett vilket Raspberry Pi-projekt du har, finns det ett operativsystem för det. Vi hjälper dig hitta det bästa Raspberry Pi OS för dina behov. Läs mer , och jag skulle starkt föreslå att du börjar från en ny installation om du tidigare har gjort andra hacks och sådant. Ladda ner det senaste Raspian-bild, kopiera det till ditt SD-kort och se till att expandera filsystemet och aktivera SSH. Resten av den här guiden antar att du har gjort det och ansluter via SSH med standardanvändaren.
Om du inte har gjort det förut förklarar den här videon processen för att förbereda ditt SD-kort i OS X:
Och den här för Windows-användare:
Förberedelse
Installationsprocessen är ganska besvärlig och härledd från instruktioner här. Tyvärr var dessa föråldrade eller inte utformade för Raspian, så jag har justerat dem kraftigt nedan. Koderna nedan kan mest klistras in i block - du behöver inte klistra in en efter en. Eftersom vi sammanställer några saker på själva Pi-enheten, varnar vi dig för att hela processen kommer att ta lång tid. Jag skulle säga gå gör dig en kopp te - men när jag säger ”lång tid”, menar jag den bästa delen av en dag - så 178 koppar skulle vara mer lämpliga.
Alla kommandon ska skrivas in i terminalen, och du kan behöva trycka på Enter på vissa punkter. Dessa första kommandon kommer att uppdatera systemet och installera förutsättningar:
sudo apt-get-uppdatering sudo apt-get-uppgradering. sudo apt-get install git-core git scons build-essential scons libpcre ++ - dev xulrunner-dev libboost-dev libboost-program-options-dev libboost-thread-dev libboost-filesystem-dev.
Nästa måste vi installera Node:
sudo mkdir / opt / node. wget http://nodejs.org/dist/v0.10.2/node-v0.10.2-linux-arm-pi.tar.gz. tar xvzf-nod-v0.10.2-linux-arm-pi.tar.gz. sudo cp -r node-v0.10.2-linux-arm-pi / * / opt / node. sudo ln -s / opt / node / bin / node / usr / local / bin / node. sudo ln -s / opt / node / bin / npm / usr / local / bin / npm.
Lägg till en PATH-variabel i din profil så att operativsystemet vet var nod befinner sig. Använd nanotekstredigeraren enligt följande:
sudo nano / etc / profile.
Leta reda på linjen som säger exportera PATH och ersätt den med:
NODE_JS_HOME = "/ opt / nod" PATH = "$ PATH: $ NODE_JS_HOME / bin" exportera PATH.
Tryck på Ctrl-X för att avsluta och Y för att spara.
Du kan behöva logga ut och logga in igen för att vägen ska ändras, men du kan testa med kommandot:
vilken nod.
Om du inte får någon utgång som pekar på Node-binären, gick något fel.
mongo
Nästa jobb är att installera mongo. Mongo är en dokumentbaserad No-SQL-databas som allt mer används av webbappar. Tyvärr kommer det ta evigt att installera eftersom vi måste sammanställa det. När du kör följande kommandon får du många fel som:
{standardinmatning}: 13085: Varning: swp {b} användningen avskrivs för den här arkitekturen.
Oroa dig inte för dessa. Så kör dessa kommandon för att installera Mongo:
git clone git: //github.com/RickP/mongopi.git. cd mongopi. scons. sudo scons --prefix = / opt / mongo installera scons -c.
När det är klart behöver vi lite mer installation först för att lösa behörighetsproblem och se till att det körs vid start.
sudo useradd mongodb. sudo mkdir / data / dbb. sudo chown $ USER / data / db. cd /etc/init.d. sudo wget -O mongodb https://gist.github.com/ni-c/fd4df404bda6e87fb718/raw/36d45897cd943fbd6d071c096eb4b71b37d0fcbb/mongodb.sh. sudo chmod + x mongodb. standard för sudo update-rc.d mongodb. mongod
Det sista kommandot startar Mongo-servern, och du måste öppna en ny terminal för att fortsätta med de andra kommandona. Jag är inte helt säker på detta steg, så om någon kan korrigera detta i kommentarerna om hur man ska starta mongod automatiskt vid uppstart, skulle det uppskattas. För tillfället fungerar det, bara inte elegant.
sudo stängning -r nu
Slutligen är det dags att installera Heimcontrol.js Node-applikationen.
cd ~ pi. git klon git: //github.com/ni-c/heimcontrol.js.git. cd heimcontrol.js. npm installation.
Du kan börja köra appen genom att skriva
node heimcontrol.js.
Vid denna punkt bör du kunna komma åt kontrollgränssnittet med http://localhost: 8080 från Pi, eller ersätt localhost med IP-adressen om du kommer åt den från en annan dator (och du kan också ställa in portåterföring Vad är port vidarebefordran och hur kan det hjälpa mig? [MakeUseOf Explains]Gråter du lite inuti när någon säger att det finns ett problem för port vidarebefordran och det är därför din glänsande nya app inte fungerar? Din Xbox låter dig inte spela spel, dina torrentnedladdningar vägrar ... Läs mer för att få åtkomst till den var som helst i världen), så jag skulle uppmuntra dig att titta runt och kolla att allt fungerar med databasen innan du ansluter Arduino.
Hårdvara
Så småningom skulle jag vilja ha ett fast kabelrelä, men för tillfället kommer jag att använda det säkrare alternativet med radiostyrda switchar.
Jag har använt några rimligt billiga uppsättningar på 20 £ från Maplin som levereras med tre uttag och öppnade fjärrkontrollen så att jag kunde gränssnitt direkt med 433 MHz-chipet inuti. Jag hittade instruktionerna för detta här.

Du kan också köpa individuella 433 MHz-sändare som är klara för användning på eBay eller från hobbyelektronikleverantörer. Allt du behöver är att ansluta VCC till 5 V på Arduino, GND och en enda kontrollstift - kom ihåg vilken du använde. (Schematisk av Willi Thiel)

Plugin fungerar genom att skicka "tristate-koder", men dessa kommer att variera beroende på tillverkare. Referera till RCSwitch-dokumentation för att hitta dina exakta koder. Detta wiki guide kan hjälpa också.
Kommunikation med Arduino sker med ett Node-bibliotek som heter duino. Stoppa Heimcontrol-appen om den körs och installera Arduino-bron med följande kommando.
npm installera duino.
Det måste Arduino ha den här koden laddas upp - Jag föreslår att du kopierar och klistrar in för att installera det från en annan dator. Det är i huvudsak ett lyssnarprogram som svarar på seriella kommandon från Pi, men det är inget som hindrar dig att utöka det med dina egna funktioner.

Gå igång med webbappen inställningar meny> Arduino.

Därifrån kan du lägga till ett nytt objekt, välja RCSwitch-metod, sändarens stift och den tristate adresskoden. Kom ihåg att spara och gå tillbaka till huvudskärmen för din nya knapp.

Bugs:
Efter många timmar med felsökning av koden, hittade jag ensiffriga pin-nummer fungerade inte - se till att din sändare är placerad på stiftet 10 För att vara säker.
Jag fann också att Arduino-pluginet var hårkodat med felaktiga slutbitar för de tristatkoder som mina mottagare behövde. En liten förklaring först: tristatkoder består av 3 byte information. Den första bestämmer oss nätverksnumret (1-4), och den andra tillhandahåller sändtagarens adress (igen, 1-4, vilket ger maximalt 16 adresserbara uttag). Den sista byten består av två bitar stoppning, plus 2 bitar för på / av. Tyvärr är den sista byten hårkodad i Arduino-plugin - och i mitt fall var on / off-koden felaktig.
Jag var tvungen att redigera manuellt plugins / arduino / index.js för att använda rätt koder. Om du använder samma fjärrkontrolluttag som jag är, byter du rader 80 till:
// Skicka RC-kod. if (item.value) {returnera that.pins [item.pin] .triState (item.code + "FFFF"); // ändra från FF0F. } annars {returnera that.pins [item.pin] .triState (item.code + "FFF0"); // ändra från FF00. }
Här är en demovideo av allt som fungerar:
Jag kommer att lämna det här just nu, men sensoravläsningar och IR-fjärrkontroller är det stöds också. Jag kommer förmodligen att granska dessa på ett senare datum med några fler förbättringar. Om det här har varit lite för komplicerat för dig, kanske kolla in dessa nybörjarvänliga Arduino-projekt 15 stora Arduino-projekt för nybörjareIntresserad av Arduino-projekt men inte säker på var du ska börja? Dessa nybörjarprojekt lär dig hur du kommer igång. Läs mer .
James har en kandidatexamen i artificiell intelligens och är CompTIA A + och Network + certifierad. Han är ledande utvecklare av MakeUseOf och tillbringar sin fritid med att spela VR-paintball och brädspel. Han har byggt datorer sedan han var liten.