Sensor de flexión serial - jorgerivera/ULCR-BINGE61 GitHub Wiki

Universidad Latina de Costa Rica - Bachillerato en Ingeniería Electrónica - Microcontroladores.

Sergio Alfaro Espósito; Mayron Jiménez Sanchez.

Sensor de flexión serial.

Descripción del circuito.

El circuito realizará la función de leer una entrada analógica conectada a un sensor flex y mostrar el valor leído. El sistema lo que hará es leer el voltaje que hay entre el sensor y la resistencia de 20KΩ, este valor varía entre los 0V y 5V y cambia dependiendo del valor de resistencia que presente el sensor. Posteriormente la tarjeta Arduino se encargará de convertir ese valor analógico a digital usando un convertidor interno, el cual se encarga de leer el voltaje para devolver un número en una escala entre 0 y 1023 y mostrarlo en la computadora.

Lista de materiales.

  1. TARJETA ARDUINO UNO.
  2. PROTOBOARD.
  3. SENSOR FLEX.
  4. RESISTENCIAS DE 20KΩ Y 330Ω (1 c/u)
  5. LED ROJO.
  6. CABLES JUMPER Y USB.

Esquemático.

Descripción del programa.

El código utilizado se muestra a continuación:

Sin máquina de estados:

int led = 13;

void setup() {

Serial.begin(9600);

pinMode(13,OUTPUT);

}

void loop() {

`int valor_sensor = analogRead(A0);`

`Serial.println(valor_sensor);`

`digitalWrite(led, HIGH);   `

`delay(500);               `

`digitalWrite(led, LOW);    `

`delay(500);          `

}

Con máquina de estados:

int led = 13;

int estado;

int estado2;

int lectura = analogRead(A0);

unsigned long ultimoCambio;

void setup() {

`Serial.begin(9600);`

`pinMode(13,OUTPUT);`

`estado = 1;`

`estado2 = 1;`

}

void loop() {

`maq_led();`

`maq_estado();`

}

void maq_led(){

`switch (estado) {`

`case 1:    `

    `digitalWrite (led, HIGH);`

    `estado = 2;`

    `ultimoCambio = millis ();`

    `break;      `

case 2:

 `if (millis ()>= ultimoCambio + 500) {`

   `estado = 3;   `

 `}`

   `break;`

case 3:

 `digitalWrite (led, LOW);`

 `estado = 4;`

 `ultimoCambio = millis ();`

 `break;  `

case 4:

 `if (millis ()>= ultimoCambio + 500) {`

   `estado = 1;         `

 `}`

 `break;  `

}

}

void maq_estado(){

switch (estado2) {

case 1:

{

  `lectura = analogRead(A0);`

  `estado2 = 2;`

  `break;`

}

case 2:

  `Serial.println(lectura);`

  `estado2 = 1;`

  `break;  `

}

}

Sin máquina de estados:

El código inicia con la declaración de la variable del LED y se le asigna el pin correspondiente:

int led = 13;

Luego, en el setup, se inicia la comunicación serial, a 9600 baudios por segundo, entre el Arduino y la compuradora, además de definir el pin conectado al LED como una salida:

void setup() {

Serial.begin(9600);

pinMode(13,OUTPUT);

}

Finalmente, en el loop, se define la variable donde se guardarán las lecturas analógicas tomadas del pin A0 y se mostrarán en el monitor serial. Además se encenderá el LED y por medio de un delay, este permanecerá encendido por 500 milisegundos, se apagará el LED y por último tomará otros 500 milisegundos para encenderse. Al final el sistema repetirá el proceso anteriormente descrito:

void loop() {

int valor_sensor = analogRead(A0);

Serial.println(valor_sensor);

digitalWrite(led, HIGH);

delay(500);

digitalWrite(led, LOW);

delay(500);

}

Con máquina de estados:

El código inicia con la declaración de las variables a utilizar:

int led = 13;

int estado;

int estado2;

int lectura = analogRead(A0);

unsigned long ultimoCambio;

Posteriormente, en el setup se inicia la comunicación serial, a 9600 baudios por segundo, entre el Arduino y la computadora. Adicionalmente se define el pin, donde estará conectado el LED, como una salida y además se configura el estado inicial de ambas máquinas de estado:

void setup() {

Serial.begin(9600);

pinMode(13,OUTPUT);

estado = 1;

estado2 = 1;

}

Luego, en el loop se declaró las dos máquinas de estado a utilizar, una para el encendido y apagado del LED y otra para lectura análogica:

void loop() {

maq_led();

maq_estado();

Después, tenemos la máquina de estados que corresponde al LED, en ella podemos ver cuatro casos:

void maq_led(){

switch (estado) {

En el primer caso, la máquina se encargará de encender el LED, pasar al estado 2 y guardar en la variable “ultimoCambio” la cantidad de milisegundos transcurridos desde el inicio del sistema:

case 1:

 `digitalWrite (led, HIGH);`

 `estado = 2;`

 `ultimoCambio = millis ();`

 `break;      `

En el caso 2, la máquina esperará a que transcurra el tiempo en la variable “ultimoCambio”, que sería, los milisegundos acumulados en caso 1 sumados a los 500 milisegundos que debe permanecer el LED encendido, una vez transcurrido este tiempo, la máquina pasará al estado 3, caso contrario, permanecerá en el estado 2:

case 2:

 `if (millis () >= ultimoCambio + 500) {`

   `estado = 3;   `

 `}`

   `break;`

En el caso 3, el LED se apaga, se pasa al estado 4 y se guarda en la variable “ultimoCambio” la cantidad de milisegundos actuales desde el último cambio:

case 3:

 `digitalWrite (led, LOW);`

 `estado = 4;`

 `ultimoCambio = millis ();`

 `break;`

Finalmente, en el estado 4, la máquina tomará el mismo comportamiento del estado 2, excepto que esta vez al cumplirse el tiempo, pasará al estado 1 y repetirá el proceso:

case 4:

 `if (millis () >= ultimoCambio + 500) {`

   `estado = 1;         `

 `}`

 `break;  `

}

}

Posteriormente, para la máquina de estados del sistema tenemos un primer caso que se encargará de tomar la lectura analógica en el pin A0, finalizada la lectura la máquina pasará al segundo estado:

void maq_estado(){

switch (estado2) {

case 1:

{

  `lectura = analogRead(A0);`

  `estado2 = 2;`

  `break;`

}

En el caso 2, la máquina mostrará el valor de la lectura analógica en la computadora, específicamente en la herramienta monitor serial del IDE de Arduino:

case 2:

  `Serial.println(lectura);`

  `estado2 = 1;`

  `break;  `

}

}