viernes, 10 de junio de 2016

Ejemplos Basicos (2) - Ajustar el Brillo de una Salida




En este tutorial vamos a explicar como crear un Dispositivo (Slot) que permita controlar mediante PWM la intensidad de una salida, para controlar por ejemplo un Transistor y a su vez una Tira de Leds de 12v

Como siempre es recomendable entender la Estructura del codigo y la Configuracion de la Interfaz, vamos con el ejemplo para el ESP8266:



/**************************************************************************
    Souliss - Dimmable Output for Expressif ESP8266
    
    This is the basic example, create a software push-button on Android
    using SoulissApp (get it from Play Store).  
    
    Load this code on ESP8266 board using the porting of the Arduino core
    for this platform.
        
***************************************************************************/

// Let the IDE point to the Souliss framework
#include "SoulissFramework.h"

// Configure the framework
#include "bconf/MCU_ESP8266.h"              // Load the code directly on the ESP8266
#include "conf/Gateway.h"                   // The main node is the Gateway, we have just one node
#include "conf/IPBroadcast.h"

// **** Define the WiFi name and password ****
#define WIFICONF_INSKETCH
#define WiFi_SSID               "mywifi"
#define WiFi_Password           "mypassword"    

// Include framework code and libraries
#include <ESP8266WiFi.h>
#include <EEPROM.h>

/*** All configuration includes should be above this line ***/ 
#include "Souliss.h"

// This identify the number of the LED logic
#define MYLEDLOGIC          0               

// **** Define here the right pin for your ESP module **** 
#define OUTPUTPIN   5

void setup()
{   
    Initialize();

    // Connect to the WiFi network and get an address from DHCP
    GetIPAddress();                           
    SetAsGateway(myvNet_dhcp);       // Set this node as gateway for SoulissApp  


    Set_DimmableLight(MYLEDLOGIC);        // Define a simple LED light logic
 
    pinMode(OUTPUTPIN, OUTPUT);         // Use pin as output 
}

void loop()
{ 
    // Here we start to play
    EXECUTEFAST() {                     
        UPDATEFAST();   
        
        FAST_50ms() {   // We process the logic and relevant input and output every 50 milliseconds
            Logic_DimmableLight(MYLEDLOGIC);
            analogWrite(OUTPUTPIN, mOutput(MYLEDLOGIC + 1));
        } 
              
        // Here we handle here the communication with Android
        FAST_GatewayComms();                                        
    }
} 

Como se puede ver en las lineas resaltadas son pocas las diferencias con respecto al ejemplo mas sencillo, unicamente modificamos SimpleLight del Set en el setup() y el Logic del loop() por DimmableLight, de este modo la App de Android lo detectará como un Slot en el cual se puede ajustar la intensidad de la salida mediante una barra de ajuste.

Cabe destacar que el comando que mas cambia es el de Salida, en lugar de un DigOut utilizamos el analogWrite para enviar el valor de brillo del Slot al PIN. Tambien es importante saber que un Slot DimmableLight lo formar 2 "huecos" en el memory_map, es decir, MYLEDLOGIC almacena el estado (apagado, encendido, etc...) y MYLEDLOGIC+1 almacena la intensidad o valor de Salida.

Es importante tambien dejar claro que NO todos los pines de un Arduino son PWM, hay que tenerlo en cuenta a la hora de elegir el Pin de Salida a utilizar, por otro lado Todos los PINES de un ESP8266 pueden ser PWM, aunque pueden existir algunos casos en los que no funcione dependiendo del esquema seguido para su montaje.

Comentarios, sugerencias o preguntas aqui abajo :P Salu2

2 comentarios:

  1. Buenas Juan, ¿podrías incluir otro apartado donde se incluyera la parte de electrónica?, Esquema,PCB, etc. Es que he visto ejemplos sobre arduino a 5V, pero no se que transistor se usa para 3,3 en su base. Perdona es que estoy muy pez en electrónica. Un saludo.

    ResponderEliminar
    Respuestas
    1. Hola Raul, buena pregunta, de hecho es una de las cosas que mas quebraderos de cabeza me ha traido y despues de muchas pruebas con diferentes transistores finalmente he decidido utilizar en mi placa los MOSFET modelo FQP13N10L de Fairchild, estos MOSFET aunque son algo caros tienen la ventaja de poder conectarse directamente a 3.3v sin necesidad de electronica adicional, el esquema de conexion es muy sencillo, unicamente es necesaria una resistencia pulldown que en mi caso es de 10k. Dejo aqui un esquema electrico:
      http://i.stack.imgur.com/YwcFa.png

      Salu2 y gracias por el comentario :P

      Eliminar