‘Nother Entry

We recieved a few more applications for the WyoLum 2011 Innovation Grant process.  I don’t know if we will be able have a post for each one, but we will do what we can.

The paparazzi is a completely open source end-to-end solution to unmanned aerial vehicle  piloting.  Unlike other hardware projects I have come accross, this one integrates measurement, filtering, and control into single package.

http://paparazzi.enac.fr/wiki/Main_Page

From their website:

The Paparazzi Project

Paparazzi is a free and open-source hardware and software project intended to create an exceptionally powerful and versatile autopilot system for fixedwing aircrafts as well as multicopters by allowing and encouraging input from the community. The project includes not only the airborne hardware and software, from voltage regulators and GPS receivers to Kalman filtering code, but also a powerful and ever-expanding array of ground hardware and software including modems, antennas, and a highly evolved user-friendly ground control software interface.
All hardware and software is open-source and freely available to anyone under the GNU licencing agreement. Several vendors are currently producing and selling Paparazzi autopilots and popular accessories, making the system easy and affordable to all.
The key feature of the paparazzi autopilot is its unique combination of infrared thermopiles and inertial measurement for attitude sensing, providing a robust and accurate attitude estimate that requires no ground calibration and can recover from any launch attitude.

 

I2SD library

Photo by FlorinC

This library has a single class call I2SD with simple interface (see below).  A call to Wire.begin() must be made before any of these calls.  See Hello World to see a simple example of the library in use.

  /* Transmit n_byte bytes of data to I2SD card.
   * return true if identical bytes are returned from I2SD card
   */
  boolean ping(uint8_t* ping_data, uint8_t n_byte);

  /* Move file cursor to addr bytes from the beginning of the file
   */
  void seek(unsigned long addr);

  /* Open a file with the specified name and mode
   * May induce I2SD_OPEN_ERROR on I2SD card
   */
  void open(char* filename, uint8_t mode);

  /* Read n_byte bytes of the current file.
   * File must be open for reading
   */
  uint8_t read(uint8_t *data, uint8_t n_byte);

  /* Write n_byte bytes of data to current file
   * File must be open for writing
   * May induce I2SD_MODE_ERROR on I2SD card
   */
  void write(uint8_t *data, uint8_t n_byte);

  /* Clear any error on I2SD card.
   * May induce I2SD_MODE_ERROR on I2SD card
   */
  void clear_error();

**************************************************************************************************************

Oops: ATTN Vic and Florin!

While writing this I realized I left a bug in the inital version of the code.  The I2SD will show an error if the file “DEFAULT.TXT” is not present on the SD card.   So add that file to the root.  It does not have to have any bytes.  It just provides a default file pointer.  This will be taken care of in the next version, or you can delete the offending lines and re-load the script.

**************************************************************************************************************

I2SD Hello World!

Photo by FlorinC

So WyoLum is working on the I2SD. This is a SD card interface that sits on the I2C bus, also known as the Two Wire Interface or TWI.  We created the board so that we could add an SD card to ClockTHREE and ClockTHREEjr .  But while we were at it, we made this board as useful as we could so that it can be used in several applications.

Features:

  • Can be used as a stand alone data logger.
  • Arduino Shield adding real time clock and SD to any Arduino.  This saves 8KB of program memory over just using the SD library.
  • Chronodot compatible! This means you can add an SD card to any project that already has a ChronoDot slot.
  • Integrated Real time clock.
  • Two LEDs, no WyoLum project is complete without LEDs.

 

Hello World

Required Parts

  1. Arduino
  2. I2SD

Steps

  1. Write a long file to the SD card called “TEST.TXT”  For example this one.
  2. Connect I2SD to the Arduino.
  3. Upload code below to the Arduino.
  4. Monitor the serial port on the Arduino.

If everything goes right, the file on the SD card should stream through the serial port on the Arduino.  If an error occurs, an “error code” will flash on the I2SD.  This is all pretty new, so you may encounter unforeseen situations.  If so, just let me know and I will address them as soon as I can.

The Code

/*
Read and write some data to the I2SD
*/

#include "C3SB.h"
#include "I2SD.h"
#include "SD.h"
#include "Wire.h"
const boolean WRITE_TEST = true;
const int DBG = 13;

I2SD i2sd;

void setup(){
  uint8_t msg_back[100];
  unsigned long n_byte;

  Serial.begin(57600);
  Wire.begin(); // DON'T FORGET THIS!!!!

// wait for I2SD hardware to start up
  Serial.println("PING...");
  while(!i2sd.ping((uint8_t*)"PING", 4)){
    delay(100);
  }
  Serial.println("PONG received");

  i2sd.open("TEST.TXT", FILE_READ);
}

void loop(){
  const int n_byte = 32 * 7;
  char big_data[n_byte];

  i2sd.read((uint8_t*)big_data, n_byte);
  Serial.print(big_data);
}