Hemautomatiseringsguide med Raspberry Pi och Arduino

Hemautomatiseringsmarknaden översvämmas med dyra konsumentsystem, inkompatibla med varandra och kostsamt att installera. Om du har en Raspberry Pi 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.

Hemautomatiseringsmarknaden översvämmas med dyra konsumentsystem, inkompatibla med varandra och kostsamt att installera.  Om du har en Raspberry Pi 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.
Annons

Vi har pratat om de relativa fördelarna med Arduino och Raspberry Pi tidigare - de har sina styrkor. De behöver inte vara ett eller annat val men - kombinera dem för att få det bästa av båda världarna. Hemautomation är den perfekta kandidaten för detta. Hemautomatiseringsmarknaden översvämmas med dyra konsumentsystem, inkompatibla med varandra och kostsamt att installera. Om du har en Raspberry Pi Raspberry Pi: Den Inofficiella Tutorial Raspberry Pi: Den Inofficiella Handledningen Om du är en nuvarande Pi-ägare som vill lära sig mer eller en potentiell ägare av denna kreditkortstorlek, är det här inte en guide du vill sakna. Läs mer och en Arduino, du kan 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ällans hemautomatiseringsplattform som körs på Raspberry Pi och kan integreras med ett stort utbud av hemmabiosystem och Arduino. Kolla in videoklippet nedan för en snyggtopp och gå vidare till vår Komma igång med OpenHAB på Raspberry Pi Komma igång med OpenHAB Hemautomation på Raspberry Pi Komma igång med OpenHAB Hemautomation på Raspberry Pi OpenHAB är en mogen, öppen källkodsautomatisering plattform som körs på en mängd olika hårdvaror och är protokoll agnostic, vilket innebär att den kan anslutas till nästan vilken hemautomatiseringsutrustning som helst på marknaden idag. Läs mer guide för att lära dig mer.

Heimcontrol.js är en Node.js app byggd för att köra på Raspberry Pi. Kombinerad med en Arduino och några avlägsna fjärrkontakter, gör det enkelt att styra AC-apparater. Du kan lägga till temperatursensorer, och även styra din TV - men vi kommer att hålla sakerna grundläggande idag och förlänga projektet i en senare handledning.

Här är en sammanfattning av projektet:

  • Raspberry Pi kommer att fungera som hjärnor och ingångsporten - det kommer att köra en nod-app, kopplad till en Mongo-databas, och servera fronten-gränssnittet till en webbläsare.
  • En Arduino, som drivs från Pi, kommer att koppla mellan elektronik - radiostyrd strömbrytare, för nu.

För att göra detta behöver du:

  • Arduino och en hallon Pi
  • Några fjärrstyrda uttag och kontroller (jag använde dessa)
  • Drivs USB-hubb

RC-sockets

Innan vi börjar, här är en demovideo från projektskaparen själv.

Börja Afresh

Vi kommer att använda Raspian för detta projekt 10 Operativsystem du kan köra med hallon Pi 10 operativsystem du kan köra med hallon Pi Hårdvaran i Raspberry Pi ensam är bara en sida av historien: Idag utforskar jag 10 olika operativsystem du kan installera. Läs mer, och jag rekommenderar starkt att du startar från en ny installation om du tidigare har utfört andra hackar och liknande. Ladda ner den senaste Raspian-bilden, kopiera den 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 kopplar över SSH med standardanvändaren.

Om du inte har gjort det här förklarar den här videon processen att förbereda ditt SD-kort i OS X:

Och den här för Windows-användare:

Förberedelse

Installationsprocessen är ganska mödosam och härledd av instruktionerna här. Tyvärr var dessa föråldrade eller inte designade för Raspian, så jag har justerat dem kraftigt nedanför. Koderna nedan kan för det mesta klistras in i block - du behöver inte klistra in en efter en. Eftersom vi sammanställer några saker på Pi själv, varnas att hela processen kommer att ta lång tid. Jag skulle säga att du gör dig själv en kopp te - men när jag säger en "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 vid vissa punkter. Dessa första kommandon uppdaterar systemet och installerar förutbeställningar:

sudo apt-get update sudo apt-get upgrade 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 behöver 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 node-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 operatören vet var noden finns. Använd nano-textredigeraren enligt följande:

 sudo nano /etc/profile 

Leta upp linjen som säger export PATH och ersätt den med:

 NODE_JS_HOME="/opt/node" PATH="$PATH:$NODE_JS_HOME/bin" export PATH 

Tryck Ctrl-X för att avsluta och Y för att spara.

Du kan behöva logga ut och in igen för att sökvägen ändras för att träda i kraft, men du kan testa med kommandot:

 which node 

Om du inte får någon utmatning som pekar på binärnoden, gick något fel.

