Arduino Support for Automate

Introduction

This extension provides interface to Arduino devices via pyFirmata library.

Installation

Install extras:

pip install automate[arduino]

Example application

This example application sets up couple of analog and digital Arduino Sensors and Actuators. It also introduces Servo actuator with ConstantTimeActuator, which functions such a way that if value of a1 changes, the value of servo will change smoothly within given time interval.

from automate import *


class MySystem(System):
    a1 = ArduinoAnalogSensor(dev=0, pin=0)
    d12 = ArduinoDigitalSensor(dev=0, pin=12)

    d13 = ArduinoDigitalActuator(dev=0, pin=13)  # LED on Arduino board
    servo = ArduinoServoActuator(min_pulse=200,
                                 max_pulse=8000,
                                 dev=0,
                                 pin=3,
                                 default=50,
                                 slave=True)

    interp = ConstantTimeActuator(change_time=2.,
                                  change_frequency=20.,
                                  slave_actuator=servo)

    prog = Program(
        on_update=Run(Log("Value: %s", Value(a1)),
                      SetStatus(d13, d12),
                      SetStatus(interp, Value(180) * Value(a1)))
    )

my_arduino = ArduinoService(
    arduino_devs=["/dev/ttyUSB0"],
    arduino_dev_types=["Arduino"],
    arduino_dev_sampling=[500])

s = MySystem(services=[my_arduino, WebService()])

Class definitions

Service

class automate.extensions.arduino.ArduinoService[source]

Service that provides interface to Arduino devices via pyFirmata library.

arduino_devs = None

Arduino devices to use, as a list

arduino_dev_types = None

Arduino device board types, as a list of strings. Choices are defined by pyFirmata board class names, i.e. allowed values are “Arduino”, “ArduinoMega”, “ArduinoDue”.

arduino_dev_sampling = None

Arduino device sampling rates, as a list (in milliseconds).

change_digital(dev, pin_nr, value)[source]

Change digital Pin value (boolean). Also PWM supported(float)

Sensors

class automate.extensions.arduino.AbstractArduinoSensor(*args, **kwargs)[source]

Abstract base class for Arduino sensors

dev = None

Arduino device number (specify, if more than 1 devices configured in ArduinoService)

pin = None

Arduino pin number

class automate.extensions.arduino.ArduinoDigitalSensor(*args, **kwargs)[source]

Boolean-valued sensor object for digital Arduino input pins

class automate.extensions.arduino.ArduinoAnalogSensor(*args, **kwargs)[source]

Float-valued sensor object for analog Arduino input pins

Actuators

class automate.extensions.arduino.AbstractArduinoActuator(*args, **kwargs)[source]

Abstract base class for Arduino actuators

dev = None

Arduino device number (specify, if more than 1 devices configured in ArduinoService)

pin = None

Arduino pin number

class automate.extensions.arduino.ArduinoDigitalActuator(*args, **kwargs)[source]

Boolean-valued actuator object for digital Arduino output pins

class automate.extensions.arduino.ArduinoPWMActuator(*args, **kwargs)[source]

Float-valued actuator object for Arduino output pins that can be configured in PWM mode Status is float between 0.0 and 1.0.

class automate.extensions.arduino.ArduinoServoActuator(*args, **kwargs)[source]

Float-valued actuator object for Arduino output pins that can be configured in Servo mode Status is servo angle (0-360).

min_pulse = None

Minimum pulse time (in microseconds)

max_pulse = None

Maximum pulse time (in microseconds)