Friday, February 3, 2012

Battery in Salt Solution

For some reason or another, I got this silly idea of dropping a battery in a water saturated with salt :)

I thought, the salt will act as a conductor with resistance ~ 0 and Imagined all the sparking (really?! spark inside water! just imagine! :P)

I started with the Test Aperture :D

1- Resistance test leads



I cute two ~ 3 inch of steel wire and stripped out 5mm of insulation from both ends and soldered one end to binding post



which I fixed to a glass bottle's cover









And here I got some interesting results

the probes were about 7cm apart from each other (the bottle diameter is about 9cm)


resistance with tap water ~ 70K ohm
resistance with salt water ~ 14K ohm

what a finding!!!!!

This means with the battery inside the water, it won't effectively be a short-circuit, no sparking!!!!


it was kinda depressing, but I continued, I added temperature sensor (LM335) to MCU (ATmega168) to serial port on PC and then I logged the data


Once in water, I saw small bubbles forming on the negative pin and then going out, this continued and continued and continued without spark!!!, after sometime I got bored and stopped the data recording.


you can find the recorded raw data here : Temperature Readings

I graphed it on excel and I found this:



the x-axis numbers are just the index numbers, they dont mean anything, but it is actually for about 16 mins of continues data recording, I assume the ADC clock is maximum which is half the MCU clock which was 16MHz so the ADC is 8MHz

the y-axis is the decimal value of the ADC, so you can go:

V = 5*(y/1023)

V is the actual voltage read by the ADC
5 is the ADC reference voltage
y is the number from the file (the decimal value)
1023 is the ADC counts, for 10-bit ADC (2^10)

then to get the actual temperature, you use the formula from the data sheet of LM335 which is

V = 10mV / K

so

T (K) = V * 0.01

and you get the temperature in Kelvin, however, you might need to do initial calibration with a know temperature and then you subtract/add the calibration value to all other measured values.

Since I don't have this equipment, I used the raw decimal value to see the trend


here, I put the bottle outside and went to sleep, the next day:




















what a mess!

of course, everything including the poor LM335 inside will all go to be disposed  off the universe!

Shall I count it as a fail?!
why the resistance was large?!!
How can I decrease it?!!






Sunday, January 1, 2012

How Fast Relays Are?

From the time I learned about relays, I wondered if they can be used to make an H-Bridge for motors, I asked my professor and he said that you can't because they are slow.

I never knew how slow, till today, so I wrote a small code on my AVR ATmega168 microcontroller

basically, the code send an ON -> delay(x) -> OFF -> delay(x)

where x is a value (in ms) changing every time a button is pressed going down from 15 ms to 1ms

1:  #include <avr/io.h>  
2:  #include <util/delay.h>  
3:  #include <USART.h>  
4:  #define SETBIT(ADDRESS,BIT) (ADDRESS |= (1<<BIT))  
5:  #define CLEARBIT(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))  
6:  int main(void)  
7:  {  
8:       init_uart();  
9:        SETBIT(DDRB,0);  //Output pin (ON/OFF)
10:       CLEARBIT(DDRB,1); //Input to change time
11:       SETBIT(PORTB,1);  //Enable Pull-Up resistor
12:       for (;;)  
13:       {  
14:            for (uint16_t i=15; i>0; i--)  //repeat 15 times going down, used as delay
15:            {  
16:                 printf("i=%d\n",i);  //just to see whats the current delay value
17:                 _delay_ms(100);  //give me time to release button
18:                 while ((PINB & 0x02)==0x02)  //loop when I don't press button
19:                 {  
20:                      SETBIT(PORTB,0);   //ON
21:                      _delay_ms(i);      //i value as delay
22:                      CLEARBIT(PORTB,0); //OFF 
23:                      _delay_ms(i);
24:                 }  
25:            }  
26:       }  
27:       return 0;  
28:  } 

And then connected the relay, driving it with a NPN



I found that min time is 2ms, at 1ms, no switching will occur ( i was getting highly rippled 5v)



and here is an awesome sound of 1~15ms switching, at 0:16 the time is 1ms



~2ms (500Hz) is the min time (max freq) u can switch a typical relay




Saturday, December 3, 2011

Masafi Water-Air C-Engine Rocket

Playing with air pressure rockets is really awesome, I used to take on of these Masafi bottles, but water hose in (tight fit), pump water -> after sometime, the air pressure inside will be high enough that you can't hold it anymore, then point up and release and BOOOOM

That what happen with one bottle, so what about a whole rocket??

so, I set to make a rocket, which currently is a big fail because I did not have a proper air sealing material,,,

concept of one bottle, first pressurize then release (click to enlarg)


When I connected two, the leak happened as shown

The concept of the Multi-Masafi Water-Air Rocket (cross section showing 2 of the six C-Engine Cylinder :P) and yea, C for Circular, and "strobe" should be "straw"


The pictures above does not show the actual bottle size, below it does (okay, to some extent, excuse my hand skills on MS Paint)

It also shows the expected aerodynamic behavior (the rocket is going up)

  

well, if it failed/drifted etc am gonna add a cone/rocket case to remove the effect of the straws / bottle shape





I collected bottles


drilled the holes



assembled with duct tape and glue gun:








The problem is that glue gun does not withstand air pressure and fails, I'll continue this when I have what I need, till that time, this rocket which looks like one of Yuri's buildings (Red Alert) will stay on the wall


Garage Door

Recently, we moved to another home, unfortunately (or fortunately) the garage door does not work, we open it manually currently, we requested the house owner to fix it but they said that they tried many times but failed, so what does this mean for an EE lover?

An awesomeness of course, a new toy to play with, a new game to reverse engineering :)

I tried the manual button, the motor does work but the door does not move, I tried assisting it by giving it a push but no hope, so apparently, the gears are broken/loose etc a mechanical problem in short.

not only that, but also, we do not have the remote controller, so apparently I'll have to hack it to put my own wireless connection, later..

now lets start playing:


The box:


Now I need to remove the bottom to reach the mechanical problem and fix it, I had to use a lot of force to open these two blots on bottom:


notice how the spanner got bended in the image below



What about this dried-sanded grease:






overview of the inside, 
top right is the motor with three wires (I don't have experience with motors, so your help is apperciated here, the motor has three wires two of them are connected the big cylinder you can see on the top left [I guess a cap??!] and there is a third wire)
What is this motor? which type? what are the three wires?
Is it a capacitor really? why it is there?

top left a capacitor (I guess)
below it is the transformer
and on bottom the PCB
Wireless chip on right side of PCB
Connection Header on top of PCB


The circuit 





started labeling some wires


I then used WD-40 and sprayed on the screws to remove the PCB (Along with the transformer which is soldered to the PCB)



Now I need to remove wires, so I took note of all connections and labeled wires



Before that, I decided to test it, found that the motor is actually rotating as well as the output shaft
so, I reconnected it up again, but again it does not work!!!

conclusion: the mechanical assembly is having a problem which I cannot fix

repairing attempt Failed!

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


.