tag:blogger.com,1999:blog-11714002173371597102024-03-14T02:28:09.202-04:00Jrow's Venture into ArduinoJrowhttp://www.blogger.com/profile/07377175511769180438noreply@blogger.comBlogger8125tag:blogger.com,1999:blog-1171400217337159710.post-45298486040256274112010-06-08T22:17:00.005-04:002010-06-08T22:28:02.856-04:00Motor Driver Activate!<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7sjBPy2yEUnvFLrIMzyEsdZWvLZ7-3IphXPu-t0XFhiPFA4IDo2iu31uiFXmYCiWfshB1I1whinWzi25c70FiNwctcOX0bhUZUBMRooLy_NWeJ1LKsANONDfWlIlZql-cO4e4qhyphenhyphen7_nkm/s1600/2010-06-08+22.16.35.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 299px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7sjBPy2yEUnvFLrIMzyEsdZWvLZ7-3IphXPu-t0XFhiPFA4IDo2iu31uiFXmYCiWfshB1I1whinWzi25c70FiNwctcOX0bhUZUBMRooLy_NWeJ1LKsANONDfWlIlZql-cO4e4qhyphenhyphen7_nkm/s400/2010-06-08+22.16.35.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5480594527412227730" /></a><br /><br /><br /><br />Here's a link to the motor driver I got:<br /><a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9670">http://www.sparkfun.com/commerce/product_info.php?products_id=9670</a><br /><br />It supports 2 motors, backwards and forwards. Now you might ask, why did I need a motor driver? 2 reasons.<br /><br />1.) The Arduino doesn't have enough current output to handle a motor without it wearing down the Arduino.<br />2.) I need to fire the motor forwards to unlock the door and then backwards to lock it again. You do this by changing the polarity on the motor, which is done using an H-Bridge.<br /><br />I originally wanted to build my own H-Bridge, but after researching it I realized it was over my head, so I bought a nice, already put together motor driver. This thing is so easy to use.<br /><br />I supply it power. Set pin ENA to high to enable motor 1. Then you set IN1 to high to turn the motor one way and IN2 to high to turn it another way. That's it!<br /><br />I edited the code, only the following section changed:<br /><br /><pre class="brush: html"><br />// Opens door and turns on the green LED for setDelay seconds<br />void openDoor( int setDelay )<br />{<br /> setDelay *= 200; // Sets delay in seconds<br /> digitalWrite(powerPin, LOW); // Turn off blue LED<br /> digitalWrite(failPin, LOW); // Turn off red LED<br /> digitalWrite(passPin, HIGH); // Turn on green LED<br /> <br /> digitalWrite(ENA, HIGH);<br /> digitalWrite(IN2, LOW);<br /> digitalWrite(IN1, HIGH); // Unlock door!<br /> <br /> delay(1000); // Hold door lock open for 5 seconds<br /> digitalWrite(ENA, LOW);<br /> <br /> delay(10000);<br /> digitalWrite(ENA, HIGH);<br /> digitalWrite(IN1, LOW); // Relock door<br /> digitalWrite(IN2, HIGH);<br /> <br /> delay(1000);<br /> digitalWrite(passPin, LOW);<br /> digitalWrite(ENA, LOW);<br />}<br /></pre><br /><br />EDIT: Ok that was a lie, this was added to the beginning also to define the pins.<br /><br /><pre class="brush: html"><br />#define ENA 2<br />#define IN1 3<br />#define IN2 4<br /></pre>Jrowhttp://www.blogger.com/profile/07377175511769180438noreply@blogger.com1tag:blogger.com,1999:blog-1171400217337159710.post-7983131770282111432010-06-08T20:48:00.002-04:002010-06-14T11:14:21.491-04:00Prototype done!Here's a youtube video of it working.<br /><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/M9Y55jBQ0fo&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/M9Y55jBQ0fo&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br /><br />I'll post photos and diagrams later. I also have updated code to post and a few things to ask.Jrowhttp://www.blogger.com/profile/07377175511769180438noreply@blogger.com0tag:blogger.com,1999:blog-1171400217337159710.post-81389314274185226912010-06-08T09:25:00.002-04:002010-06-08T09:29:10.537-04:00Motor DriverSo my motor driver should come in today. I got this one:<br /><br /><a href="http://www.sparkfun.com/commerce/product_info.php?products_id=9670">http://www.sparkfun.com/commerce/product_info.php?products_id=9670</a><br /><br />CAN'T WAIT! It's the last piece I need before I can prototype it all together. Then i'll put it all on a PCB as close as I can and solder it all together. Then i'll need to measure it and find some project boxes. More on the motor driver later!!Jrowhttp://www.blogger.com/profile/07377175511769180438noreply@blogger.com0tag:blogger.com,1999:blog-1171400217337159710.post-61321365734816542102010-06-04T11:43:00.000-04:002010-06-04T11:45:53.555-04:00BoarduinoI got my Boarduino and put it together. It was really fun and it actually works! I also got the deadbolt in but haven't had time to take it apart and see if I can get to the motor. Also i've been looking at motor drivers, as i'm going to need one since the Boarduino can't output enough to use a motor itself.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sphotos.ak.fbcdn.net/hphotos-ak-snc3/hs295.snc3/28421_399798740684_634620684_4690478_8129729_n.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 648px; height: 484px;" src="http://sphotos.ak.fbcdn.net/hphotos-ak-snc3/hs295.snc3/28421_399798740684_634620684_4690478_8129729_n.jpg" border="0" alt="" /></a>Jrowhttp://www.blogger.com/profile/07377175511769180438noreply@blogger.com1tag:blogger.com,1999:blog-1171400217337159710.post-61587778908177198682010-05-29T17:37:00.000-04:002010-05-29T17:40:45.376-04:00Deadbolt setbackSo I bought a schlage deadbolt. The one where you type in a number and it unlocks. It doesn't work like you think it does. The handle on the outside free spins until you put in the correct code ( or power it from an Arduino) and then you can turn the handle and unlock it. If I had used that one I would have had to scan, turn the knob then open the door. For that much work I might as well just use a key. <br /><br />I found another one that I have ordered. I think the motor on this one actually locks/unlocks the door. More updates after that!<br /><br />Also, I ordered a Boarduino. I think on the finished product i'm going to use that.Jrowhttp://www.blogger.com/profile/07377175511769180438noreply@blogger.com0tag:blogger.com,1999:blog-1171400217337159710.post-67682911206130961742010-05-12T10:05:00.000-04:002010-06-07T07:52:07.507-04:00RFID Project (The Code)I found some already written code doing exactly what I wanted it to. It did have a bug in it that I had to get some help figuring out. ( If your RFID started with a 00 it had some issues ) Here is the code.<br /><br /><br /><pre class="brush: html"><br /><br /><br />#include <eeprom.h> // Needed to write to EEPROM storage</eeprom.h><br /><br />#define powerPin 10<br />#define failPin 11<br />#define passPin 12<br />#define doorPin 13<br /><br /><br />boolean programMode = false;<br />boolean match = false;<br /><br />byte storedCard[6]; // Stores an ID read from EEPROM<br />byte readCard[6]; // Sotres an ID read from the RFID reader<br />byte checksum = 0; // Stores the checksum to verify the ID<br /><br />void setup()<br />{<br /> // for (int i = 0; i < 512; i++) // Uncoment to wipe the EEPROM<br /> // EEPROM.write(i, 0);<br /> pinMode(powerPin, OUTPUT); // Connected to Blue on tri-color LED to indicate reader is ready<br /> pinMode(passPin, OUTPUT); // Connected to Green on tri-color LED to indicate user is valid<br /> pinMode(failPin, OUTPUT); // Connected to Green on tri-color LED to indicate user is NOT valid or read failed<br /> pinMode(doorPin, OUTPUT); // Connected to relay to activate the door lock<br /> Serial.begin(9600); // Connect to the serial port<br /> }<br /><br />void loop ()<br />{<br /> <br /> <br /> byte val = 0; // Temp variable to hold the current byte<br /><br /> normalModeOn(); // Normal mode, blue Power LED is on, all others are off<br /> <br /> if ( programMode) // Program mode to add a new ID card<br /> {<br /> programModeOn(); // Program Mode cycles through RGB waiting to read a new card<br /> <br /> if(Serial.available() > 0) // Waits for something to come on the serial line<br /> {<br /> if((val = Serial.read()) == 2) // First Byte should be 2, STX byte<br /> { <br /> getID(); // Get the ID, sets readCard = to the read ID<br /> if ( !isMaster(readCard) ) // Check to see if it is the master programing card<br /> {<br /> writeID(readCard); // If not, write the card to the EEPROM sotrage<br /> programMode = false; // Turn off programing mode<br /> checksum = 0; // Make sure the checksum is empty<br /> }<br /> }<br /> }<br /> }<br /> // Normal Operation...<br /> else<br /> {<br /> if(Serial.available() > 0) // If the serial port is available and sending data...<br /> {<br /> if((val = Serial.read()) == 2) // First Byte should be 2, STX byte<br /> { <br /> getID(); // Get the ID, sets readCard = to the read ID<br /> byte bytesread = 0;<br /> <br /> for ( int i = 0; i < 5; i++ ) // Loop 5 times<br /> {<br /> if ( readCard[i] < 16 ) // Print out 0 if < 16 to prepend output<br /> Serial.print("0");<br /> <br /> Serial.print(readCard[i], HEX); // Print out the hex value read in<br /> Serial.print(" ");<br /> }<br /> Serial.println();<br /> Serial.print("Checksum: ");<br /> Serial.print(readCard[5], HEX); // Checksum read from the card<br /> <br /> if ( readCard[5] == checksum ) // See if the 5th BYTE (the checksum) read in from the reader<br /> { // matches the checksum caculated<br /> checksum = 0; // If so, we can empty the variable storing the calculated checksum<br /> Serial.println();<br /> Serial.println("Checksum correct"); <br /> Serial.println();<br /> if ( isMaster( readCard ) ) // Check to see if the card is the master programing card<br /> {<br /> programMode = true; // If so, enable programing mode<br /> }<br /> else<br /> {<br /> if ( findID(readCard) ) // If not, see if the card is in the EEPROM<br /> {<br /> openDoor(5); // If it is, open the door lock<br /> Serial.println();<br /> Serial.print("It's stored");<br /> Serial.println();<br /> }<br /> else<br /> {<br /> failed(); // If not, show that the ID was not valid<br /> Serial.println();<br /> Serial.print("It's NOT stored");<br /> Serial.println();<br /> }<br /> }<br /> }<br /> else // If the checksum failed<br /> { // Print out the checksum<br /> <br /> Serial.println("Checksum error");<br /> Serial.println();<br /> Serial.print("[");<br /> Serial.print(readCard[5], HEX);<br /> Serial.print("] != [");<br /> Serial.print(checksum, HEX);<br /> Serial.print("] ");<br /> <br /> }<br /> }<br /> }<br /> }<br />}<br /><br />// If the serial port is ready and we received the STX BYTE (2) then this function is called<br />// to get the 4 BYTE ID + 1 BYTE checksum. The ID+checksum is stored in readCard[6]<br />// Bytes 0-4 are the 5 ID bytes, byte 5 is the checksum<br />void getID()<br />{<br /> byte bytesread = 0;<br /> byte i = 0;<br /> byte val = 0;<br /> byte tempbyte = 0;<br /> <br /> // 5 HEX Byte code is actually 10 ASCII Bytes.<br /> while ( bytesread < 12 ) // Read 10 digit code + 2 digit checksum<br /> { <br /> if( Serial.available() > 0) // Check to make sure data is coming on the serial line<br /> {<br /> val = Serial.read(); // Store the current ASCII byte in val<br /> <br /> if((val == 0x0D)||(val == 0x0A)||(val == 0x03)||(val == 0x02))<br /> { // If header or stop bytes before the 10 digit reading<br /> break; // Stop reading <br /> }<br /> <br /> if ( (val >= '0' ) && ( val <= '9' ) ) // Do Ascii/Hex conversion<br /> {<br /> val = val - '0';<br /> }<br /> else if ( ( val >= 'A' ) && ( val <= 'F' ) )<br /> {<br /> val = 10 + val - 'A';<br /> }<br /><br /> if ( bytesread & 1 == 1 ) // Every two ASCII charactors = 1 BYTE in HEX format<br /> {<br /> // Make some space for this hex-digit by<br /> // shifting the previous hex-digit with 4 bits to the left:<br /> readCard[bytesread >> 1] = (val | (tempbyte << 4));<br /> <br /> if ( bytesread >> 1 != 5 ) // If we're at the checksum byte,<br /> {<br /> checksum ^= readCard[bytesread >> 1]; // Calculate the checksum using XOR<br /> };<br /> }<br /> else // If it is the first HEX charactor<br /> {<br /> tempbyte = val; // Store the HEX in a temp variable<br /> };<br /> bytesread++; // Increment the counter to keep track<br /> }<br /> }<br /> bytesread = 0;<br />}<br /><br /><br />// Read an ID from EEPROM and save it to the storedCard[6] array<br />void readID( int number ) // Number = position in EEPROM to get the 5 Bytes from<br />{<br /> int start = (number * 5 ) - 4; // Figure out starting position<br /> //Serial.print("Start: ");<br /> //Serial.print(start);<br /> //Serial.print("\n\n");<br /> <br /> for ( int i = 0; i < 5; i++ ) // Loop 5 times to get the 5 Bytes<br /> {<br /> storedCard[i] = EEPROM.read(start+i); // Assign values read from EEPROM to array<br /> /*<br /> Serial.print("Read [");<br /> Serial.print(start+i);<br /> Serial.print("] [");<br /> Serial.print(storedCard[i], HEX);<br /> Serial.print("] \n");<br /> */<br /> }<br />}<br /><br />// Write an array to the EEPROM in the next available slot<br />void writeID( byte a[] )<br />{<br /> if ( !findID( a ) ) // Before we write to the EEPROM, check to see if we have seen this card before!<br /> {<br /> int num = EEPROM.read(0); // Get the numer of used spaces, position 0 stores the number of ID cards<br /> /*<br /> Serial.print("Num: ");<br /> Serial.print(num);<br /> Serial.print(" \n");<br /> */<br /> int start = ( num * 5 ) + 1; // Figure out where the next slot starts<br /> <br /> num++; // Increment the counter by one<br /> EEPROM.write( 0, num ); // Write the new count to the counter<br /> <br /> for ( int j = 0; j < 5; j++ ) // Loop 5 times<br /> {<br /> EEPROM.write( start+j, a[j] ); // Write the array values to EEPROM in the right position<br /> /*<br /> Serial.print("W[");<br /> Serial.print(start+j);<br /> Serial.print("] Value [");<br /> Serial.print(a[j], HEX);<br /> Serial.print("] \n");<br /> */<br /> }<br /> successWrite();<br /> }<br /> else<br /> {<br /> failedWrite();<br /> }<br />}<br /><br />// Check two arrays of bytes to see if they are exact matches<br />boolean checkTwo ( byte a[], byte b[] )<br />{<br /> //if ( a[0] != NULL ) // Make sure there is something in the array first<br /> match = true; // Assume they match at first<br /> <br /> for ( int k = 0; k < 5; k++ ) // Loop 5 times<br /> {<br /> <br /> Serial.print("[");<br /> Serial.print(k);<br /> Serial.print("] ReadCard [");<br /> Serial.print(a[k], HEX);<br /> Serial.print("] StoredCard [");<br /> Serial.print(b[k], HEX);<br /> Serial.print("] \n");<br /> <br /> if ( a[k] != b[k] ) // IF a != b then set match = false, one fails, all fail<br /> {<br /> Serial.print("[");<br /> Serial.print("Does not match");<br /> Serial.print("] ReadCard [");<br /> Serial.print(a[k], HEX);<br /> Serial.print("] StoredCard [");<br /> Serial.print(b[k], HEX);<br /> Serial.print("] \n");<br /> match = false;<br /> }<br /> }<br /> if ( match ) // Check to see if if match is still true<br /> {<br /> Serial.print("Strings Match! \n"); <br /> return true; // Return true<br /> }<br /> else {<br /> Serial.print("Strings do not match \n");<br /> return false; // Return false<br /> }<br />}<br /><br />// Looks in the EEPROM to try to match any of the EEPROM ID's with the passed ID<br />boolean findID( byte find[] )<br />{<br /> int count = EEPROM.read(0); // Read the first Byte of EEPROM that<br /> Serial.print("Count: "); // stores the number of ID's in EEPROM<br /> Serial.print(count);<br /> Serial.print("\n");<br /> for ( int i = 1; i <= count; i++ ) // Loop once for each EEPROM entry<br /> {<br /> readID(i); // Read an ID from EEPROM, it is stored in storedCard[6]<br /> if( checkTwo( find, storedCard ) ) // Check to see if the storedCard read from EEPROM<br /> { // is the same as the find[] ID card passed<br /> Serial.print("We have a matched card!!! \n");<br /> return true;<br /> break; // Stop looking we found it<br /> }<br /> else // If not, return false<br /> {<br /> Serial.print("No Match here.... \n");<br /> }<br /> <br /> }<br /> return false;<br />}<br /><br />// Opens door and turns on the green LED for setDelay seconds<br />void openDoor( int setDelay )<br />{<br /> setDelay *= 1000; // Sets delay in seconds<br /> <br /> digitalWrite(powerPin, LOW); // Turn off blue LED<br /> digitalWrite(failPin, LOW); // Turn off red LED<br /> digitalWrite(passPin, HIGH); // Turn on green LED<br /> digitalWrite(doorPin, HIGH); // Unlock door!<br /> <br /> delay(setDelay); // Hold door lock open for 5 seconds<br /> <br /> digitalWrite(doorPin, LOW); // Relock door<br /> digitalWrite(passPin, LOW); // Turn off green LED<br />}<br /><br />// Flashes Red LED if failed login<br />void failed()<br />{<br /> digitalWrite(passPin, LOW); // Make sure green LED is off<br /> digitalWrite(powerPin, LOW); // Make sure blue LED is off<br /> <br /> // Blink red fail LED 3 times to indicate failed key<br /> digitalWrite(failPin, HIGH); // Turn on red LED<br /> delay(500);<br /> digitalWrite(failPin, LOW); // Turn off red LED<br /> <br /> digitalWrite(failPin, HIGH); // Turn on red LED<br /> delay(500);<br /> digitalWrite(failPin, LOW); // Turn off red LED<br /> <br /> digitalWrite(failPin, HIGH); // Turn on red LED<br /> delay(500);<br /> digitalWrite(failPin, LOW); // Turn off red LED<br />}<br /><br />// Check to see if the ID passed is the master programing card<br />boolean isMaster( byte test[] )<br />{<br /> byte bytesread = 0;<br /> byte i = 0; // Example card, replace with one of yours you want to be the master<br /> byte val[10] = {'2','6','0','3','A','V','D','3','6','9' }; <br /> byte master[6];<br /> byte checksum = 0;<br /> byte tempbyte = 0;<br /> bytesread = 0;<br /> <br /> for ( i = 0; i < 10; i++ ) // First we need to convert the array above into a 5 HEX BYTE array<br /> {<br /> if ( (val[i] >= '0' ) && ( val[i] <= '9' ) ) // Convert one char to HEX<br /> {<br /> val[i] = val[i] - '0';<br /> }<br /> else if ( (val[i] >= 'A' ) && ( val[i] <= 'F' ) )<br /> {<br /> val[i] = 10 + val[i] - 'A';<br /> }<br /> <br /> if (bytesread & 1 == 1) // Every two hex-digits, add byte to code:<br /> {<br /> // make some space for this hex-digit by<br /> // shifting the previous hex-digit with 4 bits to the left:<br /> master[bytesread >> 1] = (val[i] | (tempbyte << 4));<br /> <br /> if (bytesread >> 1 != 5) // If we're at the checksum byte,<br /> {<br /> checksum ^= master[bytesread >> 1]; // Calculate the checksum... (XOR)<br /> };<br /> }<br /> else<br /> {<br /> tempbyte = val[i]; // Store the first hex digit first...<br /> };<br /> bytesread++; <br /> }<br /><br /> if ( checkTwo( test, master ) ) // Check to see if the master = the test ID<br /> return true;<br /> else<br /> return false;<br />}<br /><br />// Controls LED's for Normal mode, Blue on, all others off<br />void normalModeOn()<br />{<br /> digitalWrite(powerPin, HIGH); // Power pin ON and ready to read card<br /> digitalWrite(passPin, LOW); // Make sure Green LED is off<br /> digitalWrite(failPin, LOW); // Make sure Red LED is off<br /> digitalWrite(doorPin, LOW); // Make sure Door is Locked<br />}<br /> <br />// Controls LED's for program mode, cycles through RGB<br />void programModeOn()<br />{<br /> digitalWrite(powerPin, LOW); // Make sure blue LED is off<br /> digitalWrite(failPin, LOW); // Make sure blue LED is off<br /> digitalWrite(passPin, HIGH); // Make sure green LED is on<br /> delay(200);<br /> digitalWrite(powerPin, LOW); // Make sure blue LED is off<br /> digitalWrite(failPin, HIGH); // Make sure blue LED is on<br /> digitalWrite(passPin, LOW); // Make sure green LED is off<br /> delay(200);<br /> digitalWrite(powerPin, HIGH); // Make sure blue LED is on<br /> digitalWrite(failPin, LOW); // Make sure blue LED is off<br /> digitalWrite(passPin, LOW); // Make sure green LED is off<br /> delay(200);<br />}<br /><br />// Flashes the green LED 3 times to indicate a successful write to EEPROM<br />void successWrite()<br />{<br /> digitalWrite(powerPin, LOW); // Make sure blue LED is off<br /> digitalWrite(failPin, LOW); // Make sure blue LED is off<br /> digitalWrite(passPin, HIGH); // Make sure green LED is on<br /> delay(200);<br /> digitalWrite(passPin, LOW); // Make sure green LED is off<br /> delay(200);<br /> digitalWrite(passPin, HIGH); // Make sure green LED is on<br /> delay(200);<br /> digitalWrite(passPin, LOW); // Make sure green LED is off<br /> delay(200);<br /> digitalWrite(passPin, HIGH); // Make sure green LED is on<br /> delay(200);<br />}<br /><br />// Flashes the red LED 3 times to indicate a failed write to EEPROM<br />void failedWrite()<br />{<br /> digitalWrite(powerPin, LOW); // Make sure blue LED is off<br /> digitalWrite(failPin, HIGH); // Make sure red LED is on<br /> digitalWrite(passPin, LOW); // Make sure green LED is off<br /> delay(200);<br /> digitalWrite(failPin, LOW); // Make sure red LED is off<br /> delay(200);<br /> digitalWrite(failPin, HIGH); // Make sure red LED is on<br /> delay(200);<br /> digitalWrite(failPin, LOW); // Make sure red LED is off<br /> delay(200);<br /> digitalWrite(failPin, HIGH); // Make sure red LED is on<br /> delay(200);<br />}<br /></pre>Jrowhttp://www.blogger.com/profile/07377175511769180438noreply@blogger.com0tag:blogger.com,1999:blog-1171400217337159710.post-4862419689874101862010-05-12T10:01:00.001-04:002010-06-09T07:52:18.405-04:00RFID ProjectMy first Arduino project is an RFID door unlocker for my home. Below are the obstacles I have to overcome:<br /><br />1.) <span class="Apple-style-span" style="color: lime;">DONE </span>Get the Arduino to read a tag (with an ID-20 reader) and compare it to stored tags in its EEPROM<br />2.) <span class="Apple-style-span" style="color: lime;">DONE (bought one) </span>Figure out how to build an H-BRIDGE<br />3.) <span class="Apple-style-span" style="color: lime;">DONE </span>Buy, take apart and run wires to the motor powered deadbolt<br />4.) Solder the finished circuits to some boards<br />5.) InstallJrowhttp://www.blogger.com/profile/07377175511769180438noreply@blogger.com0tag:blogger.com,1999:blog-1171400217337159710.post-25273581082578503512010-05-11T16:37:00.001-04:002010-05-11T16:38:07.865-04:00Welcome!This is where i'll be posting all my Arduino projects that I get into. I'm about 1/4 the way through my RFID door unlock project, i'll post some of it up soon.Jrowhttp://www.blogger.com/profile/07377175511769180438noreply@blogger.com0