Descarga contenido exclusivo en
Ofimática y Programación + Tecnología

jueves, 25 de mayo de 2017



ROM Huawei P8 GRA-UL00 B371 Android 6.0


Huawei P8 GRA-UL00  Android 6.0   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

Huawei P8 GRA-UL00 Android 6.0  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM Huawei P8 Lite ALE-L23 B538 Android 6.0


Huawei P8 Lite ALE-L23  Android 6.0   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

Huawei P8 Lite ALE-L23 Android 6.0  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM Huawei P8 GRA-L09 B337 Android 6.0


Huawei P8 GRA-L09  Android 6.0   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

Huawei P8 GRA-L09 Android 6.0  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)




miércoles, 24 de mayo de 2017



ROM HTC Desire 512 Cricket Android 4.4.2


HTC Desire 512 Cricket   Android 4.4.2   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC Desire 512 Cricket Android 4.4.2  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC Desire 510 Cricket Android 4.4


HTC Desire 510 Cricket  Android 4.4   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC Desire 510 Cricket Android 4.4  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC One A9 AT&T/Cricket Android 6.0


HTC One A9 AT&T/Cricket  Android 6.0   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC One A9 AT&T/Cricket Android 6.0  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC Desire EYE AT&T/Cricket Android 5.0


HTC Desire EYE AT&T/Cricket  Android 5.0   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC Desire EYE AT&T/Cricket Android 5.0  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC Desire 626s Cricket Android 5.1


M4TEL SS4450  Android 5.1   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary


M4TEL SS4450 Android 5.1  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM Galaxy S7 Edge G935F Android 7.0


