fault-tolerant sensor nodes with erlang/ otp and arduino · fault-tolerant sensor nodes with...

36
Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1

Upload: others

Post on 06-Jun-2020

18 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Fault-tolerant Sensor Nodes with Erlang/

OTP and Arduino

Kenji Rikitake / Erlang Factory SF Bay 2016 1

Page 2: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Kenji Rikitake

10-MAR-2016Erlang Factory SF Bay 2016San Francisco, CA, USA@jj1bdx

Erlang Factory SF Bay 2010-2016 speaker (7th year!)

Program Committee Member of ACM Erlang Workshop (2011, 2013, 2016) and CUFP 2016

Kenji Rikitake / Erlang Factory SF Bay 2016 2

Page 3: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Basic principlesStabilizeSimplify

"Let It Crash"Update dynamically

Kenji Rikitake / Erlang Factory SF Bay 2016 3

Page 4: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

In this talkBearfort sensor shield

8-bit Arduino basicsWire protocols

How Erlang talks with Arduino

Kenji Rikitake / Erlang Factory SF Bay 2016 4

Page 5: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Bearfort1 system diagram

1 Bearfort = {BEam, ARduino, FORTified} / Bearfort ridge, NJ, USA / Background photo: By Zeete - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=38798143

Kenji Rikitake / Erlang Factory SF Bay 2016 5

Page 6: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Bearfort sensor shieldTemperature sensors

Analog Devices ADT7410 on TWI/I2C

4 x Texas Instruments LM60s on ADC0-3

All sensors are powered by +5VAll sensors are replaceable

Kenji Rikitake / Erlang Factory SF Bay 2016 6

Page 7: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

What Bearfort shield can do?

Fault tolerant temperature

sensing5 sensors

Robust against sensor failures

Kenji Rikitake / Erlang Factory SF Bay 2016 7

Page 8: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Arduino Uno R3Atmel AVR ATmega328P

Powered by USB (5V) or external power supply (7~12V)

4 Analog Input + I2C + SPI

Price: USD24.952 as of March 2016 at SparkFun Electronics

2 Photo: Wikimedia Commons, By oomlout - ARDU-UNO-03-Front, CC BY-SA 2.0, https://commons.wikimedia.org/w/index.php?curid=40551883

Kenji Rikitake / Erlang Factory SF Bay 2016 8

Page 9: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

AVR developmentWrite C event loop

Try and errorInterrupts are for timer only

Kenji Rikitake / Erlang Factory SF Bay 2016 9

Page 10: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Chip programmerEssential for writing boot loader firmware

Hardware diagnostics

Hardware protection bit configuration

Replicating chips

Photo: AVR Dragon, circa 2008

Kenji Rikitake / Erlang Factory SF Bay 2016 10

Page 11: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Hardware principlesStabilizeSimplify

"Let It Crash"

Kenji Rikitake / Erlang Factory SF Bay 2016 11

Page 12: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Stabilize hardwareSolder (no breadboard)

Less contact pointsPrepare for contact failures

Kenji Rikitake / Erlang Factory SF Bay 2016 12

Page 13: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Contact failuresOpen circuitShort circuit

Kenji Rikitake / Erlang Factory SF Bay 2016 13

Page 14: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Open circuit

Kenji Rikitake / Erlang Factory SF Bay 2016 14

Page 15: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

LM60 open circuit failure

Kenji Rikitake / Erlang Factory SF Bay 2016 15

Page 16: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Short circuit

Kenji Rikitake / Erlang Factory SF Bay 2016 16

Page 17: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Simplify hardwareKeep firmware small

Return raw sensor valuesLeave no tunable parts

Kenji Rikitake / Erlang Factory SF Bay 2016 17

Page 18: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

"Let It Crash"Reset when hardware fails

Allow external resetUse watchdog timer if needed

Kenji Rikitake / Erlang Factory SF Bay 2016 18

Page 19: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Resetting Arduino from USBTurn off DTR/RTS for 50msec and turn back on

%%% Using Michael Santos'%%% stk500 and srly repository code{ok,FD} = serctl:open("/dev/cu.usbmodem1D11311"),[begin dtrrts(FD, Status), timer:sleep(50) end || Status <- [off, on] ].

