domingo, 7 de febrero de 2016

Variando la intensidad de un led por bluetooth

Este proyecto tiene como objetivo el variar la intensidad de un led mediante una aplicación android instalada en un dispositivo conectado con el Arduino UNO a través de bluetooth. Este proyecto es muy parecido al realizado en esta entrada con la salvedad de que variamos la intensidad del led utilizando modulación por ancho de pulso (PWM).

En arduino utilizamos la función analogWrite(pin, value) que escribe un valor pseudo-analógico usando PWM en un pin de salida. Esta función está activa para los pines 3, 5, 6, 9, 10 y 11 de Arduino UNO.

Puede especificarse un valor de 0 - 255: un valor 0 genera 0 V en el pin especificado y 255 genera 5 V. Para valores de 0 a 255, el pin alterna rápidamente entre 0 V y 5 V (cuanto mayor sea el valor, más a menudo el pin se encuentra en HIGH (5 V). Por ejemplo, un valor de 64 será 0 V tres cuartas partes del tiempo y 5 V una cuarta parte. Un valor de 128 será 0 V la mitad del tiempo y 5 V la otra mitad. Un valor de 192 será 0 V una cuarta parte del tiempo y 5 V tres cuartas partes.

El esquema del montaje es sencillo:

Conectamos el módulo HC-06 al Arduino UNO (RX - TX) y un led al puerto 5.

El código completo de arduino es el siguiente:

char dato;
String comando;
#define led 5

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
  analogWrite(led,255);
  delay(1000);
  analogWrite(led,0);
  delay(10);
  Serial.println("Preparado...");
}

void LeerPuertoSerie() {
  comando = "";
  while(Serial.available()){
    delay(10);
    if (Serial.available() > 0){
      dato = Serial.read();
      comando += dato;
    }
  }
}
void loop(){
  LeerPuertoSerie();
  if (comando.length() > 0){
    Serial.println(comando);
    if (comando == "ON") {
        analogWrite(led,255);
        delay(10);
        comando == "";
    } else {
      if (comando == "OFF") {
        analogWrite(led,0);
        delay(10);
        comando == "";
      } else {
        if ((comando.toInt()>=0)&&(comando.toInt()<=255)) {
        analogWrite(led, comando.toInt());
          delay(10);
        }
      }
    }
  }
}



El programa lee el puerto serie y espra a recibir un comando:
ON: Enciende el led con la intensidad máxima
analogWrite(led,255);

OFF: Apaga el led
analogWrite(led,0);

Valor : si recibe un número comprendido entre 0 y 255, ilumina el led según dicho valor.
analogWrite(led, comando.toInt());

Utilizando App Inventor creamos nuestro programa:



Bloques de inicialización de variables e inicio del programa:

Bloques para salir del programa, desconectar y conectar con el módulo bluetooth:

  Bloque para desconexión:

Bloque que envía el comando ON (para enviar el comando OFF es similar):

Bloque que enviá el valor del slide:

Si deseas tener más conocimientos sobre la programación con App Inventor no dejes de visitar AppInventor a muete.

En este enlace puedes descargar la aplicación para tu dispositivo android. Las fuentes del programa las puedes descargar de aquí.

Fuentes:

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.