Make Beer.

Stýra suðuferlinu með Raspberry PI.

Íhlutir
Raspberry PI 2B+
USB B Snúra
USB B Tengi
220V Innstunga utaná liggjandi
Matrix Board
1K Viðnám
DS18B20
Solid State Relay 40A
Soli State Relay Kæling
HDD Spennugjafi 5V/12V 2A
On/Off Rofi
2n2222A Transitor.

Hugbúnaður fengin frá http://web.craftbeerpi.com/ og búnaður víraður upp samkvæmt þeirra teikningu.

Keypt var Solid State Relay frá ebay og reyndist ekki hægt að stýra því beint frá Raspberry Pi svo smíða þurfti rás til að nota 12V til að kveikja á þeim.
Best að versla SSR með plasthlíf sem verndar aðgang að 220V. Einnig að hafa sér fæðingu með kló inn á SSR svo hægt séð að vinna með rásir án 220V.
Rásin er sett á milli SSR og Raspberry PI

 Smíða smá kassa utan um þetta.

 

Öllu komið fyrir inn í kassanum
  

DS18B20 Hitanema tengdir við USB.
 

Síðan kveikja undir og prufa.

 

 

Mæla vatnshita á inntaksgrind.

Raspberry PI nýtist vel í að mæla hitastig á inntaksgrind í húsnæði.

Mælar settir á þá staði sem óskað er.

Þá sést hver nýtingin er úr ofnakerfinu.

Inntakið í húsið er 65gráðu heitt.

Uppsetning á þessu er Ubuntu vefþjón, Rasberry PI, þrír hitanemar DS18B20

Á Ubuntu vefþjóni keyrir InfluxDB með Grafana.

Raspberry PI tekur gildi frá hitanema á 5mín fresti og sendir inn í grafana.

Grafana býr til gröfin, og lætur vita með email ef hitastig er ekki innan gilda.

Hægt er að tengja grafana við Bulksms

 

Búa til KIOSK vél með Raspberry PI

KIOSK lausn er þægileg til að birta skjá upplýsingar.

 

Hér er ein lausn til að birta alltaf sömu heimasíðu við endurræsingu og slökkva á screen saver.

Fyrst Raspberry PI uppsett með noobs sem ræsir skjálotu og pi userinn skráist sjálfkrafa inn.

Síðan er vnc uppsett svo hægt sé að yfirtaka skjáinn ef með þarf.

pi@raspberrypi:~ $apt-get update
pi@raspberrypi:~ $apt-get upgrade

pi@raspberrypi:~sudo apt-get install x11vnc

náum í chrome og setjum upp.

pi@raspberrypi:~wget https://dl.dropboxusercontent.com/u/87113035/chromium-browser-l10n_48.0.2564.82-0ubuntu0.15.04.1.1193_all.deb
pi@raspberrypi:~wget https://dl.dropboxusercontent.com/u/87113035/chromium-browser_48.0.2564.82-0ubuntu0.15.04.1.1193_armhf.deb
pi@raspberrypi:~wget https://dl.dropboxusercontent.com/u/87113035/chromium-codecs-ffmpeg-extra_48.0.2564.82-0ubuntu0.15.04.1.1193_armhf.deb
pi@raspberrypi:~sudo dpkg -i chromium-codecs-ffmpeg-extra_48.0.2564.82-0ubuntu0.15.04.1.1193_armhf.deb
pi@raspberrypi:~sudo dpkg -i chromium-browser-l10n_48.0.2564.82-0ubuntu0.15.04.1.1193_all.deb chromium-browser_48.0.2564.82-0ubuntu0.15.04.1.1193_armhf.deb

Stillum LXDE
pi@raspberrypi:~sudo nano /etc/xdg/lxsession/LXDE/autostart
@lxpanel --profile LXDE
@pcmanfm --desktop --profile LXDE
@xscreensaver -no-splash
@xset s noblank
@xset s off
@xset -dpms

Breyta í lightdm.conf
pi@raspberrypi:~sudo nano -w /etc/lightdm/lightdm.conf
xserver-command=X -s 0 -dpms

Búum til autostart folder fyrir þessa skjálotu
pi@raspberrypi:~cd ~/.config/
pi@raspberrypi:~mkdir autostart

Síðan eru gerðar tvær skrár sem ræsa chrome og vnc

Afrita síðan í skránna 

pi@raspberrypi:~sudo nano ~/.config/autostart/autoChromium.desktop
Afrita síðan í skránna

[Desktop Entry]
Type=Application
Exec=/usr/bin/chromium-browser --disable-popup-blocking --disable-infobars --disable-session-crashed-bubble --disable-tab-switcher --disable-translate --kiosk http://www.hindberid.is/
Hidden=false
X-GNOME-Autostart-enabled=true
Name[en_US]=AutoChromium
Name=AutoChromium
Comment=Start Chromium when GNOME star

pi@raspberrypi:~sudo nano ~/.config/autostart/x11vnc.desktop
Afrita síðan í skránna

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=X11VNC
Comment=
Exec=x11vnc
StartupNotify=false
Terminal=false
Hidden=false

pi@raspberrypi:~sudo reboot

 

Raspberry PI NeoPixel Led

Tengja WS2812B NeoPixel led við Raspberry PI.