mongo

Nästa jobb är att installera Mongo. Mongo är en dokumentbaserad No-SQL-databas som används alltmer av webapps. Tyvärr tar det för evigt att installera, eftersom vi måste sammanställa det. Medan du kör följande kommandon får du många fel som:

 {standard input}:13085: Warning: swp{b} use is deprecated for this architecture 

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 install scons -c 

När det är klart, behöver vi lite mer setup först för att lösa tillståndsproblem och se till att det körs vid uppstart.

 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 sudo update-rc.d mongodb defaults mongod 

Det här 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å det här steget, så om någon kan korrigera detta i kommentarerna om hur man ska starta mongod automatiskt vid starten, skulle det mycket uppskattas. För nu fungerar det, inte bara elegant.

 sudo shutdown -r now 

Slutligen är det dags att installera Heimcontrol.js Node-applikationen.

 cd ~pi git clone git://github.com/ni-c/heimcontrol.js.git cd heimcontrol.js npm install 

Du kan börja köra appen genom att skriva

 node heimcontrol.js 

Vid den här tiden borde du kunna komma åt kontrollgränssnittet med http: // localhost: 8080 från Pi, eller ersätta localhost med IP-adressen om du kommer åt den från en annan dator (och du kan också ställa in port vidarebefordra Vad är port vidarebefordran och hur kan det hjälpa mig? [MakeUseOf Explains] Vad är porten vidarebefordra och hur kan det hjälpa mig? [MakeUseOf Explains] Skriker du lite inuti när någon säger att det finns ett portpostproblem och det är därför din glänsande ny app kommer inte fungera? Din Xbox låter dig inte spela spel, dina torrentladdningar vägrar ... Läs mer för att komma åt den från var som helst i världen), så jag skulle vilja uppmuntra dig att poke runt och kontrollera att allt är arbetar med databasen innan du bifogar Arduino.

Hårdvara

Så småningom skulle jag vilja ha ett hårddiskrelä, men för tillfället använder jag det säkrare alternativet för radiostyrda omkopplare.

Jag har använt några rimligt billiga 20 pundssatser från Maplin som levereras med 3 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.

rc-regulator-hack

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

arduino-rcswitch

Pluggen fungerar genom att skicka "tristatkoder", men dessa kommer att variera per tillverkare. Se RCSwitch-dokumentationen för att hitta exakta koder. Den här wikihandboken kan också hjälpa till.

Kommunikation med Arduino görs med ett Node-bibliotek som heter Duino. Stoppa Heimcontrol-appen om den körs och installera Arduino-broen med följande kommando.

 npm install duino 

Arduino måste ha denna kod uppladdad - jag föreslår att du kopierar och klistrar för att installera den här från en annan dator. Det är i huvudsak ett lyssnareprogram som svarar på seriella kommandon från Pi, men det finns inget som hindrar dig att förlänga det med dina egna funktioner.

rc-settings

När webbprogrammet lanserades går du till menyn Inställningar > Arduino .

heimcontrol-menyinställningar

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

rcswitch-inställning

Bugs:

Efter många timmars felsökning av koden fann jag att enstaka pinnenummer inte fungerade - se till att sändaren är placerad på stift 10 för att vara säker.

Jag fann också att Arduino plugin var hårdkodad med felaktiga slutliga bitar 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 det andra tillhandahåller transceiveradressen (igen 1-4, vilket ger max 16 adresserbara uttag). Den sista byten består av två bitar polstring, plus 2 bitar för på / av. Tyvärr är den sista byten hårdkodad till Arduino-plugin - och i mitt fall var on / off-koden felaktig.

Jag var tvungen att manuellt redigera plugins / arduino / index.js för att använda rätt koder. Om du använder samma fjärrkontakter som jag är, byt linje 80 vidare till:

 // Send RC code if (item.value) { return that.pins[item.pin].triState(item.code + "FFFF");//change from FF0F } else { return that.pins[item.pin].triState(item.code + "FFF0");//change from FF00 } 

Här är en demovideo av allt som fungerar:

Jag kommer att lämna den här här, men sensoravläsningar och IR-fjärrkontroller stöds också. Jag kommer noga återkomma till dessa senare, med några fler förbättringar. Om det här har varit lite för komplicerat för dig, kolla kanske dessa nybörjarevänliga Arduino-projekt 10 Great Arduino-projekt för nybörjare 10 Stora Arduino-projekt för nybörjare Att slutföra ett Arduino-projekt ger dig en känsla av tillfredsställelse som ingen annan. De flesta nybörjare är inte säkra på var man ska börja, och även nybörjareprojekt kan verka ganska skrämmande. Läs mer .

Bildkrediter: Dörrklocka Via Flickr

In this article