Arduino

From YobiWiki
Revision as of 16:02, 2 March 2016 by <bdi>PhilippeTeuwen</bdi> (talk | contribs) (Reverted edits by JasonAnderson (talk) to last revision by PhilippeTeuwen)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

So after the Arduino workshop at BruCON 2009 (pics here), I was seduced by this little development board.

Links

Arduino on Wikipedia

boards & clones

Duemilanove (SmartProjects)

The Duemilanove automatically selects the appropriate power supply (USB or external power), eliminating the need for the power selection jumper found on previous boards. It also adds an easiest to cut trace for disabling the auto-reset, along with a solder jumper for re-enabling it.

based on the ATmega168, latest versions are based on ATmega328p

Clones:

"Make it better" clones:

  • TwentyTen by Freetronics. Nice small enhancements, but more expensive than the other clones...

Decimilia (SmartProjects)

Version before Duemilanove, with a jumper to select the power supply (USB or external power)

based on the Atmega168, can be upgraded with a ATmega328

Clones:

  • Freeduino V1.16 Board
  • Freeduino MaxSerial
  • HACEduino "2009"
  • Fino168 USB Board
    • with a DIP switch to disable auto-reset and D13 LED
  • Duino168 Serial Board
    • with a DIP switch to disable auto-reset and D13 LED
  • Duino328 Serial Board
    • with a DIP switch to disable auto-reset and D13 LED
  • Seeeduino

Lilypad (SparkFun)

based on the ATmega168V on v03 (the low-power version of the ATmega168) or the ATmega328V on v04

Pro (SparkFun)

based on the ATmega168 or ATmega328. The Pro comes in both 3.3V / 8 MHz and 5V / 16 MHz versions. It has 14 digital input/output pins (of which 6 can be used as PWM outputs), 6 analog inputs, a battery power jack, a power switch, a reset button, and holes for mounting a power jack, an ICSP header, and pin headers. A six pin header can be connected to an FTDI cable or Sparkfun breakout board to provide USB power and communication to the board.

The Arduino Pro is intended for semi-permanent installation in objects or exhibitions. The board comes without pre-mounted headers, allowing the use of various types of connectors or direct soldering of wires. The pin layout is compatible with Arduino shields. The 3.3V versions of the Pro can be powered with a battery.

Take care that the embedded power regulator is smaller and outputs max 150mA

Pro Mini (SparkFun)

based on the ATmega168. It has 14 digital input/output pins (of which 6 can be used as PWM outputs), 6 analog inputs, an on-board resonator, a reset button, and holes for mounting pin headers. A six pin header can be connected to an FTDI cable or Sparkfun breakout board to provide USB power and communication to the board.

The Arduino Pro Mini is intended for semi-permanent installation in objects or exhibitions. The board comes without pre-mounted headers, allowing the use of various types of connectors or direct soldering of wires. The pin layout is compatible with the Arduino Mini.

There are two version of the Pro Mini. One runs at 3.3V and 8 MHz, the other at 5V and 16 MHz.

Nano (Gravitech)

small, complete, and breadboard-friendly board based on the ATmega328 (Arduino Nano 3.0) or ATmega168 (Arduino Nano 2.x). It has more or less the same functionality of the Arduino Duemilanove, but in a different package. It lacks only a DC power jack, and works with a Mini-B USB cable instead of a standard one

Clones:

Mini (SmartProjects)

based on the ATmega168

the smallest of the serie. It has 14 digital input/output pins (of which 6 can be used as PWM outputs), 8 analog inputs, and a 16 MHz crystal oscillator. It can be programmed with the Mini USB adapter or other USB or RS232 to TTL serial adapter.

Mega (SmartProjects)

based on the ATmega1280

54 Digital I/O Pins (of which 14 provide PWM) / 16 Analog Input Pins

Other clones or derivatives

  • iDuino, a breadboardable version
  • Boarduino, another breadboardable version, see also here
  • Stickduino, USB Stick Sized Arduino Clone
  • DuinoStamp
  • Really Bare Bones Board, minimalist, smallest one?
  • [1], compatible with Arduino but powered by a 72MHz ARM core!
  • Wiseduino, an Arduino-compatible microcontroller board, which includes a DS1307 real time clock (RTC) with backup battery, a 24LC256 EEPROM chip and a connector for XBee adapter for wireless communication.
  • Paperduino
  • Illuminato, 42 I/O pins and 64K code space, powered with a ATmega645, see also here
  • Teensy, based on ATMEGA32U4 or AT90USB646 for Teensy++, small & cheap
  • Pinguino, similar concept, based on a PIC
  • Amicus18 uses a Microchip PIC® micro microcontroller instead of an Atmel AVR type
  • Femtoduino, the smallest one, for sure!

Officials

Documentation

Programmers

Hardware

Shopping

Ethernet

Ethernet shield

LCD

  • Tutorial with LiquidCrystal library, for Hitachi HD44780 compatible LCDs

Misc links to explore

Software

  • Fritzing is an open-source initiative to support designers, artists, researchers and hobbyists to work creatively with interactive electronics.
  • Toolduino lets you easily interact with your Arduino hardware so you can test the circuits you create. Toolduino is written in the Processing languange and is available for Windows, Mac OS X, and Linux.
    • The Arduino must be running the Firmata firmware that comes with the Arduino IDE
  • ModKit is a HTML5 visual programming environment for Arduino
  • Scratch for Arduino. Scratch is a learning environment developed by the Lifelong Kindergarten Group at MIT Media Lab

