arduino_daq package from arduino_daq repo

arduino_daq

Package Summary

Tags No category tags.
Version 1.0.1
License GPLv3
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/ual-arm-ros-pkg/arduino_daq.git
VCS Type git
VCS Version master
Last Updated 2018-07-16
Dev Status MAINTAINED
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

AVR8 firmware, a host standalone C++ library, and a ROS node for UAL eCAR's Arduino-based DAQ system, but it is generic enough for use in many other applications

Additional Links

No additional links.

Maintainers

  • Jose Luis Blanco Claraco

Authors

No additional authors.

arduino_daq

This package contains an AVR8 firmware, a host standalone C++ library, and a ROS node for UAL eCAR's Arduino-based DAQ system, but it is generic enough for use in many other applications.

The DAQ features: 4 analog outputs (via an optional MAX5500 chip), ADC inputs, GPIO and PWM outputs, 2 channels quadrature encoder decoding support, and one absolute encoder (EMS22A) input. Outputs feature an optional watchdog timer that resets the output if not updated periodically (default period is 1 second).

The precompiled firmware is for atmega328P, but it could be recompiled for other larger versions with more I/O pins.

Valid pin numbers

The function of each pin can be configured on the fly from the host (PC) software. Naturally, each microcontroller hardware limits some special functions:

  • atmega328P
    • GPIO inputs/outputs: 2-13
    • ADC inputs: 0-8
    • PWM outputs: pins 3, 5, 6, 9, 10, and 11.
    • Quadrature encoders:
    • Encoder #0:
      • Channel A must be pin 2.
      • Channels B & Z can be any free GPIO pin.
    • Encoder #1:
      • Channel A must be pin 3.
      • Channels B & Z can be any free GPIO pin.

Compiling

In GNU/Linux or Windows, use CMake to generate the Makefiles or project files as usual. Set CMake variables BUILD_ROS and BUILD_STANDALONE_LIB to ON/OFF depending on whether you want to compile a ROS node or a standalone C++ library.

For compilation within a ROS catkin environment, simple clone this repository inside your ~/catkin_ws/src/ and run catkin_make.

Prerequisites:

    sudo apt install libmrpt-dev

ROS examples of use

Note: Numering of pins follows the Arduino pin number convention (for example: Arduino ProMini,ATmega328, pin: PB1 <=> chip pin number: 13 <=> Arduino pin number: 9 ).

  • First: Launch the node with

    roscore # In one terminal rosrun arduino_daq arduino_daq_node _SERIAL_PORT:=/dev/ttyUSB0 # In another terminal

Next, in another terminal try any of the following:

  • Setting a DAC analog value (volts):

    rostopic pub /arduino_daq_dac0 std_msgs/Float64 1.5
    
  • Setting a GPIO digital output pin:

    rostopic pub /arduino_daq_GPIO_output7 std_msgs/Bool 1
    
  • Setting a PWM output (0...255 maps to 0%...100% duty cycle):

    rostopic pub /arduino_daq_pwm3 std_msgs/UInt8 220
    
  • Automatically starting ADC sampling at 10 Hz, with 5V reference voltage, on two channels in pins ADC0 and ADC1 (Requires killing arduino_daq to launch it again with these parameters).

    rosrun arduino_daq arduino_daq_node _SERIAL_PORT:=/dev/ttyUSB0 _ADC_INTERNAL_REFVOLT:=0 _ADC_MEASURE_PERIOD_MS:=100 _ADC_CHANNEL0:=0 _ADC_CHANNEL1:=1
    
  • Automatically starting reading an ENCODER sampling at 10 Hz, on one channel with Channel A=pin 2, Channel B=pin 8, and Channel Z=pin 9 (set channel Z to "0" if not wired). (Requires killing arduino_daq to launch it again with these parameters).

    rosrun arduino_daq arduino_daq_node _SERIAL_PORT:=/dev/ttyUSB0 _ENC0_PIN_A:=2 _ENC0_PIN_B:=8 _ENC0_PIN_Z:=9
    
  • Example use of a EMS22A absolute encoder: ", pin_cs);

    rosrun arduino_daq arduino_daq_node _SERIAL_PORT:=/dev/ttyUSB0 _ENCABS0_PIN_CS:=1  _ENCABS0_PIN_CLK:=2  _ENCABS0_PIN_DO:=2 _ENCABS_MEASURE_PERIOD_MS:=100
    

ROS graph

Source code directories

  • arduino_firmware: Contains an AtmelStudio project for the firmware. Written in C++ using the Arduino library.
  • include and libarduinodaq: Standalone C++ library.
  • src: ROS node

Frame format

Communication PC <-> arduino happens based on data frames as follow:

     START_FLAG   |  OPCODE  |  DATA_LEN   |   DATA      |    CHECKSUM    | END_FLAG |
       0x69          1 byte      1 byte       N bytes       =sum(data)       0x96

The complete list of OPCODES and associated payload DATA fields are defined in the C++ header file arduinodaq2pc-structs.h, which is #included in both, host C++ libraries and the embedded firmware.

Programming the microcontroller

For an Atmega328p ("Arduino Mini Pro"), use this command line from the root directory of this repository:

    avrdude -p atmega328p -c arduino -P /dev/ttyUSB0 -b 57600 -U flash:w:"arduino_firmware/arduino_daq/arduino_daq/Release/arduino_daq.hex":i
CHANGELOG

Changelog for package arduino_daq

1.0.1 (2018-07-16)

  • Initial public release
  • Contributors: Francisco Jos

Wiki Tutorials

See ROS Wiki Tutorials for more details.

Source Tutorials

Not currently indexed.

Package Dependencies

System Dependencies

No direct system dependencies.

Dependant Packages

No known dependants.

Launch files

No launch files found

Services

No service files found

Plugins

No plugins found.

Recent questions tagged arduino_daq at Robotics Stack Exchange