Ver Mensaje Individual
  #3 (permalink)  
Antiguo 08/08/2014, 22:56
fgarbu3
 
Fecha de Ingreso: agosto-2014
Mensajes: 2
Antigüedad: 9 años, 9 meses
Puntos: 0
Respuesta: Codigo para comparar valores

Hola de nuevo..
En primer lugar mi agradecimiento a Profesor_Falken por su ayuda.
Y ahora una pequeña variación a mi proyecto que creo mas sencillo y elimina botones, displays y accesorios al resultado.
Para ello usaré un "H-Bridge" como el que se muestra a continuacion que permite el control de giro del motor (M) controlado por dos de las salidas PWM de mi Arduino MEGA 2560.
http://i1221.photobucket.com/albums/dd477/quintamala/hbridgemod_zpsff4e96b9.png
Debo decir que en reposo los BC182 han de estar en LOW. El que reciba un HIGH hará girar el motor en un sentido. NO pueden recibir un HIGH ambos en ningun momento.
Visto así , en el sketch que puse en el primer mensaje, solo hace falta un botón que al ser pulsado retuviese el valor angular del sensor LSM303 en el momento de la pulsacion que guardado en una variable (int) me serviría para ver si los valores posteriores aumentan/disminuyen.
A partir de ahí si el valor posterior del sensor fuese mayor que el retenido habría de enviar desde el Arduno una señal PWM que iria incrementando no solo el sentido de giro... Sino tambien un valor de voltage creciente.

Resumiendo: Establezcamos un valor de 0 a 9 de margen entre el valor angular guardado y el que continúa llegando del LSM303 de forma que 1 grado sea muy "lento" y al llegar a 9 grados de diferencia sea tan alta la frecuencia que al BC182 afectado le suponga un HIGH "pleno/max. velocidad de giro"... imperceptible que hará girar el motor al máximo.
Si lo anterior ocurrió porque el valor angular guardado era mayor, solo hay que hacer que si fuese menor actuase al BC182 contrario (y del mismo modo).
Ahora bien... Con mis achacosos conocimientos de programación creo que voy a necesitar alguna ayuda.
Esta tarde, leyendo las caracteristicas de mi placa me dí cuenta de que tiene una docena al menos de pines con capacidad PWM y me dió por darle la vuelta y simplificar.. (aparte de que el cambio de velocidad en aumento/descenso es la guinda del proyecto de mi proyecto).
He "pescado" esta rutina...
Código:
void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
  digitalWrite(13, HIGH);
  delayMicroseconds(100); // Approximately 10% duty cycle @ 1KHz
  digitalWrite(13, LOW);
  delayMicroseconds(1000 - 100);
}
Se usa el pin 13 (un PWM del MEGA 2560) y es algo muy "manual" pero que permite variar la salida (ON/OFF) las veces que se desee. Solo hay que asociar ese numero de veces a lo valores (0-9) que haya de diferencia entre el angulo obtenido con el unico pulador y el que lea el LSM303 a partir de ese momento.
Definitivamente voy a ponerme manos a la obra. Seguro que consigo armar el hardware antes de tener listo el programita... pero es que.. lo mío ha sido siempre el soldador y los chips...
Y pensar que cuando empecé con todo esto allá por los 70, los ordenadores que reparaba eran analógicos o como mucho de memoria con nucleos de ferrita y los programas se escribian en cintas y tarjetas perforadas. ¡Que tiempos!
Saludos y perdonad por mis historias de viejo "cebolleta".
Muchas gracias a todos

Última edición por fgarbu3; 09/08/2014 a las 06:51