Galaxy S7 Edge G935F   Android 7.0   ||  Fuente:  www.youmobile.org (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

Galaxy S7 Edge G935F Android 7.0  ||  Fuente: www.youmobile.org
(Busquen también el FlashTool para realizar el proceso)




martes, 23 de mayo de 2017



ROM HTC One M9 Unlocked/Developer Rom 4.23.617.1


HTC One M9 T-Mobile/Metro PCS  Rom 4.23.617.1   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC One M9 T-Mobile/Metro PCS Rom 4.23.617.1  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC One M9 T-Mobile/Metro PCS Rom 3.39.531.41


HTC One M9 T-Mobile/Metro PCS  Rom 3.39.531.41   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC One M9 T-Mobile/Metro PCS Rom 3.39.531.41  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC One M9 Sprint/Boost/VirginMobile/ACG/C Spire Rom 3.41.651.41


HTC One M9 Sprint/Boost/VirginMobile/ACG/C Spire  Rom 3.41.651.41   ||  Fuente: Oficial (Busquen también el FlashTool para realiza... thumbnail 1 summary

HTC One M9 Sprint/Boost/VirginMobile/ACG/C Spire Rom 3.41.651.41  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC One M9 AT&T/Cricket Rom 3.38.502.41


HTC One M9 AT&T/Cricket  Rom 3.38.502.41   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC One M9 AT&T/Cricket Rom 3.38.502.41  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)




domingo, 21 de mayo de 2017



ROM HTC One M9 Unlocked Phone Rom 4.23.617.1


HTC One M9 Unlocked Phone  Rom 4.23.617.1   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC One M9 Unlocked Phone Rom 4.23.617.1  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC 10 Unlocked Phone Rom 2.41.617.3


HTC 10 Unlocked Phone   Rom 2.41.617.3   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC 10 Unlocked Phone Rom 2.41.617.3  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC One A9 Unlocked Phone Rom 2.18.617.10


HTC One A9 Unlocked Phone  Rom 2.18.617.10   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC One A9 Unlocked Phone Rom 2.18.617.10  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC One A9 Sprint/Boost/VirginMobile/ACG/C Spire Rom 2.18.651.2


HTC One A9 Sprint/Boost/VirginMobile/ACG/C Spiret  Rom 2.18.651.2   ||  Fuente: Oficial (Busquen también el FlashTool para realiza... thumbnail 1 summary

HTC One A9 Sprint/Boost/VirginMobile/ACG/C Spiret Rom 2.18.651.2  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM HTC One A9 AT&T/Cricket Rom 1.27.502.5


HTC One A9 AT&T/Cricket  Rom 1.27.502.5   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

HTC One A9 AT&T/Cricket Rom 1.27.502.5  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






Automate reporting with Google Sheets / Gmail / Apps Script












Automatizar envío de informes con Google Sheets/Gmail/Apps Script











viernes, 19 de mayo de 2017



Excel - Add macro to ribbon


thumbnail 1 summary


jueves, 18 de mayo de 2017



ROM Huawei GT3 NMO-L31 B355 Android 7.0


Huawei GT3 NMO-L31  Android 7.0   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

Huawei GT3 NMO-L31 Android 7.0  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM Huawei P8 GRA-L09 B397 Android 6.0


Huawei P8 GRA-L09  Android 6.0   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary


Huawei P8 GRA-L09 Android 6.0  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM Huawei Y6II CAM-L21 B190 Android 6.0


Huawei Y6II CAM-L21  Android 6.0   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary


Huawei Y6II CAM-L21 Android 6.0  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)




martes, 16 de mayo de 2017



ROM Huawei P10 VTR-L29 B133 Android 7.0


Huawei P10 VTR-L29  Android 7.0   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary


Huawei P10 VTR-L29 Android 7.0  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






ROM Huawei Mate 9 MHA-L29 B190 Android 7.0


Huawei Mate 9 MHA-L29   Android 7.0   ||  Fuente: Oficial (Busquen también el FlashTool para realizar el proceso) ... thumbnail 1 summary

Huawei Mate 9 MHA-L29 Android 7.0  ||  Fuente: Oficial
(Busquen también el FlashTool para realizar el proceso)






Excel - Colocar macros en la cinta de opciones







domingo, 14 de mayo de 2017



Arduino - Tres termómetros MLX90614 con TFT 2.8" Touchscreen


Antes hemos mostrado como hacer para mostrar las lecturas del MLX90614 en una LCD 20x4 YwRobot:  Arduino - Dos termómetros MLX90614 c... thumbnail 1 summary

Antes hemos mostrado como hacer para mostrar las lecturas del MLX90614 en una LCD 20x4 YwRobot: Arduino - Dos termómetros MLX90614 con LCD 20x4 YwRobot.

Esta vez veremos que también es sencillo mostrar los datos en un Shield TFT Touch Screen 2.8" TP28017 como la de la imagen:


Vean como cambiar las direcciones aquí: Arduino - Leer multiples MLX90614 (termómetros infrarrojos) cambiando sus direcciones, cada uno de los tres sensores debe tener su propia dirección, en este caso he usado las siguientes: 0x50, 0x55 y 0x5A.

El código usado:

#include <stdint.h>
#include <TFTv2.h>
#include <SPI.h>
#include <i2cmaster.h>

int direccionSensor1 = 0x50<<1;   // Dirección del sensor 1 
int direccionSensor2 = 0x55<<1;   // Dirección del sensor 2
int direccionSensor3 = 0x5A<<1;   // Dirección del sensor 2

float celcius1 = 0;   // Guardara temperatura 1 en Celcius
float celcius2 = 0;   // Guardara temperatura 2 en Celcius
float celcius3 = 0;   // Guardara temperatura 2 en Celcius


void setup()
{
  TFT_BL_ON;      // Ilumina el TFT Shield
  Tft.TFTinit();  // Inicia el TFT Shield*/

  Serial.begin(9600);                       // Comunicación serial en 9600bps.
  i2c_init();                               // Inicializar  i2c bus.
  PORTC = (1 << PORTC4) | (1 << PORTC5);    // Pullups.
}

void loop()
{
  celcius1 = temperaturaCelcius(direccionSensor1);   //Lee la temperatura para cada sensor y
  celcius2 = temperaturaCelcius(direccionSensor2);   //la guarda en la respectiva variable
  celcius3 = temperaturaCelcius(direccionSensor3);   //
  
  /*fahrenheit1 = (celcius1*1.8) + 32;     // Sidesean convertir en Fahrenheit 
  fahrenheit2 = (celcius2*1.8) + 32;*/

  Tft.drawString("Temp1",0,0,4,CYAN);
  Tft.fillRectangle(0,40,200,70,BLACK);
  Tft.drawFloat(celcius1,0,0,40,6,CYAN);

  Tft.drawString("Temp2",0,115,4,CYAN);
  Tft.fillRectangle(0,155,200,70,BLACK);
  Tft.drawFloat(celcius2,0,0,155,6,CYAN);

  Tft.drawString("Temp3",0,230,4,CYAN);
  Tft.fillRectangle(0,270,200,70,BLACK);
  Tft.drawFloat(celcius3,0,0,270,6,CYAN);

  
  delay(3000);                         // Espera tres segundo para tomar otras lecturas
} 

//Función con comentarios originales de http://wiki.wiring.co
float temperaturaCelcius(int address) {
  int dev = address;
  int data_low = 0;
  int data_high = 0;
  int pec = 0;

  // Write
  i2c_start_wait(dev+I2C_WRITE);
  i2c_write(0x07);

  // Read
  i2c_rep_start(dev+I2C_READ);
  data_low = i2c_readAck();       // Read 1 byte and then send ack.
  data_high = i2c_readAck();      // Read 1 byte and then send ack.
  pec = i2c_readNak();
  i2c_stop();

  // This converts high and low bytes together and processes temperature, 
  // MSB is a error bit and is ignored for temps.
  double tempFactor = 0.02;       // 0.02 degrees per LSB (measurement 
                                  // resolution of the MLX90614).
  double tempData = 0x0000;       // Zero out the data
  int frac;                       // Data past the decimal point

  // This masks off the error bit of the high byte, then moves it left 
  // 8 bits and adds the low byte.
  tempData = (double)(((data_high & 0x007F) << 8) + data_low);
  tempData = (tempData * tempFactor)-0.01;
  float celcius = tempData - 273.15;
  
  // Returns temperature un Celcius.
  return celcius;
}



La conexión (por su puesto agreguen el LCD Shield sobre el arduino):




Librerías extra usadas:


Video con los sensores funcionando






miércoles, 10 de mayo de 2017



Arduino - Dos termómetros MLX90614 con LCD 20x4 YwRobot


En una entrada hace un par de días Leer multiples MLX90614 (termómetros infrarrojos) cambiando sus direcciones  vimos como enviar las le... thumbnail 1 summary


En una entrada hace un par de días Leer multiples MLX90614 (termómetros infrarrojos) cambiando sus direcciones vimos como enviar las lecturas de dos MLX90614 hacia el Monitor serie del Arduino IDE. Sin embargo en muchas ocasiones será preferible enviar los datos a una LCD que este instalada en el lugar de uso. Para este ejemplo usamos dos MLX90614 y una LCD 20x4 YwRobot Arduino LCM1602 IIC V1.

Primero cambiaremos las direcciones de los dos termómetros infrarrojos MLX90614. Para ello seguir emos los pasos correspondientes descritos en esta entrada Leer multiples MLX90614 (termómetros infrarrojos) cambiando sus direcciones, al igual que en esa entrada usaremos las direcciones 0x50 y 0x55.

Para este ejemplo cambiaremos la librería que lee los MLX90614 ya que la otra tiene conflictos con la librería de la LCD.

Una vez cambiadas las direcciones el código es bastante sencillo, queda como sigue:

#include <Wire.h>
#include <SparkFunMLX90614.h>
#include <LiquidCrystal_I2C.h>

IRTherm termometro1;   //Termómetro 1
IRTherm termometro2;   //Termómetro 2
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);   //LCD 20x4

