Brewing ALE with Pi
-
Upload
kristian-kristensen -
Category
Technology
-
view
407 -
download
1
description
Transcript of Brewing ALE with Pi
Brewing ALE with PiKristian Kristensen
@kkristensen
Agenda
• Beer Brewing
• Raspberry Pi
• Erlang/ALE
• Monitoring temperatures
Raspberry Pi
• ARM 700 MHz CPU
• 512 MB RAM
• 10/100 Ethernet
• HDMI, Comp. Video, Audio.
• $40!
Interface Real World (I)
• GPIO
• I2C
• SPI
• <Others>
Interface Real World (II)• Memory Mapped
• /dev/mem
• Fast, needs root, dangerous!
• Kernel modules
• Slow, doesn’t need root, easier, safer
• Can Erlang help us?
Erlang/ALE
• Actor
• Library for
• Embedded
https://github.com/esl/erlang_ale
Erlang (hearts) Embedded
• Soft real time
• Concurrency and Parallelism
• Fault tolerant & Robust
• Hot-code loading • (http://www.erlang-embedded.com/2013/10/minimal-downtime-in-flight-drone-firmware-upgrade-in-erlang/)
Architecture
• Fix the mess we saw earlier
• Familiar abstractions
• Clean model
What works
• GPIO and GPIO interrupts
• Basic I2C and SPI
• Erlang Solutions actively working on it
GPIO
A
GPIO
pin 17
{init, 17, output}
GPIO
A
GPIO
pin 17
{state, 17, high} B
C{state, 17, high}
{state, 17, low}
GPIO Supervisor
• Replaces locks
• Access Control, Mutual Exclusion
• Safety constraints
• Toggling, sequence detection, direction control, etc.
Blink some LEDs
{ok, _} = gpio:start_link(?LED_PIN, output), !blink() -> gpio:write(?LED_PIN, 1), ! timer:sleep(1000), ! gpio:write(?LED_PIN, 0), ! timer:sleep(1000).
Interrupts{ok, _} = gpio:start_link(?IN_PIN, input), !ok = gpio:set_int(?IN_PIN, rising), !handle_info({gpio_interrupt, _Pin, _Condition}, State) -> blink().
1-wire
• Creates a network of sensors all communicating using 1 single wire
• Great digital thermometer sensor available
• DS18B20
Raspberry Pi & 1-wire• Kernel module
• /sys/bus/w1/devices/28-0000044719d7/w1-slave
• =>
• 4b 01 4b 46 7f ff 0e 10 d8 : crc=d8 YES4b 01 4b 46 7f ff 0e 10 d8 t=26125
Read temperature• read(<<A1:16,_,A2:16,_,A3:16,_,A4:16,_,A5:16,_,A6:16,_,A7:16,_,A8:16,_,CRC:16,_,$:,_,”crc=",CRC:16,_,"YES",Rest0/binary>>
• read(<<A1:16,_,A2:16,_,A3:16,_,A4:16,_,A5:16,_,A6:16,_,A7:16,_,A8:16,_,CRC:16," t=",Rest/binary>>
• http://bit.ly/1cst0ah
Projects
• Kegerator control
• Boil Wort
• Strike water, Hot Liquor Tank
• Mash temperature
• Fermentation Chamber Control
Thank you
Links
• https://github.com/esl/erlang_ale
• http://www.erlang-embedded.com/
• Blink LEDs: http://bit.ly/18KP8xF
• Read Temperature: http://bit.ly/1cst0ah