Despres d’una pila d’anys, reneix el Cercallum.
Material:
- Arduino UNO
- Motor de Lego
- Sevo motor (SM-S2309S)
- Mosfet
- Fotoresistència
- Resistència 10KΩ
- Diode
- Peces de Lego
Circuit:
Programa:
#include <Servo.h>
Servo myServo;
int led = 13;
int motorPin = 11;
int sensorValorMax = 0;
int sensorValor;
int angle_maxim = 140;
int pas = 4;
int angle_inc = pas;
int angle_actual = 90;
int angle_avansa = 0;
int valorPot = 0;
String funcio = "calibra";
void setup() {
pinMode(led, OUTPUT);
pinMode(motorPin, OUTPUT);
myServo.attach(9);
Serial.begin(9600);
}
void loop() {
sensorValor = analogRead(A1);
valorPot = analogRead(A0);
if(funcio=="calibra")
{
myServo.write(angle_actual);
funcio="cerca";
delay(5000);
}
if(funcio=="cerca")
{
if (sensorValor>=sensorValorMax)
{
angle_avansa = angle_actual;
sensorValorMax = sensorValor;
}
if(angle_actual>(90+angle_maxim/2))
{
angle_inc = -pas;
funcio="situa";
}
if( angle_actual<(90-angle_maxim/2))
{
angle_inc = pas;
funcio="situa";
}
if(funcio != "situa")
{
angle_actual += angle_inc;
myServo.write(angle_actual);
}
}
delay(25);
if((funcio=="situa") )
{
digitalWrite(led, HIGH);
delay(100);
digitalWrite(motorPin, LOW);
myServo.write(angle_avansa);
delay(300);
analogWrite(motorPin, 200);
delay(500);
funcio="cerca";
sensorValorMax = 0;
digitalWrite(motorPin, LOW);
delay(100);
//resitua
if(angle_avansa>=90)
{
angle_actual = 90+angle_maxim/2;
angle_inc = -pas;
}
else
{
angle_actual = 90-angle_maxim/2;
angle_inc = pas;
}
myServo.write(angle_actual);
delay(10);
digitalWrite(led, LOW);
}
}