void setup() 
{
  Serial.begin(9600);
  termometro1.begin(0x50);   //Inicia el termómetro con dirección 0x50
  termometro2.begin(0x55);   //Inicia el termómetro con dirección 0x55
  termometro1.setUnit(TEMP_C);   //Celcius como unidad del termómetro 1
  termometro2.setUnit(TEMP_C);   //Celcius como unidad del termómetro 2
  lcd.begin(20,4);   //Inicia la LCD
}

void loop() 
{
  if (termometro1.read())
  {
    lcd.setCursor(2, 1);
    lcd.print("Termo1");
    lcd.setCursor(3, 2);
    lcd.print(String(termometro1.object(), 0));   //Imprime el valor del termómetro 1
    lcd.print((char)223);   //para escribir el caracter º
    lcd.print("C");
  }

  if (termometro2.read())
  {
    lcd.setCursor(12, 1);
    lcd.print("Termo2");
    lcd.setCursor(13, 2);
    lcd.print(String(termometro2.object(), 0));   //Imprime el valor del termómetro 2
    lcd.print((char)223);
    lcd.print("C");
  }

  delay(1000);   //Espera 1 segundo para las proximas lecturas
}


La conexión de los componentes necesarios queda así:

Nota. No he realizado el cálculo de consumo de corriente, simplemente he decidido colocar una batería como alimentación externa para los termómetros, sí será necesario si se conectan varios termómetros más.

