Category Archives: Projects
DIY RV Solar Panel Installation

Adding a solar panel to a RV can provide convenient daily battery maintenance and can extend power available while camping away from civilization. Read More…

DIY Peltier Candle Powered Electric Generator

Here I show how to create some usable electricity from a candle and a peltier cooler.

image

Materials include a candle, metal plate, four nuts, four long bolts, a peltier cooler, heat sink, and thermal grease. Read More…

Repairing broken LCD screen backlight with LEDs

LCD screen backlights can often go out requiring a new inverter or CFL lamp. Replacement parts can be hard to find or costly. Here I use a six dollar LED strip to replace the CFL backlight with success! If you look hard you can see points of light where the LEDs are but all together the LCD is very usable. Read More…

DIY Function (Signal) Generator

 

Here is my homemade function generator that can produce a square, triangle, and sign wave. This is all done with a few bucks worth of parts. The heart of the function generator is a LM324N quad OpAmp. I got the schematic off of a site where they were also selling kits to build the signal generator. Read More…

DIY IO Simulator (AI, AO, DO)

I needed to create an IO simulator for testing a PLC (Programmable Logic Controller). I pieced together a useful tool to do the trick of simulating analog and digital input and output that was expected from sensors in the real world.

image Read More…

GLCD Screen Displaying Live Arduino Analogs

I used a ST7565 GLCD (Graphic Liquid Cristal Display) screen to display the live analog readings from an Arduino.

image

Here is the Arduino library: ST7565_GLCD_LIbrary

The ST 7565 I picked up on Adafruit for about 16 bucks. I couldn’t find any examples to help put the analog values on the screen, worse yet the screen can’t display real values, I had to convert them to strings.

It was something that an Arduino pro probably could have whipped out in no time but it took me many hours.

Hopefully this can help someone.

Dawn to Dusk Chicken Door Project

There are many advantages of having an automatic chicken coop door. The door will automatically close at night when the chickens are inside and open in the morning. Not only will they stay warm and cozy, critters like coons and skunks will have a much harder time getting to them. The ultimate luxury to me though is the fact that I don’t need to go out and lock them up and get up at the crack of dawn to let them out.

There is a newer version of this project and you can read about it here 

image

 

I used an Arduino clone board for the light sensing and timing, solar panel and battery for power.

This is by no means an original idea, after reading about one on Hack A Day, and realizing that an auto chicken door was the answer to my dreams, I found more links and videos on the web.

 

Here is the sketch

————————————————————————

/* LDR Chicken Door * ——————
*
* opens and closes a door depending on light conditions
*
*/

int LDR = 0;       // select the input pin for the LDR
int pot = 1;       // select the input pin for the adjustment potentiometer
int CloseOutput = 8;   // select the pin for the LED
int OpenOutput = 7;
int LDRval = 0;       // variable to store the value coming from the sensor
int POTval = 0;       // variable to store the value coming from the potentiometer
int Counter = 0;
int OpenCounter = 0;
int CloseCounter = 0;
int ManualOpenPin = 2;
int ManualClosePin = 3;
int TestEnablePin = 4;
int OpenLimitSw = 5;
int CloseLimitSw = 6;
int OpenLimitActive = 0 ;
int CloseLimitActive = 0;
int ManualOpen = 0;
int ManualClose = 0;
int TestEnable = 0;
int Delay1 = 10;
int Delay2 = 11;

void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
pinMode(LDR, INPUT);       // declare the LDR as an INPUT
pinMode(OpenOutput, OUTPUT);     // declare the ledPin as an OUTPUT
pinMode(CloseOutput, OUTPUT);     // declare the ledPin as an OUTPUT
pinMode(ManualOpenPin, INPUT);
pinMode(ManualClosePin, INPUT);
pinMode(TestEnablePin, INPUT);
pinMode(OpenLimitSw, INPUT);
pinMode(CloseLimitSw, INPUT);
}

