Monthly Archives: October 2013

Rubik’s cube

I remember when I was a kids playing with the Rubik’s cube. I could do one side and its crown but that was about it.

A few years ago, my company had some promotional cubes and i looked up on the internet to try and get further. i learned how to do the middle layer.  i did not do the last layer as it seemed to require memorizing some long formulas.

SAM_0105

This summer, i was in the Sequoia Forest with the kids, away from internet, so when planning the trip, i thought it would be a good idea to see whether i could do it.
I got a new competition cube and a book:

I was amazed how easy this cube turns. it can be operated with one hand!

and

I played with it a little bit every day and learned the formulas of the “easy” way.

After a couple of weeks i was down to about 2:30 minutes.

 

Recently i tried the 4x4x4 Cube and the Mirror Cube 3x3x3.
The 4x4x4 is different in that there is not once center piece but 4. One way to solve it is to place all the center pieces first, then the edges (2 pieces per edge) finally to do the corners like it was a 3x3x3. I have not done it yet; maybe next summer!

The mirror cube is interesting in that the pieces have the same color, but their size vary as the center of the cube is offset to a corner. It’s a bit disconcerting at first but one can get the hang of it fairly quickly. Some people recommend doing the side with the tallest sides first so the last layer is the flatter one.

 

Arduino based RFID mp3 player- part 2

So i started on my project of mp3 player a few weeks back.

Libraries

All the libraries i could find were designed for Arduino 1.0.1 and the current is 1.5.

I spent some time trying to make it compile and at some point i had it working, once…

As my setup was using the default settings, arduino was installed in program files, and windows was making it difficult to edit files in there.

I gave up, and went back to Arduino 1.0. I used 1.0.4 instead of 1.0.1 as it should be close enough. With Arduino 1.0, one has to install the USB driver manually as there is no installer, just a zip file.

There are basically two options as far as the library is concerned, listed at http://www.elecfreaks.com/wiki/index.php?title=Freaduino_MP3_Music_Shield.

As the shield is based around the VS1053b, there are probably other libraries that will be compatible like http://www.seeedstudio.com/wiki/Music_Shield or http://learn.adafruit.com/adafruit-vs1053-mp3-aac-ogg-midi-wav-play-and-record-codec-tutorial/simple-audio-player-wiring

One set allows to play all tracks and have control over next, previous track, the other allows to play track by name or randomly.

I tried both and with the 1.0.4 sdk it works reasonably well out of the box.

Hardware

Now i wanted to use the RFID reader at the same time. the mp3 shield is not using the pin 3 on the arduino, however there is no header left to connect to.  I ended up soldering directly on the back of the mp3 shield. I only need 3 wires: ground, +5 V and rx from the rfid reader.

Another option would be to replace the headers on the shield with male/female headers like this: http://www.adafruit.com/products/706 or to use a stackable protoshield like this: http://www.adafruit.com/products/51

 

DSC_4940

Software

For the software side, it’s not yet clear to me how i will handle folders.
For now , i just won’t. the card is formatted in FAT16 format, so i can have 512 entries in the root (using 8.3 format)

I will encode each audio file with nnnnxmm.mp3 with nnnn being the album number and mm the track number, for example 0001×01.mp3
For now i will hard code everything, but the plan is to have a table of content toc.txt which will match the cards id with the album number; for example

2B00B53A0FAB 0001 12 (there are twelve tracks on album 0001 whose id is 2B00B53A0FAB.

first script

//  File MusicPlayWithName.ino
//  Demo code for playing any existing music file on Micro SD card by file name
//  For more details about the product please check http://www.seeedstudio.com/depot/

//  Copyright (c) 2010 seeed technology inc.
//  Author: Icing Chang
//  Version: 1.0
//  Time: Oct 21, 2010
//  Changing records:
//    
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Lesser General Public
//  License as published by the Free Software Foundation; either
//  version 2.1 of the License, or (at your option) any later version.
//
//  This library is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public
//  License along with this library; if not, write to the Free Software
//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

/**************************Note*******************************************
 To make this demo code run sucessfully, you need to download the fat16lib 
 into your Arduino library at the following address:
http://code.google.com/p/fat16lib/downloads/detail?name=fat16lib20101009.zip&can=2&q=
**************************************************************************/

#include <Arduino.h>
#include <avr/io.h>
#include "config.h"
#include "player.h"
#include "vs10xx.h"

#include <Fat16.h>
#include <Fat16Util.h>
#include "newSDLib.h"

#include <SoftwareSerial.h>

SoftwareSerial RFID = SoftwareSerial(2,3);
char character;
String Card_id;

void setup()
{
  Serial.begin(9600);
  RFID.begin(9600);

  InitSPI();

  InitIOForVs10xx();

  InitIOForKeys();

  InitIOForLEDs();

  Mp3Reset();
  if (!initialSDCard())
    return;

  RED_LED_ON();//light red LED

//  Serial.println("opening toc.txt");

//  if (file.open("toc.txt", O_READ)) {
//  Serial.println("toc opened");

//   int16_t c;
//   String id="";
//   while ((c = file.read()) != ' '){
//    id+=(char)c;
//   }
//   String foldername="";
//   while ((c = file.read()) != '\n'){
//    foldername+=(char)c;
//  }

//  Serial.println(foldername);
//  file.close();
  }

}

void loop()
{ 
  Serial.println("loop!");

  Serial.println("begin play!");
  while(RFID.available() >0){
        character = RFID.read();
        Card_id+=character;
  }
  if (Card_id.length()>10){
    Card_id = Card_id.substring(1,13);
  }
  Serial.println(Card_id);
  if (Card_id.length()>0){
    if (Card_id.equals("2B00B53A0FAB")){
       playFile("0001x01.mp3");
    }else{
       playFile("0002x01.mp3");
    }
    Card_id= "";
  }
 delay(200);
}

It works!

 

Left to do:

-1- figure out how to get it to run outside of usb with serial monitor with a 9 V power supply.
-2-buttons for control volume up and down work, but next/previous track do not when playing by name. however this works when using play all example. i need to see how it’s done so i allow navigation inside an album.
-3- case. i think i will use a 50 blank CD spool case. buttons for volume up/down, track next/previous play/pause and reset will be moved outside the box as well as popwer connector and audio jack.
-4-using folders to store files.

 

Baker Geek

I love to bake and I am a geek. Welcome to Baker Geek

This site is about sharing my passion of baking and includes recipes with step by step description. You will find for example recipes for madeleines, financiers palmiers or croquembouche; sometimes, the recipes will be broken down in large chunks, for example to make palmiers you need puff pastry, so a post will be dedicated to making puff pastry.

It also features non baking related articles, which i will list in the “geeking” category.

Enjoy.

-Francois