Nota. Recuerden que el uso de este LCD Shield facilita enormemente la conexión ya que todo se reduce a solamente 4 pines (SDA,SCL,VCC y GND).




El resultado:




Librerías extra usadas:

Si quieres mostrar caracteres especiales como acentos, eñes o propios de tu industria o aplicación ve esta estrada para saber como crearlos: YwRobot Arduino LCM1602 IIC V1 - Mostrar ñ, acentos y otros






martes, 9 de mayo de 2017



Xiaomi Piston Fresh Edition Review en Español - Por solo $6.00







lunes, 8 de mayo de 2017



Arduino - KEYES KY-008 Laser Transmitter Module


Recomendable comprar el modulo ya listo solo para conectar a los pines correspondientes y evitar tener que estar conectando otros ele... thumbnail 1 summary


Recomendable comprar el modulo ya listo solo para conectar a los pines correspondientes y evitar tener que estar conectando otros elementos



El código es bastante sencillo al igual que la conexión. Para este ejemplo el pin (-) sobre el modulo va al GND del Aeduino y el pin (S) sobre el modulo va al pin 12 del Arduino.

Desde el pin 12 se le estaría indicando al modulo laser que se encienda y apague. Conectar el modulo, después pegar el siguiente código y ejecutar:

void setup ()
{
   pinMode (12, OUTPUT);   //Establecer el pin 12 como salida para enviar
                           //la señal de encendido apagado al laser
}

void loop () {
   digitalWrite (12, HIGH);  //Encender el laser
   delay (1000);             //Dejar encendido 1 segundo
   digitalWrite (12, LOW);   //Apagar el laser
   delay (1000);             //Dejar apagado 1 segundo
}


Video con una pequeña prueba, a apróximadamente 60 metros aun puede verse claramente (en el video la cámara no logra captarlo también como acon la vista)




domingo, 7 de mayo de 2017



Arduino - Leer multiples MLX90614 (termómetros infrarrojos) cambiando sus direcciones


Realizar un control de temperatura con termómetro infrarrojo puede requerir de más de un punto de medición, pero, ¿Cómo hacerlo en Ard... thumbnail 1 summary

Realizar un control de temperatura con termómetro infrarrojo puede requerir de más de un punto de medición, pero, ¿Cómo hacerlo en Arduino si solamente se cuenta con un pin SDA y uno SCL?. En general se requieren dos pasos:

- Cambiar la Slave address de cada sensor
- Leer los sensores uno a uno con su respectiva Slave address

Tomar en cuenta que la Slave address de fabrica de los MLX90614 es 0x5A, además tienen una Universal 0x0 en caso de que se la cambies y olvides cual le has colocado. Si se conectan ambos sensores con la dirección 0x5A simplemente el Arduino no muestra las lecturas en el Serial monitor.


Si no tienen la libreria I²Cmaster que se usa la pueden descargar aquí: Librería I²Cmaster


Cambiando las direcciones

Para cambiar la dirección se debe hacer con los sensores uno por uno con el siguiente código:

#include <i2cmaster.h>

byte MLXAddr = 0x5A<<1;   // Nueva dirección 
//byte MLXAddr = 0;       // Dirección universal

void setup(){
 Serial.begin(9600);
 Serial.println("Iniciando...");
 
 i2c_init();                              //Inicializar i2c bus
 PORTC = (1 << PORTC4) | (1 << PORTC5);   //Pullups
 
 delay(5000);                    // Espera la conexión serial
 cambiarDirec(0x5A, 0x00);       // Cambia la dirección al nuevo valor, en este caso cambia a 0x50
}

void loop(){
}