void loop() {
ManualOpen = digitalRead(ManualOpenPin);
ManualClose = digitalRead(ManualClosePin);
TestEnable = digitalRead(TestEnablePin);
OpenLimitActive = digitalRead(OpenLimitSw);
CloseLimitActive = digitalRead(CloseLimitSw);
if (TestEnable == HIGH)
{ Delay1 = 50;
Delay2 = 60; }
else
{ Delay1 = 6000;
Delay2 = 6002; }

if (OpenLimitActive == LOW)
{OpenCounter = 70;}
if (CloseLimitActive == LOW)
{CloseCounter = 70;}
if (ManualOpen == HIGH or ManualClose == HIGH)
{
if (ManualOpen == HIGH && OpenCounter < 70)
{
OpenCounter += 1;
digitalWrite(OpenOutput, HIGH);
digitalWrite(CloseOutput, LOW);
}
if (OpenCounter > 50)

{
digitalWrite(OpenOutput, LOW);
OpenCounter = 70;
}

if (ManualClose == HIGH && CloseCounter < 70)
{
CloseCounter += 1;
digitalWrite(CloseOutput, HIGH);
digitalWrite(OpenOutput, LOW);
}
if (CloseCounter > 50)
{
digitalWrite(CloseOutput, LOW);
CloseCounter = 70;
}
}

if (ManualOpen == LOW && ManualClose == LOW)
{
LDRval = analogRead(LDR);       // read the value from the light sensor
if (LDRval > 970 && Counter < Delay2) Counter += 1;
if (LDRval < 600 && Counter > 0) Counter -= 1;
if (Counter == 1) OpenCounter = 1;
if (Counter == Delay1) CloseCounter = 1;
if (OpenCounter >= 1 && Counter < 1)
{
OpenCounter += 1;
digitalWrite(OpenOutput, HIGH);
digitalWrite(CloseOutput, LOW);
}
if (OpenCounter > 50)
{
digitalWrite(OpenOutput, LOW);
OpenCounter = 0;
}
if (CloseCounter >= 1 && Counter > 50)
{
CloseCounter += 1;
digitalWrite(CloseOutput, HIGH);
digitalWrite(OpenOutput, LOW);
}
if (CloseCounter > 60)
{
digitalWrite(CloseOutput, LOW);
CloseCounter = 0;
}
}
// print the results to the serial monitor:
Serial.print(“LDRval = ” );
Serial.print(LDRval);
Serial.print(” Cntr = “);
Serial.println(Counter);
Serial.print(” OpenCntr = “);
Serial.println(OpenCounter);
Serial.print(” CloseCntr = “);
Serial.println(CloseCounter);
Serial.print(” ManualOpen = “);
Serial.println(ManualOpen);
Serial.print(” ManualClose = “);
Serial.println(ManualClose);
Serial.print(” TestEnable = “);
Serial.println(TestEnable);
Serial.print(” Delay1 = “);
Serial.println(Delay1);
Serial.print(” Delay2 = “);
Serial.println(Delay2);
Serial.print(” OpenLimitActive = “);
Serial.println(OpenLimitActive);
Serial.print(” CloseLimitActive = “);
Serial.println(CloseLimitActive);
delay(100);
}

————————————————————————

DIY RFID Keyless Entry System

A few years ago I built a keyless entry system for my shop using a keypad, now it is time to update it to use an RFID key-fob. My homemade door actuator was made from parts out of an old VCR. The electronics controlling the system consist of a few components, a NE555IC (timer), a small NPN transistor, and a double poll double throw relay.

This video outlines the whole project including the RFID module, homemade door actuator, and door actuator timer and relay circuit.

image

If you are interested in the schematic diagram you can view and download it here.

View or Download RFIDKeylessEntrySchematic 75.0 kb.

Arduino Electronic Speed Control ESC 2 of 2

Here is my second ESC or Electronic Speed Control that I built with an Arduino Duemilanove. You can’t just hook DC up to Brushless DC Motors that you have scavenged out of old CDROM drives, hard drives, or printers and expect them to spin.  Brushless DC motors require you to use a motor controller to produce a three phase DC square wave.

image

This project is just like my last ESC circuit but I have added a potentiometer for speed control. For more detailed information check out the last ESC post and video as well.Here are the project files including schematic and sketch.

PDF’s:Arduino ESC2.0

ZIP:ArduinoESC2.0

 


Here is the Arduino sketch.

——————————————————————

/*
 
Brushless DC Motor Control ESC 2.0
 
This sketch cascades 6 outputs which when connected properly
 can generate a three phase square wave which can in turn run
 a brushless DC motor.
 
This circuit has advanced from my Brushless DC Motor Control
 ESC 1.0 because I have added a speed control potentiometer
 to control the motor speed.
 
I suggest that you not try to run a motor directly off of the outputs
 of the Arduino but use some transistors to handle the load.
 
For the schematic and supporting documents for this project go to
 
http://filear.com
 
Made by Fileark. 2010-0826
 
*/
 // Here we are declaring six variables called led 1 through led6
 // We are also assigning the variables to the physical discrete pins
 // Outputs can be any outputs you want
 int led1 =  0;
 int led2 =  1;
 int led3 =  2;
 int led4 =  3;
 int led5 =  4;
 int led6 =  5;
 int potpin = 0;  //This is the analog input for the pot
 int val;         //This is the val varible for the speed
 
