Tag Archives: diy
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…

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);
}

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

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);
 }

DIY Sound Localization Sensor

I searched for days trying to find a commercial sound localization sensor or info on how to build one. Sound localization is what the human ear does when it determines that a sound is coming from the left or right. After talking to some gentlemen over at the Arduino forums I realized that it wasn’t going to be as simple as I thought.

I finally hacked together something that works great for my first try, there is a lot of work to be done though. The sensor works fairly well from a foot or so away, after that you really feel the limitations of my circuit and only doing a volume comparison from the microphones.

SoundLocalization

Here are the related project files. Sketch Audio_Localization  and schematic SoundLocalization

 

DIY Sound Localization Sensor

I am aware that the LM324N is not specifically a comparator but can work as one, it seems to do the job.

If you are interested there are some videos on YouTube regarding sound localization but they only demonstrate the sensors and give no helpful information on building one yourself.

I may in the future try to use an ARM Cortex M3 proto board I purchased from Texas Instruments (EKK-LM3S811 Evaluation Kit) to do phase shift comparison calculations for sound localization, the Arduino is nowhere near fast enough to do this. After reading some information I believe you need to be able to sample and do a calculation in 10-50 micro seconds in order to get usable data.

Previous Page