Friday, November 11, 2011

Large Simon Collider

So, I decided that its enough for my young brother and sister wasting their money in the stupid malls games and will make my home game arena!

Luckily I had an old computer table which was about to be thrown, the 15mm wood will help a lot to make strong bases. (Kids games needs to be 10x military ratings)

Starting with a simple one, Sparkfun Simon game in a big scale, basically I'll buy their kit replacing the switches with big domes

I started today with the base, can't continue as I have only one dome push button

First, I took dimensions of available wood real-estate and choose the appropriate part, its a 30*48 cm surface with about half meter height

face is shown below, dimensions in mm


then I proceeded to cutting with jigsaw and drilling, added duct tape on the edges and the result:



To be continued ... after getting Simon kit and Dome Push buttons

Finally, got them, oh and Sparkfun did an awesome job by replacing bulb with LED so I don't need to waste time modifying it :)



Then I decided to display current level, I modified the code as following:

Added definitions:


#define ControlPort PORTC
#define RCLK_Pin PINC0
#define SRCLK_Pin PINC1
#define Data_Pin PINC2

#define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))


void ShiftData (uint8_t Data);

void DisplayDigit(uint8_t HighDigit, uint8_t LowDigit);

void DisplayNumber(uint8_t Number);



and added the function below at bottom of code (I wrote function my self, got the CLK concept from bildr)




void ShiftData (uint8_t Data)
{


//[ld,d,rd,dot,ru,u,lu,m]
uint8_t SSArray[]={
0,0,0,1,0,0,0,1, //0

1,1,0,1,0,1,1,1, //1

0,0,1,1,0,0,1,0, //2

1,0,0,1,0,0,1,0, //3

1,1,0,1,0,1,0,0, //4

1,0,0,1,1,0,0,0, //5

0,0,0,1,1,0,0,0, //6

1,1,0,1,0,0,1,1, //7

0,0,0,1,0,0,0,0, //8

1,0,0,1,0,0,0,0 //9
};










CLEARBIT(ControlPort,RCLK_Pin);

for (uint8_t i=0; i<8; i++)
{
if (SSArray[8*Data+i]==0) CLEARBIT(ControlPort,Data_Pin);
else SETBIT(ControlPort,Data_Pin);

SETBIT(ControlPort,SRCLK_Pin);
CLEARBIT(ControlPort,SRCLK_Pin);
}

SETBIT(ControlPort,RCLK_Pin);
}






void DisplayDigit(uint8_t HighDigit, uint8_t LowDigit)
{



// Send data starting with HIGH Digit
ShiftData(HighDigit);
ShiftData(LowDigit);



}






void DisplayNumber(uint8_t Number)
{


if ((Number>=0) && (Number<10))
{
DisplayDigit(0,Number);

}
else if ((Number>9) && (Number<100))
{

DisplayDigit(Number/10,Number%10);

}

else
DisplayNumber(0);




}





Then modified the "game_mode()" function as below


static int game_mode(void)
{
nmoves = 0;
while (nmoves < MOVES_TO_WIN) {
DisplayNumber(nmoves+1);
uint8_t move;

/* Add a button to the current moves, then play them back */
add_to_moves(); 
play_moves(); 

/* Then require the player to repeat the sequence. */
for (move = 0; move < nmoves; move++) {
uint8_t choice = wait_for_button();

/* If wait timed out, player loses. */
if (choice == 0)
return 0;

toner(choice, 150); 

/* If the choice is incorect, player loses. */
if (choice != moves[move]) {
return 0;
}
}

/* Player was correct, delay before playing moves */
delay_ms(1000);
}

/* player wins */
return 1;
}




On the hardware side, I've connected the two seven segment displays with two 8Bit Shift Registers as on the bildr example, pinout from arduino tutorial 


result:




and after fixing the segment on place:


and turning power ON


Done! :D

RoboBlind - a smart guide for blind people


Originally, our entry to IEEE UAE Student Day 2011 Common Design Project, now we are up to GIST Initiative 

The winner will be decided on the number of likes on the video, so please like and share :)

NetHome

I am extremely happy today, I am almost done with Light Control through Ethernet. I can't believe it was soooo easy!

I started this project about a week ago, not a new idea or any thing, it is for my own educational purpose

NetHome

I started with a rough sketch of the idea (pictures are hi res so it will take time to load)


After getting the required components I started implementing directly



5v power is supplied from USB, 3.3v regulator is used for the webserver WIZ200Web from Sparkfun

Relay PCB, to control the 220 VAC


Powering up!


Yay its working, now feedback sensor, Miniature Solar Cell



WIZ200Web - web server (from sparkfun)

Using this guy was awesome, only need to connect two 3.3v pins, four GND pins, Rx0, Tx0. Then from PC use configuration tool to connect/configure and download firmare/webpages.



Below, I was testing in external ATmega168 before using the server (which has ATmega128 with pins you can use for I/O ADC etc)




Ethernet link - blinking!



webpage:




I've connected my relay driver to PB4 pin (on J2) which is LED0 on the WIZ200web development board, so I was able to control the light.


After that I decided to make two interfaces, one from PC "PC Station" and an "Android Station" and maybe also "iPhone Station"

I started with the simplest, "PC Station" for which I used Visual Basic:






The PC Station is working fine, however, there is small problems with changing the IP Address, if the connection is successful and I tried to change the ip address, it would still say "connected"
Also, I've not implemented Syncing data yet

Since It is working, I thought I'd move to the next step, Android!

The UI on Virtual Manager





I am able so far to toggle the picture ON/OFF, however, I am still looking for how to control the light :D


.