Go Down

Topic: Utilizar bits internos (Read 928 times) previous topic - next topic

adrianlitri

Buenos días a todos. Soy novato total. Programo autómatas y arduino me está enganchando pero eso de ser autodidacta es lo que tiene. ¿Cómo puedo utilizar los bits internos que tiene el arduino uno que estoy trasteando, para poder hacer un bimanual por ejemplo?. En fin llegar a hacer eso supongo que me llevará a utilizar condiciones, etc. Gracias de antemano

surbyte

No te comprendo. A que bits internos te refieres? Que es un bimanual?

_jose_

#2
Jan 09, 2015, 03:22 pm Last Edit: Jan 09, 2015, 03:23 pm by _jose_
Quote
Buenos días a todos. Soy novato total. Programo autómatas y arduino me está enganchando pero eso de ser autodidacta es lo que tiene. ¿Cómo puedo utilizar los bits internos que tiene el arduino uno que estoy trasteando, para poder hacer un bimanual por ejemplo?. En fin llegar a hacer eso supongo que me llevará a utilizar condiciones, etc. Gracias de antemano
te refieres a un sistema de control que necesita usar la dos manos para evitar meterlas donde no se debe mientras funciona una maquina??

adrianlitri

Bueno, en primer lugar daros gracias por contestar. Un "bimanual" son dos pulsadores accionados de manera simultánea para poder accionar algo. Debe hacerse en unas décimas de segundo de manera simultánea, si no, no trabaja aquello que controlamos. Es para evitar , por ejemplo, que se mantenga presionado un pulsador de marcha de manera mecánica, por ejemplo con cinta aislante, y se trabaje solo con el otro pulsador de marcha. Con eso se garantiza que las dos manos estarán en los pulsadores , y no en una parte de la máquina en que el operario se pueda lastimar. Dicho esto puedo trabajar con los pines 2 y 3 del UNO y la famosa salida 13. Hasta aquí todo bien, hasta que me meto en harina y empiezo a programar. En programación de autómatas utilizo los "bits" que son los centenares de "0" y "1" que posee el procesador. Además utilizo un par de temporizadores para que si no se accionan los dos pulsadores simultáneamente en un intervalo de 3 décimas de segundo no se active esa salida que quiero controlar, (por ej. la 13) . En fin , ya tenemos para jugar . Gracias

adrianlitri

// 11111111 Lo primero que debemos hacer en un progrma es especificar constantes, sean fijas o variables, antes de "setup" y "loop"
/***********************************************************************************************************************/
// indicamos primero las constantes que no cambiarán con "const int" ,como son entradas y salidas
const byte entradaDos = 2;     // entrada 2
const byte entradaTres = 3;    // entrada 3
const byte entradaCuatro = 4;       // entrada 4
const byte salida11 = 11;      // salida 11
const byte salida12 = 12;      // salida 12
const byte salida13 = 13;      // salida 13



// indicamos después variables que cambiarán con "int" como son las entradas
byte variablentrada2 = 0;         //variable para leer el estado de la entrada 2 SE LE ASIGNA UN VALOR DE "0"
byte variablentrada3 = 0;        //variable para leer el estado de la entrada 3  SE LE ASIGNA UN VALOR DE "0"
byte variablentrada4 = 1;        // variable para leer el estado de la entrada 4  SE LE ASIGNA UN VALOR DE "0"
byte b0= B00000;                 // byte 0


// 22222222222 arrancamos o inicializamos los pines o bytes en que trabajaremos, sean entradas, salidas o bytes
/**************************************************************************************************************************/
void setup() {
  pinMode(salida11, OUTPUT);    // inicializa el pin 11 como salida
  pinMode(salida12, OUTPUT);    // inicializa el pin 12 como salida
  pinMode(salida13, OUTPUT);    // inicializa el pin 13 como salida
 
  pinMode(entradaDos, INPUT); // inicializa el pin 2 como entrada
  pinMode(entradaTres, INPUT);  // inicializa el pin 3 como entrada
  pinMode(entradaCuatro, INPUT);    //inicializa el pin 4 como entrada
 
 
}

// 333333333333 Vamos a ello. Empezamos a programar. Leemos constantes y las relacionamos con condiciones
/***************************************************************************************************************************/
void loop(){
  variablentrada2 = digitalRead(entradaDos); // lee el estado del pulsador 2
  variablentrada3 = digitalRead(entradaTres); // lee el estado del pulsador 3
  variablentrada4 = digitalRead(entradaCuatro); // le el estado de la entrada 4

/************************************************************************************************/
 
    // utilizamos la condición "si es" (if), para el pulsador entrada 2 activa salida 12
  if (variablentrada2 == HIGH)      {digitalWrite(salida12, HIGH);}
  // utilizamos la condicion "si no es" /else) para el pulsador entrada 2, desactiva salida 12
  else                              {digitalWrite(salida12, LOW);}

/************************************************************************************************/
  // utilizamos la condición "si es" (if), para el pulsador entrada 3 activa salida 13
  if (variablentrada3 == HIGH)      {digitalWrite(salida13, HIGH);}
  // utilizamos la condicion "si no es" /else) para el pulsador entrada 3, desactiva salida 13   
  else                              {digitalWrite(salida13, LOW);}
/*************************************************************************************************/
 
}

adrianlitri

Hurgando he llegado hasta aquí, ufff

surbyte

Todo bien pero veo un posible problema y es, que si vas a usar eso en un ambiente industrial y tienes ruido nadie asegura que al presionar un pulsador no tengas rebotes en la entrada del arduino y ya sabes que pasará con tu control.
Por lo visto no puedes agregarle debounce a tu entrada porque quieres respuestas rápidas entre ambos mandos de modo que veo un posible problema.
Lo primero que se me ocurre es que si estoy en lo correcto y vas a usar esto en un ambiente industrial, considera optoacoplar las entradas. Usar una fuente de alimentación de bajo ruido y tambien optoacoplar la salida.
El arduino debe estar Aislado del ambiente, además de meterlo en una caja metálica con puesta a tierra.

Go Up