Yes, that's it!Kenji Rikitake / Erlang Factory SF Bay 2016 19

Page 20: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Software principlesSimplify

"Let It Crash"Dynamic update

Kenji Rikitake / Erlang Factory SF Bay 2016 20

Page 21: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Simplify wire protocolPolling from host

Fixed-length outputNo tunable parts

Kenji Rikitake / Erlang Factory SF Bay 2016 21

Page 22: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Serial line protocolNo frame: synchronization needed

Fixed length = pattern matchingNo tuning = idempotent

Kenji Rikitake / Erlang Factory SF Bay 2016 22

Page 23: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Serial line control from Erlang/OTP

Michael Santos' srly packageTTY control (ioctl())

Fixed-length reading function is extremely useful

Kenji Rikitake / Erlang Factory SF Bay 2016 23

Page 24: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Wire protocol message format16-byte fixed length

Kenji Rikitake / Erlang Factory SF Bay 2016 24

Page 25: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Wire protocol in Erlang{ok, <<2, 16#51, 16#82, % 2 == STX DevId:2/little-unsigned-integer-unit:8, ADT0:2/little-signed-integer-unit:8, A0:2/little-unsigned-integer-unit:8, A1:2/little-unsigned-integer-unit:8, A2:2/little-unsigned-integer-unit:8, A3:2/little-unsigned-integer-unit:8, 3>>} = read_serial(FD). % 3 == ETX

Kenji Rikitake / Erlang Factory SF Bay 2016 25

Page 26: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

"Let It Crash"Erlang does it very wellHardware reset controlSerial ioctl-capable API

Kenji Rikitake / Erlang Factory SF Bay 2016 26

Page 27: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Update dynamicallyUpdating Arduino from Erlang

Use boot loader for code loadingSlow (5~10 seconds) but feasible

Kenji Rikitake / Erlang Factory SF Bay 2016 27

Page 28: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

ATmega328p memory model

Kenji Rikitake / Erlang Factory SF Bay 2016 28

Page 29: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Update exampleupdate() -> Hex = stk500:hex_file( "./arduino-uno/bearfort-arduino.hex"), Bytes = stk500:chunk(Hex, 128), {ok,FD} = stk500:open( "/dev/cu.usbmodem1D11311", [{speed, b115200}]), ok = stk500:load(FD, Bytes).

Kenji Rikitake / Erlang Factory SF Bay 2016 29

Page 30: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

IssuesSlow USB connection transitionAutomated sensor calibration

Modeling fault tolerant operation

Kenji Rikitake / Erlang Factory SF Bay 2016 30

Page 31: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Future directionsIndoor/outdoor field testing

Embedded Erlang nodeMultiple sensors/nodes

Kenji Rikitake / Erlang Factory SF Bay 2016 31

Page 32: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Excluded from this talk• TCP/IP: MQTT, CoAP, etc.

• Cryptographic security

• Host OS device drivers

• non-8bit Arduino boards

• Erlang/ALE = for Raspeberry Pi

Kenji Rikitake / Erlang Factory SF Bay 2016 32

Page 33: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Related work (1/2)• Code and slides of this presentation

• srly: Erlang NIF serial API

• stk500: Erlang AVR boot loader API

• avr-libc, avr-binutils, avr-gcc

• avrdude: AVR program loader

• optiboot: AVR boot loader firmware

Kenji Rikitake / Erlang Factory SF Bay 2016 33

Page 34: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Related work (2/2)• Omer Kiric's talk on EF SF Bay 2013

• Erlang/ALE on GitHub

• Frank Hunleth's talk on EF SF Bay 2015

• Robot running in Elixir

• elixirbot on GitHub

Kenji Rikitake / Erlang Factory SF Bay 2016 34

Page 35: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Thanks to:Michael Santos

Erlang Solutions...and you all!

Kenji Rikitake / Erlang Factory SF Bay 2016 35

Page 36: Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino · Fault-tolerant Sensor Nodes with Erlang/ OTP and Arduino Kenji Rikitake / Erlang Factory SF Bay 2016 1 ... San Francisco,

Thank youQuestions?

Kenji Rikitake / Erlang Factory SF Bay 2016 36