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