// The setup() method runs once, when the sketch starts
 
void setup()   {
 // initialize the digital pin as an output:
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 pinMode(led5, OUTPUT);
 pinMode(led6, OUTPUT);
 }
 
// the loop() method runs over and over again,
 // as long as the Arduino has power
 /*
 LESD1, LED3, and LED5 will be positive, LED2, LED4, and LED6 are negative.
 You will notice that two LEDs are on at the same time so that one of the
 three motor coils are energised at a time.
 */
 void loop()
 {
 val = analogRead(potpin);   // reads the pot and assigns the value to “val”
 digitalWrite(led5, LOW);    // set the fifth LED off
 digitalWrite(led1, HIGH);   // set the first LED on
 delay(val);                 // wait for a period of time
 digitalWrite(led6, LOW);    // set the sixth LED off
 digitalWrite(led2, HIGH);   // set the second LED on
 delay(val);                 // wait for a period of time
 digitalWrite(led1, LOW);    //repeat ect.
 digitalWrite(led3, HIGH);
 delay(val);
 digitalWrite(led2, LOW);
 digitalWrite(led4, HIGH);
 delay(val);
 digitalWrite(led3, LOW);
 digitalWrite(led5, HIGH);
 delay(val);
 digitalWrite(led4, LOW);
 digitalWrite(led6, HIGH);
 delay(val);
 }

 

Arduino Electronic Speed Control ESC 1 of 2

Here is my first ESC or Electronic Speed Control that I built with an Arduino Duemilanove. If you don’t already know, the best motors you can scavenge out ov CDROM drives or old hard drives are Brushless DC motors that you can’t just hook DC up to and make it spin. Brushless DC motors require you to use a motor controller to produce a three phase DC square wave. Brushless DC motors are almost identical in nature to three phase AC motors. As you can imaging it is not that easy to create a three phase square wave and I couldn’t find any really good easy examples online so here you go. If you are interested in building your own download the schematic, sketch, and some PDFs I found with good information all zipped up here.

PDFs: Arduino ESC1.0

ZIP: ArduinoESC1.0

image

Before you start let me say that the Arduino can not handle the current necessary to turn the motor so transistors are required to keep the Atmega chip from smoking. Also, as a safety precaution I usually use something like 1K resistors coming off of the outputs of the Arduino to help protect the board from short circuit.

You can purchase a retail ESC for RC hobby motors (RC planes, boats, and cars) for anywhere from $10.00 to $200.00 depending on the quality and amperage rating.  I doubt that a home made ESC will come even close to the quality of a commercial product but it is fun to try.


Here is the Arduino sketch.

________________________________________________

/*
 
Brushless DC Motor Control ESC 1.0
 
This sketch cascades 6 outputs which when connected properly
 can generate a three phase square wave which can in turn run
 a brushless DC motor.
 
I suggest that you not try to run a motor directly off of the outputs
 of the Arduino but use some transistors to handle the load.
 
For the schematic and supporting documents for this project go to
 
http://filear.com
 
Made by Fileark. 2010-0826
 
*/
 // Here we are declaring six variables called led 1 through led6
 // We are also assigning the variables to the physical discrete pins
 // Outputs can be any outputs you want
 int led1 =  0;
 int led2 =  1;
 int led3 =  2;
 int led4 =  3;
 int led5 =  4;
 int led6 =  5;
 
// The setup() method runs once, when the sketch starts
 
void setup()   {
 // initialize the digital pins as outputs
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 pinMode(led5, OUTPUT);
 pinMode(led6, OUTPUT);
 }
 
// the loop() method runs over and over again,
 // as long as the Arduino has power
 /*
 LESD1, LED3, and LED5 will be positive, LED2, LED4, and LED6 are negative.
 You will notice that two LEDs are on at the same time so that one of the
 three motor coils are energised at a time.
 */
 void loop()
 {
 digitalWrite(led5, LOW);    // set the fifth LED off
 digitalWrite(led1, HIGH);   // set the first LED on
 delay(200);                 // wait for a period of time
 digitalWrite(led6, LOW);    // set the sixth LED off
 digitalWrite(led2, HIGH);   // set the second LED on
 delay(200);                 // wait for a period of time
 digitalWrite(led1, LOW);    //repeat ect.
 digitalWrite(led3, HIGH);
 delay(200);
 digitalWrite(led2, LOW);
 digitalWrite(led4, HIGH);
 delay(200);
 digitalWrite(led3, LOW);
 digitalWrite(led5, HIGH);
 delay(200);
 digitalWrite(led4, LOW);
 digitalWrite(led6, HIGH);
 delay(200);
 }

Previous Page · Next Page