Introduction: Arduino Light Seeker
First of all, I'm from Switzerland so please excuse my english mistakes.
Here is one of my first little project I did with my Arduino Uno.
It's is just a little light seeker. The servo turns towards the light.
I made a video to show you what it does :
Here is one of my first little project I did with my Arduino Uno.
It's is just a little light seeker. The servo turns towards the light.
I made a video to show you what it does :
Step 1: The Wiring
Here is the exact wiring I used.
The only difference is that I fixed the photoresistors on the servo (but I couldn't do it with the program)
Also I used a 9V battery in the video, it was plugged in Vin and GND.
The resistors are 200 Ohm for the LED's and 10 KOhm for the photoresistors.
The only difference is that I fixed the photoresistors on the servo (but I couldn't do it with the program)
Also I used a 9V battery in the video, it was plugged in Vin and GND.
The resistors are 200 Ohm for the LED's and 10 KOhm for the photoresistors.
Step 2: The Code
This is my first code. I tried to translate the comments in english.
The Arduino calculate the difference between the left and right photoresistor and turns the servo if the difference is greater than 30.
When the servo is turning clockwise, the right LED lights up. When it turns counter clockwise, the left LED lights up
If you see any errors or weird thing, please tell me :)
#include
Servo servo; //define servo
//Variables
int photoD = 0; //define pin 0 for right photoresistor
int photoG = 1; //define pin 1 for left photoresistor
int ledD = 3; //define pin 3 for right LED
int ledG = 5; //define pin 5 for left LED
int incr = 5; //value to add to the angle
int valS; //angle
long temps; //Time
long temps2; //Time 2
long temps3; //Time 3
long temps4; //Time 4
//----------------------------------------------------------------------------
//Setup
void setup()
{
pinMode(3, OUTPUT); //define output pin 3
pinMode(5, OUTPUT); //define output pint 5
servo.attach(8); //servo on pin 8
Serial.begin(9600); //Start serial communcation
temps = millis();
servo.write(75); //Initial position for the servo
}
//----------------------------------------------------------------------------
//Loop
void loop()
{
int valG; //photoG value
int valD; //photoD value
valD = analogRead(photoD);
valG = analogRead(photoG);
//Displays the values on the monitor every second
if (temps + 1000 < millis()){
Serial.print("right photoresistor value :");
Serial.println(valD);
Serial.print("left photoresistor value :");
Serial.println(valG);
Serial.print("Angle :");
Serial.println(valS);
Serial.println("----------------------");
temps = millis();
}
if (temps3 + 1000 < millis() && (valD - valG > 20) && (valS < 180)){
Serial.println("Turning counter clockwise");
temps3 = millis();
}
if (temps4 + 1000 < millis() && (valG - valD > 20)&& (valS > 0)){
Serial.println("Turning clockwise");
temps4 = millis();
}
if (valD - valG > 30) {
valS = valS + incr;
digitalWrite(ledG,HIGH);
}
if (valG - valD > 30) {
valS = valS - incr;
digitalWrite(ledD,HIGH);
}
if (valS > 0 || valS < 180) {
servo.write(valS); //turns the servo
}
if (valS <= 0) {
valS = 0;
}
if (valS >= 180) {
valS = 180;
}
if (temps2 + 500 < millis() && valD - valG < 30 && valG - valD < 30 ){
digitalWrite(ledD,LOW);
digitalWrite(ledG,LOW);
temps2 = millis();
}
delay(30);
}
The Arduino calculate the difference between the left and right photoresistor and turns the servo if the difference is greater than 30.
When the servo is turning clockwise, the right LED lights up. When it turns counter clockwise, the left LED lights up
If you see any errors or weird thing, please tell me :)
#include
Servo servo; //define servo
//Variables
int photoD = 0; //define pin 0 for right photoresistor
int photoG = 1; //define pin 1 for left photoresistor
int ledD = 3; //define pin 3 for right LED
int ledG = 5; //define pin 5 for left LED
int incr = 5; //value to add to the angle
int valS; //angle
long temps; //Time
long temps2; //Time 2
long temps3; //Time 3
long temps4; //Time 4
//----------------------------------------------------------------------------
//Setup
void setup()
{
pinMode(3, OUTPUT); //define output pin 3
pinMode(5, OUTPUT); //define output pint 5
servo.attach(8); //servo on pin 8
Serial.begin(9600); //Start serial communcation
temps = millis();
servo.write(75); //Initial position for the servo
}
//----------------------------------------------------------------------------
//Loop
void loop()
{
int valG; //photoG value
int valD; //photoD value
valD = analogRead(photoD);
valG = analogRead(photoG);
//Displays the values on the monitor every second
if (temps + 1000 < millis()){
Serial.print("right photoresistor value :");
Serial.println(valD);
Serial.print("left photoresistor value :");
Serial.println(valG);
Serial.print("Angle :");
Serial.println(valS);
Serial.println("----------------------");
temps = millis();
}
if (temps3 + 1000 < millis() && (valD - valG > 20) && (valS < 180)){
Serial.println("Turning counter clockwise");
temps3 = millis();
}
if (temps4 + 1000 < millis() && (valG - valD > 20)&& (valS > 0)){
Serial.println("Turning clockwise");
temps4 = millis();
}
if (valD - valG > 30) {
valS = valS + incr;
digitalWrite(ledG,HIGH);
}
if (valG - valD > 30) {
valS = valS - incr;
digitalWrite(ledD,HIGH);
}
if (valS > 0 || valS < 180) {
servo.write(valS); //turns the servo
}
if (valS <= 0) {
valS = 0;
}
if (valS >= 180) {
valS = 180;
}
if (temps2 + 500 < millis() && valD - valG < 30 && valG - valD < 30 ){
digitalWrite(ledD,LOW);
digitalWrite(ledG,LOW);
temps2 = millis();
}
delay(30);
}
Step 3: The End
And... that's all !
I hope you enjoyed this project !
If you have any questions, feel free to ask.
I hope you enjoyed this project !
If you have any questions, feel free to ask.