Sensor de temperatura I2C con MCP9803
Para este ejemplo vamos a utilizar el integrado MCP9803 de microchip, es un sensor de temperatura con comunicación I2C.
El PCF8591 posee un sensor de temperatura integrado ademas de un pin dedicado a alerta. Dispone de tres pines para seleccionar la dirección del bus I2C.
En este ejemplo solo vamos a utilizar el sensor de temperatura.
Se puede observar en el esquema que hemos puesto todos los pines de direcciones a GND, eso quiere decir que nuestro periférico I2C tendrá la dirección 000, que traducido a nuestro código 0x48.
El esquema de nuestro sensor en PCB es el siguiente:
La siguiente imagen muestra lo que nos encontramos en la PCB, las 4 entradas analógicas y el conector de comunicación con la alimentación, que es el que principalmente nos interesa.
La placa que he diseñado para el sensor tiene los pines compaibles con los conectores I2C que se preparan en el Motor Shiled Mioio, al igual que los ultrasonidos Srf04.
Para ponerlo en marcha en nuestro programa debemos incluir lo siguiente:
El programa es muy similar al del conversor PCF8591, solo hay que cambiar una linea del código.
1. La librería que posee la comunicación I2C:
import ioio.lib.api.TwiMaster;
2. En el setup: (Fíjate como se usa el puerto número 1 de I2C que corresponde a los pines 47 y 48 de la MIOIO).
twi = ioio_.openTwiMaster(1, TwiMaster.Rate.RATE_100KHz, true);
3. En el loop:
final float sensorain1 = Readmcp9803(0x48, twi); setText(Float.toString(reading));
4. Las funciones utilizadas son las siguientes:
//Para la lectura de la conversión: public float Readmcp9803(int address, TwiMaster port) { float returnval = 0; byte[] request = new byte[] { 0x30 }; byte[] tempdata = new byte[2]; try { port.writeRead(address, false, request,request.length,tempdata,tempdata.length); float ain1 = tempdata[0]; //La siguiente linea es la que cambia respecto del ejemplo del //conversor analógico PCF8591 ain1+=(float)tempdata[1] / 256; return ain1; } catch (ConnectionLostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally {} return returnval; } //La función settext para la visualización del dato en un textView que nos hayamos creado. //private void setText(final String str) { runOnUiThread(new Runnable() { @Override public void run() { textView_.setText(str); } }); }