//Función con comentarios originales de http://forum.arduino.cc
word cambiarDirec(byte NuevaDirec1, byte NuevaDirec2) {

 Serial.println("> Cambiar dirección");

 i2c_start_wait(0 + I2C_WRITE);    //send start condition and write bit
 i2c_write(0x2E);                  //send command for device to return address
 i2c_write(0x00);                  // send low byte zero to erase
 i2c_write(0x00);                  //send high byte zero to erase
 if (i2c_write(0x6F) == 0) {
   i2c_stop();                     //Release bus, end transaction
   Serial.println("  Dato borrado");
 }
 else {
   i2c_stop();                     //Release bus, end transaction
   Serial.println("  Fallo borrando dato");
   return -1;
 }

 Serial.print("  Dato escrito: ");
 Serial.print(NuevaDirec1, HEX);
 Serial.print(", ");
 Serial.println(NuevaDirec2, HEX);

 for (int a = 0; a != 256; a++) {
   i2c_start_wait(0 + I2C_WRITE);  //send start condition and write bit
   i2c_write(0x2E);                //send command for device to return address
   i2c_write(NuevaDirec1);            // send low byte zero to erase
   i2c_write(NuevaDirec2);            //send high byte zero to erase
   if (i2c_write(a) == 0) {
     i2c_stop();                   //Release bus, end transaction
     delay(100);                   // then wait 10ms
     Serial.print("CRC correcto: 0x");
     Serial.println(a, HEX);
     return a;
   }
 }
 i2c_stop();                       //Release bus, end transaction
 Serial.println("CRC Correcto no encontrado");
 return -1;
}



Para hacerlo, conectar el sensor al Arduino:



en el siguiente fragmento de código sustituir las dos lineas donde esta 0x5A, con el primer sensor en lugar de 0x5A escribir 0x50



 ejecutar el código hasta ver en el Monitor serie lo siguiente:



con el segundo sensor en lugar de 0x5A escribir 0x50, ejecutar el código hasta ver en el Monitor serie lo siguiente:



Nota: si el Monitor serie solamente muestra lo siguiente y no avanza, 


entonces desconecten el sensor unos 5 segundos vuelvan a conectar el sensor y ejecuten nuevamente el código. Si esto tampoco funciona, entonces desconecten el sensor, ejecuten el código sin el sensor,  conectar el sensor y ejecuten nuevamente el código (En los siguientes pasos donde se ejecute código y no se obtengan resultados hagan los mismo)



Probando las nuevas direcciones

El siguiente código es para leer un solo sensor en una dirección especifica:

/**
 * Termómetro Infrarrojo MLX90614
 * por Jaime Patarroyo
 * basado en 'Is it hot? Arduino + MLX90614 IR Thermometer' por bildr.blog
 * 
 * Devuelve la temperatura en Celcius y Fahrenheit de un termómetro 
 * infrarrojo MLX90614, conectado a los pines TWI/I²C (en la tarjeta Wiring 
 * v1: 0 (SCL) y 1 (SDA) y en la tarjeta Wiring S: 8 (SCL) and 9 (SDA)).
 */

#include <i2cmaster.h>


int deviceAddress = 0x5A<<1;    // En la hoja técnica del MLX906114, 0x5A es 
                                // la dirección de comunicación I²C por defecto.
                                // Corra la dirección 1 bit a la derecha, la
                                // librería I²Cmaster solo necesita los 7 bits
                                // mas significativos para la dirección.

float celcius = 0;              // Variable que contiene la temperatura en Celcius.
float fahrenheit = 0;           // Variable que contiene la temperatura en Fahrenheit.

void setup() {
  Serial.begin(9600);           // Inicia la comunicación serial a 9600bps.

  i2c_init();                               // Inicia el bus i2c.
  PORTC = (1 << PORTC4) | (1 << PORTC5);    // Habilita ‘pullups’.
}

void loop() {
  celcius = temperatureCelcius(deviceAddress);  // Lee los datos del MLX90614
                                                // con la dirección dada,
                                                // los transforma en la
                                                // temperatura en Celcius y
                                                // la almacena en la variable
                                                // celcius.
  
  fahrenheit = (celcius*1.8) + 32;     // Convierte Celcius en Fahrenheit 
                                       // y almacena en la variable Fahrenheit.

  Serial.print("Celcius: ");           // Imprime ambas lecturas en el
  Serial.println(celcius);             // puerto serial.
  Serial.print("Fahrenheit: ");
  Serial.println(fahrenheit);
  Serial.println();

  delay(1000);                         // Espera un segundo antes de imprimir de nuevo.
}