Munurinn á þessum Led og venjulegum RGB Led er að hægt er að stýra hverju Led fyrir sig með einum útgangi á GPIO á Raspberry PI.

Hægt er að kaupa þessar Led á borðum og stakar, hér eru notaðar stakar og þær festar á vero board.

sala1   IMG 20141227_131651 Medium  IMG 20141227_131840 Medium IMG 20141227_132638 Medium IMG 20141227_132943 Medium IMG 20141227_135853 Medium IMG 20141227_135907 Medium 

IMG 20141227_152133 Medium IMG 20141227_152154 Medium 

Kóði var fengin frá Adafruit.com ásamt tengimynd með að nota Dióðu til að lækka spennunna á 5V til að samskipti við Led rásina gengju upp.

Eina sem þurfti að breyta í kóða var fjöldi led úr 15 í 3.

Bæta þarf við 1000µf þétti á milli +- til að vernda Neopixel fyrir straum í gegn við ræsingu.

Einnig setja 470OHM viðnám frá GPIO að inngangi á fyrsta Neopixel til að vernda hann.

teikning 

Raspberry PI serial Arduino to Graphite ds18b20

Blanda saman Arduino og Raspberry pi.

Byggt á þessari lausn

Lesa með serial frá Arduino þar sem hann er að skila upplýsingum um hitastig.

Gögnin eru lesin af serial og skilað inn í Graphite log server.

Fyrst er Graphite sett upp á Raspberry Pi, leiðbeiningar hér.

Síðan þarf að breyta aðeins stillingum í Raspberry pi svo serial portið sé laust fyrir samskipti.

Opna skránna /etc/inittab og setja # fyrir framan T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Opna skránna /boot/cmdline.txt og eyða út console=ttyAMA0,115200

Reboot og vélin er tilbúin til að hafa serial samskipti.

Næst er að setja inn sketch á Arduino sem skilar út gildum á serial, ég notaði sama sketch fyrir arduino í HC-05 verkefninu

Svo tengja þetta upp.

Best er að nota logic level converter til að tengja saman þessi tæki þar sem passa þarf að Ardunio er með 5V á serial samskiptum og Raspberry pi með 3.3V þannig það þarf að vernda GPIO á raspberry pi. 

 

En ákveðið var að notast við voltage Divider og þá þarf að passa að setja ekki sketch inn á arduino með hana tengda við raspberry pi.

Uploda sketch fyrst, tengja svo. ( en þetta er samt varhugavert..)

Notast er við 2x viðnám 1.2K og 2.2K til að framkvæma þann hluta, sést á mynd.

arduino-raspberrypi

Koma gildum inn í graphite.

Notast var við python kóða héðan með smá breytingum.

Breyta þarf carbon server í ip addressu á raspberry pi.

Setja # fyrir framan msg.append("%s.humidity %s %d" % (prefix, cols[1], now))

Þar sem ds18b20 er notaður.

Breyta msg.append("%s.temp %s %d" % (prefix, cols[4], now)) í msg.append("%s.temp %s %d" % (prefix, cols[8], now))

Svo réttur dálkur sé lesinn sem inni heldur hitastigið.

Keyra skránna með python kóðanum og gildin eru farin að safnast saman í graphite.

gildi

 

Ef engin gögn skila sér er gott að testa serial samskiptin með þessum python kóða.

Þegar hann er keyrður eiga gildin frá arduino að sjást.

import serial
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
ser.open()

ser.write("testing")
try:
        while 1:
                response = ser.readline()
                print response
except KeyboardInterrupt:
        ser.close()

 

 

Dallas Temperature library fyrir Arduino er fengið héðan

Arduino kóðinn.

 

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

void setup(void)
{
  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
}

void loop(void)
{ 
  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
  
  Serial.print("Temperature for the device 1 (index 0) is: ");
  Serial.println(sensors.getTempCByIndex(0));  
}

 

 

Python Kóðinn breyttur

 

import argparse
import serial
import string
import time
import os, sys
from socket import socket

CARBON_SERVER = '192.168.1.183'
CARBON_PORT = 2003

DEFAULT_SERIAL="/dev/ttyAMA0"
DEFAULT_PREFIX="garage.1"


parser = argparse.ArgumentParser()
parser.add_argument('--serial', help='Serial device to read data')
parser.add_argument('--prefix', help='String prefix used for metric key')

args = parser.parse_args()
if args.serial is None:
  serial_port = DEFAULT_SERIAL
else:
  serial_port = args.serial

if args.prefix is None:
  prefix = DEFAULT_PREFIX
else:
  prefix = args.prefix


print serial_port
print prefix

ser = serial.Serial(serial_port, 9600)

sock = socket()
try:
    sock.connect( (CARBON_SERVER,CARBON_PORT) )
except:
    print "Couldn't connect to carbon server %(server)s :: %(port)d." % { 'server':CARBON_SERVER, 'port':CARBON_PORT }
    sys.exit(1)

while 1:
    msg = []
    line = ser.readline()
    now = int (time.time() )
    print line
    if len(line.split()) >= 3:
      cols = line.split()
      print cols
#      msg.append("%s.humidity %s %d" % (prefix, cols[1], now))
      msg.append("%s.temp %s %d" % (prefix, cols[8], now))
      message = '\n'.join(msg) + '\n'
      print '-' * 80
      print message
      print
      sock.sendall(message)