Arduino and Linux

Installation

Main instructions are here

As I'm using a Debian AMD 64bit, here is what I did:

Installing java from Sun and making sure it will be called by the tools. It might be that other java suites are working but at least java-gcj is missing a GtkLookAndFeel component that Arduino GUI is using
So if you don't have it yet:

aptitude install sun-java6-jre


Then if it's not the one by default, change it: (maybe "java" is enough but let's be consistent)

update-alternatives --config java
update-alternatives --config jar
update-alternatives --config keytool
update-alternatives --config orbd
update-alternatives --config rmid
update-alternatives --config rmiregistry
update-alternatives --config serialver

Other dependencies:

aptitude install avr-libc gcc-avr

Arduino tools, here v0017:

wget http://arduino.googlecode.com/files/arduino-0017.tgz
tar xzf arduino-0017.tgz

Arduino tools are coming only for 32bit but it contains only a few executables so let's install the 64bit version of those executables
Initially I did the following:

aptitude install librxtx-java
rm arduino-0017/lib/librxtxSerial.so

But at time of writing, Debian was only proposing v2.1.7 and if uploading sketches to the Arduino worked, launching the serial monitor provoked a big crash of Java. So better to follow this post:
Download rxtx-2.2pre2-bins from the RXTX folks. Extract the files, and copy RXTXcomm.jar and x86_64-unknown-linux-gnu/librxtxSerial.so to the Arduino lib/ directory, basically replacing the two files that came shipped with Arduino 0017.


There is also the avrdude binary in arduino-0017 which is compiled as 32bit executable.
You can recompile it from the source or if you have the ia32-libs package, the 32bit binary provided will work out-of-the-box.
But in any ways, DON'T USE AVRDUDE FROM YOUR DISTRO! because the one provided with the Arduino tools is a patched version.

Now let's try to launch the script arduino-0017/arduino

Tools/SerialPort/"/dev/ttyUSB0"
Tools/Board/"Arduino Diecimila, Duemilanove or Nanoe, w/ Atmega168"

Now trying the very first code:
See this tuto

Problem with the original avrdude

As I told in the previous section, don't use the avrdude coming with your distro. Initially this is what I did and here are the problems I faced:

aptitude install avrdude avrdude-doc
cd arduino-0017/hardware/tools
mv avrdude avrdude.disabled
mv avrdude.conf avrdude.conf.disabled
ln -s /usr/bin/avrdude
ln -s /etc/avrdude.conf

DON'T USE AVRDUDE FROM YOUR DISTRO! Then when trying to upload the bin to the board (menu -> Upload to I/O board), I got the following message:

Binary sketch size: 896 bytes (of a 14336 byte maximum)
avrdude: Yikes!  Invalid device signature.
       Double check connections and try again, or use -F to override this check.

Then I tried to inject the -F option to avrdude, it flashed the chip, gave me still errors:

Wrong microcontroller found. Did you select the right board in the Tools > Board menu?
avrdude: Yikes!  Invalid device signature.
avrdude: Expected signature for ATMEGA168 is 1E 94 06

But the code was apparently correctly uploaded to the board as I got my blinking LED...

Avrdude which is part of the arduino-0017 release is a patched version as it says:

Version 5.4-arduino

While the version in Debian Squeeze is:

Version 5.8

So apparently we need absolutely to use the special arduino version.

Using USBtinyISP

USBtinyISP is not driven by a USB-to-serial converter or a driver but by libusb.
Therefore you must have the right to use libusb.
As running the IDE as root is not a very wise solution, here is another one using udev:

  • Create /etc/udev/rules.d/usbtiny.rules
# udev rules file for USBtinyISP (for udev 0.98 version)

SUBSYSTEM!="usb|usb_device", GOTO="usbtiny_rules_end"
ACTION!="add", GOTO="usbtiny_rules_end"
ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c9f", ATTRS{product}=="USBtiny", MODE="0664", GROUP="plugdev"
LABEL="usbtiny_rules_end"
  • Restart udev
/etc/init.d/udev restart
  • Add yourself to the plugdev group if not yet done
adduser toto plugdev
  • Unplug and plug back your USBtiny board

Monitoring avrdude calls

One annoyance of the GUI is that I don't know what the GUI is doing with avrdude so I wanted to intercept & log the calls to avrdude:
In arduino-0017/hardware/tools move avrdude to avrdude.orig
Then create a script called avrdude (make it executable!) with:

script -q -a $(dirname $0)/avrdude.log -c "echo \"$0 $*\" && $0.orig $*"

It will creates a logfile called avrdude.log in the same directory and as bonus you'll see also directly the calls to avrdude with all the arguments in the GUI console.

Projects

Brucon Blink blink

VFD brightness control

Yet another EMF detector

Photoduino

Personal notes about a wonderful spanish project

Arduino PDU

TODO & ideas

  • Temperature alarm for tea preparation
  • LED cube?
  • POV sth? sphere?

My stuff

TV-B-Gone