float temperatureCelcius(int address) {
  int dev = address;
  int data_low = 0;
  int data_high = 0;
  int pec = 0;

  // Escribe
  i2c_start_wait(dev+I2C_WRITE);
  i2c_write(0x07);

  // Lee
  i2c_rep_start(dev+I2C_READ);
  data_low = i2c_readAck();       // Lee 1 byte y envía ack.
  data_high = i2c_readAck();      // Lee 1 byte y envía ack
  pec = i2c_readNak();
  i2c_stop();

  // Esto convierte los bytes altos y bajos juntos y procesa la temperatura.
  double tempFactor = 0.02;       // 0.02 grados por LSB (medida de
                                  // resolución del MLX90614).
  double tempData = 0x0000;       
  int frac;                       // Datos después del punto decimal.

  // Esto oculta el error del byte alto y lo mueve a la izquierda
  // 8 bits y agrega el byte bajo.
  tempData = (double)(((data_high & 0x007F) << 8) + data_low);
  tempData = (tempData * tempFactor)-0.01;
  float celcius = tempData - 273.15;
  
  // Retorna la temperatura en Celcius.
  return celcius;
}


en el siguiente fragmento de código sustituir la linea donde esta 0x5A, con el primer sensor en lugar de 0x5A escribir 0x50 ejecutar para probar y con el segundo sensor en lugar de 0x5A escribir 0x55 ejecutar para probar.



si obtienen lecturas erróneas como estas:


recuerden desconectar el sensor, ejecutar código, volver a conectar........, y obtendrán las lecturas correctas:





Obteniendo lecturas de ambos sensores



El siguiente código es para obtener la lectura de ambos sensores indicado sus direcciones respectivas:

#include <i2cmaster.h>

int direccionSensor1 = 0x50<<1;   // Dirección del sensor 1 
int direccionSensor2 = 0x55<<1;   // Dirección del sensor 2

float celcius1 = 0;   // Guardara temperatura 1 en Celcius
float celcius2 = 0;   // Guardara temperatura 2 en Celcius

void setup()
{
  Serial.begin(9600);                       // Comunicación serial en 9600bps.
  i2c_init();                               // Inicializar  i2c bus.
  PORTC = (1 << PORTC4) | (1 << PORTC5);    // Pullups.
}

void loop()
{
  celcius1 = temperaturaCelcius(direccionSensor1);   //Lee la temperatura para cada sensor y
  celcius2 = temperaturaCelcius(direccionSensor2);   //lo guarda en la respectiva variable
  
  /*fahrenheit1 = (celcius1*1.8) + 32;     // Sidesean convertir en Fahrenheit 
  fahrenheit2 = (celcius2*1.8) + 32;*/

  Serial.print("Sensor 1: ");    
  Serial.print(celcius1);       //Imprimir valor 1         
  Serial.print("ºC");           
  Serial.println();             //nueva linea
  Serial.print("Sensor 2: ");
  Serial.print(celcius2);       //Imprimir valor 2
  Serial.print("ºC");
  Serial.println();
  Serial.println();

  delay(1000);                         // Espera un segundo para tomar otro par de lecturas
}

//Función con comentarios originales de http://wiki.wiring.co
float temperaturaCelcius(int address) {
  int dev = address;
  int data_low = 0;
  int data_high = 0;
  int pec = 0;

  // Write
  i2c_start_wait(dev+I2C_WRITE);
  i2c_write(0x07);

  // Read
  i2c_rep_start(dev+I2C_READ);
  data_low = i2c_readAck();       // Read 1 byte and then send ack.
  data_high = i2c_readAck();      // Read 1 byte and then send ack.
  pec = i2c_readNak();
  i2c_stop();

  // This converts high and low bytes together and processes temperature, 
  // MSB is a error bit and is ignored for temps.
  double tempFactor = 0.02;       // 0.02 degrees per LSB (measurement 
                                  // resolution of the MLX90614).
  double tempData = 0x0000;       // Zero out the data
  int frac;                       // Data past the decimal point

  // This masks off the error bit of the high byte, then moves it left 
  // 8 bits and adds the low byte.
  tempData = (double)(((data_high & 0x007F) << 8) + data_low);
  tempData = (tempData * tempFactor)-0.01;
  float celcius = tempData - 273.15;
  
  // Returns temperature un Celcius.
  return celcius;
}

como ven el código ya tiene las dos direcciones que hemos indicado antes 0x50 y 0x55, la otra dirección que pueden probar para un tercer sensor es la que trae de fabrica 0x5A. Aparte de estas tres aun no he investigado como definir otras para conectar 4 o más sensores.

Conectamos los sensores


ejecutamos el código y veremos ambos valores en el Monitor serie:





Mira en esta entrada como mostrar las lecturas en una LCD 20x4: Dos termómetros MLX90614 con LCD 20x4 YwRobot






sábado, 6 de mayo de 2017



Cargar bateria de tablet sin cargador original