main index This page lists my experiments and projects, both with Arduino and compatible boards, and with other different boards.


My ongoing projects:

  1. Waylogger: inertial-based path logger (Arduino)
  2. Ironman: wearable light effects, accelerometer-controlled (Lilypad)
  3. Catvisor: GPS and image logging (mbed)
  4. Incheption: LED force game (Arduino? maybe)
  5. Interleckchul: 40×5 LED display (Arduino? maybe)
  6. Goldfinger: hand wave interface (mbed? maybe)
  7. MIDI data sniffer (Arduino? maybe)
  8. Missioncleared: LED blinker (msp430)

My completed projects:

My Arduino experiments:

Boards summary:


Arduino specifications


My Arduino hardware:

My extra boards:

Quick notes

TWI (2-wire interface) only requires two bidirectional data pins (plus a GND pin and a VCC pin, but these are not "data" pins); as of Atmel ATmega168 datasheet (page 82):

Note: Arduino's "analog" pins are actually multipurpose pins (i.e., if you don't need neither analog nor TWI, they can work as common digital GPIO pins).

SPI (serial port interface) uses 3 output data pins and 1 input data pin when in "master" mode (or 3 input and 1 output when in "slave" mode):

Sad note: on pin "13" on the Arduino Diecimila there is the SMD LED which we used for software debugging. When using SPI, that LED blinks on SPI clock.

Internal peripherals (thanks to "")

long read_internal_voltmeter() { // only Arduino based on '168 and '328
  long result; // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = 1126400L / result; // Back-calculate AVcc in mV
  return result;

// ADMUX = _BV(MUX3) | _BV(MUX2) | _BV(MUX1); // this MUX reads internal AREF

long read_internal_temperature() { // only Arduino based on '328
  long result; // Read temperature sensor against 1.1V reference
  ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX3);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = (result - 125) * 1075;
  return result;