All posts by Francois Nguyen

Gingerbread house

DSC_6423_resize
The kids were eyeing the gingerbread house at costco.

Instead, i got some gingerbread house silicone mold at amazon and we made our first house this weekend.

 

Ingredients

  • 3 cups flour
  • 1/2 tsp baking soda
  • 1/4 tsp baking powder
  • 1/2 cup softened butter
  • 1/2 cup brown sugar
  • spices
  • 1/2 tsp salt
  • 1 egg
  • 3/4 cup molasses

For the spices, the recipe called for 2 tsp ground ginger, 2 tsp ground cinnamon, 3/4 tsp ground cloves, 1/2 tsp black pepper. I had a spice mix with anise seed, cinnamon, ginger, fennel and clove and used 3 or 4 tsp. it worked out well.

Directions

Preheat over to 375F

Measure flour, baking soda and powder, sift together and put aside.

With a hand held or stand mixer cream the softened butter and sugar. Add the salt, spices, egg and molasses. With a spatula or wooden spoon mix in the dry ingredients.

Roll it on  floured surface then fit it in the molds. It does not need to be pretty while you do it, just fill the mold. It will raise a little so do not pack it too high.

Cook at 375 F about 15 minutes. It’s ready when it’s firm in the middle.  Do not let it darken too much in the edges. Take it out of the oven and let it cool down flat. Make sure it’s flat or it will warp and it will be difficult to assemble.

Assembly

Make some icing with one egg white to 1/3 pound of icing sugar. Add a dash of lemon juice so the sugar does not crystallize. Put it in a piping bag or a Ziplock bag with a cut corner. I used a disposable piping bag and a tip #4.

Prop the walls with some cups while it sets. Try not to drip too much as it dries white. You can use a brush to wipe the drips.

When it’s set, let the kids decorate. We had leftovers from a candy trip to Safeway. You can glue pretty much any candy with the icing. the marshmallows work too.

 

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.