Reading Arduino data directly into R

3 comments
I have experimented with reading an Arduino signal into R in the past, using Rserve and Processing. Actually, it is much easier. I can read the output of my Arduino directly into R with the scan function.

Here is my temperature sensor example again:


And all it needs to read the signal into the R console with my computer is:
> f <- file("/dev/cu.usbmodem3a21", open="r")
> scan(f, n=1)
Read 1 item
[1] 20.8
> close(f)
Super simple: Open the file connection. Scan n lines of data. Close the file connection. Job done.

Note: This worked for me on my Mac and I am sure it will work in a very similar way on a Linux box as well, but I am not so sure about Windows. Crucially, I had to learn the difference between the tty* and cu* devices. I found the following statement in Mike's PBX Cookbook particular insightful:
You might notice that each serial device shows up twice in /dev, once as a tty.* and once as a cu.*. So, what's the difference? Well, TTY devices are for calling into UNIX systems, whereas CU (Call-Up) devices are for calling out from them (eg, modems). We want to call-out from our Mac, so /dev/cu.* is the correct device to use.
You find the file address of your Arduino by opening the Arduino software and looking it up under the menu Tools > Port.

With a little more R code I can create a 'live' data stream plot of my Arduino.

Reload this page to see the animated Gif again.

R code

Here is the original Arduino sketch as well:

Session Info

R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats graphics grDevices utils datasets  methods  
[7] base     

loaded via a namespace (and not attached):
[1] tools_3.1.

3 comments :

  1. Couple your example with an Ethernet shield and using a server like webduino you could host that data and extract it over a network.

    webduino: https://code.google.com/p/webduino/

    ReplyDelete
  2. Or use a Raspberry Pi and WebIOPi to do something similar: http://www.magesblog.com/2014/02/control-led-with-raspberry-pi-and-via.html.
    Oh boy, the world is our oyster, we just need a little more play time ;-)

    ReplyDelete
  3. disqus_72GXGq6drQ23 February 2015 at 21:06

    The hardest thing is explaining that you cannot do simple things eg plotting UK postcodes on a map using the various tools available!

    ReplyDelete