Tag Archives: project
DIY The Most Useless Machine

The useless machine is a simple box with a switch and motor, when you turn on the switch the lid opens and the arm swings out and turns off the machine and then retracts. It is so simple but brings a smile to the face of everyone that tries! The Useless Machine was not created by me, it can be found in Make Magazine and in numerous Instructables and DIY articles online. 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);
}

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

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.