Monday, March 19, 2018

Spreadsheet Tasker Plugin

I collect various types of data on my phone such as sleep data using Tasker. Traditionally, I've saved the data to a local file on my phone (typically a csv) and then used an app to transfer that data file to Google Drive.

I recently found a Tasker plugin app called Spreadsheet Tasker Plugin that will communicate directly with a Google spreadsheet. This approach is much easier.

In the case of my sleep data, each time I complete a sleep instance, it adds a row to a Google sheet with the data.

I have my phone set up via Tasker to start a sleep instance when the phone is oriented face-down and end the sleep instance when it no longer orients face down. I have a timer built in so that it only records the data after 30 minutes to avoid accidental downward orientations or instances where I haven't fallen asleep yet.

The paid version offers off-line buffering which stores the data if you aren't connected until a connection is made.

Google Play Store: Spreadsheet Tasker Plugin

Friday, December 25, 2015

Fitbit Data to Google Spreadsheet Via IFTTT

In a previous post, I described a method I've been using to collect Fitbit data into a Google spreadsheet for use in things like R.

Since then, I've found two things that make that process even easier.

One is an R package, googlesheets, that easily loads data from a Google spreadsheet into an R dataframe. More on that in another post.

The other is the use of IFTTT to load connect to my Fitbit account and send the data to a Google spreadsheet. IFTTT has connections to both Fitbit and Google Drive. It makes it easy to set up a connection for both activity data and sleep data. I currently have two IFTTT recipes, one for activity data and one for sleep data.



Thursday, January 16, 2014

Raspberry Pi and a PIR Sensor

Today, I successfully used the Human Sensor PIR module with the RPi. I ordered this: http://www.amazon.com/gp/product/B007XQRKD4/

I followed this blog post. The only change was different GPIO port numbers:
http://www.millamilla.com/?p=18

When moving in front of the sensor, the LED turns on.

Worked great!

There are two manual adjustments on the module:
  • Sensitive Setting: turn to right, distance increases (about 7m); turn to left, distance reduces (about 3m)
  • Time Setting: turn to right, time increases (about 300 seconds); turn to left, time reduces (about 5 seconds).

Monday, January 13, 2014

Raspberry Pi and WiFi

I purchased a Edimax EW-7811Un wireless USB adapter (http://www.amazon.com/Edimax-EW-7811Un-Wireless-Adapter-Wizard/dp/B003MTTJOY) for my raspberry pi,

Setup:

With the ethernet still plugged in, I remoted in and used the WPA_GUI tool (shortcut already on the desktop). I was able to connect but when I tried it with the ethernet disconnected, it didn't work.

Long story short (after lots of troubleshooting), I needed to save the configuration in the WPA_GUI tool. It's been working since.

Another possible cause of the intermittent problem is with the usb hub (d-link dub-h7). When plugged into the pi, the pi would not start and when restarting right away without the usb hub, the wifi adapter (usb) wouldn't work. I suspect that power from the usb hub was causing the fuse to open for a short period of time, rendering the usb port inoperable until it closes again.

Wednesday, January 8, 2014

Raspberry Pi and Temperature Sensor

Today I successfully connected the DS18B20 temperature sensor to the RPi. I ordered the waterproof version that comes with ~ 2 ft leads.

I used the following Adafruit lesson to the letter and it worked great:
http://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing/overview

Monday, December 30, 2013

RPi - Controlling a Servo Motor

Today I set up the Raspberry Pi to control a servo motor.

For the hardware setup, I referred to chapter 10 from the Raspberry Pi Cookbook. Aside from the Pi, I only used the Pi Cobbler, a 1k resistor, and a 4AA battery pack. I didn't use any other special components. In the future, I'll consider getting a specialized breakout board for controlling servos.

For the software, I started with the code from this blog post:  http://www.doctormonk.com/2012/07/raspberry-pi-gpio-driving-servo.html
Note that in Simon Monk's post, he uses a transistor in his circuit that I didn't use based on the circuit in the book.

My first attempt didn't work well. The servo would turn very slowly, arriving at the 180 degree position, and stay there. I could feel the motor working but there was little to no movement.

After further research, I made some modifications to the starting code including changing the order of the True and False statements and playing with the timing. Things started to work. I was reading that servos needed between a .001 and .002 second pulse to move between 0 and 180 degrees respectively. I was finding those to be too long. For my servo, the range was between .00055 and .002. I don't know if that is a servo thing or if that helps to compensate for a delay from the RPi itself.

Finally, I added some code to accept an angle 0-180 as input and convert that angle into the appropriate timing of the pulses. I also had that input affect the number of loops because for shorter angle changes, a greater number of loop iterations would result in the motor jumping around slightly after reaching the desired angle. Now I can probably convert this to a function and use with other programs.

I had been reading about others experiencing a jittery movement when only using GPIO to control the servo but once I figured out the appropriate timing and loops, I found that it moved very smoothly. I don't know if there are other factors that I'm not experiencing that could affect the performance.

The Code:

import RPi.GPIO as GPIO
import time
import math

pin = 18
refresh_period = 0.02

prev_angle = 90           #initiate previous angle

GPIO.setmode(GPIO.BCM)

GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, False)

while True:
    angle = int(input('Angle: '))

    # convert degrees (0-180) to the servo pulse (.00055 to .002ms)
    pulse = (angle * .00000805555) + .00055

    # determine the number of loops based on degrees needed to travel, a shorter distance (degrees) to travel = fewer loops
    loops = math.ceil(math.fabs(prev_angle - angle) * .135) + 2
    prev_angle = angle

    # move the servo arm
    for i in range(1, loops):
        time.sleep(refresh_period)
        GPIO.output(pin, True)
        time.sleep(pulse)
        GPIO.output(pin, False)


The circuit:

The servo I used:

The servo specs:

Years ago, I created a very simple robotic arm that waves and was able to revive it once again with the RPi!





Saturday, December 28, 2013

FitBit Data to Google Spreasheet

I received a FitBit for Christmas and while the website provides access to a lot of data a graphs, I wanted a way to access the data in a format to process with R (statistics).

I found the following blog post which points to the use of a Google script that accesses the data via the developer API and populates a Google spreadsheet.

http://citizen-statistician.org/2012/09/30/getting-data-from-fitbit/

It was pretty straight forward since I've worked a bit with Google scripts before.

It provides daily summary data across a dozen or so categories. What would be nice is more granular data.