Ayuda con pequeño proyecto de seguidor solar

pantocreitor

Me han mandado como proyecto de fin de curso la fabricación de una placa solar con sensores que vaya "persiguiendo" una posición perpendicular al sol en todo momento.
Para ello, aparte de diseñar y construir toda la estructura, engranajes para los motores, brazos, etc... tengo que meterle un Arduino y aquí llega el problema: hace una barbaridad que no toco nada de programación o electrónica y ando muy perdido en el tema de código.

La idea es hacer un programa que lea 3 sensores fotoeléctricos en vertical (montados en un brazo con la placa solar) y 3 sensores en horizontal (montados en una base rotatoria), una vez que lea los sensores y se sepa cual es el que absorbe más luminosidad (y por tanto está más perpendicular), accione los motores X pasos hasta que el sensor central ocupe la posición del sensor que mas luminosidad capta.

Así que resumiendo, necesito un programa que lea 3+3 sensores analógicos y que haga moverse 2 motores paso a paso, pero no se muy bien cómo hacerlo :psyduck:

De momento tengo esto:

int ldrxapin = 0; // leer sensor a en eje x
int ldrxaval = 0; // valor del sensor a en eje x
int ldrxbpin = 1; // leer sensor b en eje x
int ldrxbval = 1; // valor del sensor b en eje x
int ldrxcpin = 2; // leer sensor c en eje x
int ldrxcval = 2; // valor del sensor c en eje x
int ldryapin = 3; // leer sensor a en eje y
int ldryaval = 3; // valor del sensor a en eje y
int ldrybpin = 4; // leer sensor b en eje y
int ldrybval = 4; // valor del sensor b en eje y
int ldrycpin = 4; // leer sensor c en eje y
int ldrycval = 4; // valor del sensor c en eje y
servo servox; // servo para movimiento en eje x
servo servoy; // servo para movimiento en eje y

void setup()
{
} 

void loop()
{
val = analogRead(ldrxapin);
val = analogRead(ldrxbpin); // quisiera coger el valor más alto de estos 3 (doble condicional???)
val = analogRead(ldrxcpin);
...
} 

Ahora lo que no se es como ver cual de esos 3 valores es mayor para decirle al servo que gire x para posicionarse (todavía no me he metido con los servos, primero quiero tener esto mas o menos claro).

Y bueno, ahora mismo poco mas.
Me gustaría una vez que esto vaya cogiendo forma hacer un hilo de seguimiento con la fabricación del aparatejo, aunque aún no se 100% que usaré, pero casi seguro torno, fresadora e impresora 3D.

Espero que me podáis echar una mano porque en el tema arduino ando bastante perdido xD

pantocreitor

Estoy un poco perdido con el if else para 3 variables, había pensado en hacer un if else con una variable y meter dentro otro if else con las otras 2.
La idea es coger el valor mayor para saber a qué posición deberían rotar la base y moverse el brazo.
Estoy buscando pero no termino de ver cómo podría hacerlo.

1 respuesta
Kaiserlau

#2 No te comas la cabeza xD

La manera mas chola de hacerlo seria asi:

Si sensorA>sensorB and SensorA>SensorC and SensorA>SensorD{
    El sensorA manda!
    mueves el servo o ejecutas la funcion guiado etc..
}

Y asi en cada caso. No estas obligado a usar elses. el else aveces hay q sudar de el, si no se cumple ninguna de las comparaciones se ira al siguiente if y si no entra en ningun if sq algo esta roto xD

Yo meteria eso en una funcion aparte para descargarte el main loop y dejarlo boniko.

pd: el proyecto mola, quremos fotos, videos y tetas

1
etronyK

Algo así rapido:


void loop()
{
val1 = analogRead(ldrxapin);
val2 = analogRead(ldrxbpin); 
val3 = analogRead(ldrxcpin);
mayor = val3;

if(val1>val2 && val1>val3)
  {
    mayor = val1;
  }
else if(val2>val1 && val2>val3)
  {
    mayor = val2;
  }
}

1

Usuarios habituales

  • etronyK
  • Kaiserlau
  • pantocreitor