Cree su sensor I2C - Calendae - Calendae | Informática, Electrónica, CMS, Ciberseguridad

Cree su sensor I2C – Calendae

Hola, un placer verte por aquí. Te habla Jordi Oriol y en esta ocasión te voy a contar sobre Cree su sensor I2C – Calendae

Desde Frambuesa pi no tiene un ADC integrado (Conversor analógico a digital) para leer el voltaje de la mayoría de los sensores, su mejor opción es agregar chips I2C y módulos ADC a su proyecto.

Paweł Spychalski enfrentó este problema mientras construía su propio Estación meteorológica que se basa en Raspberry Pi. Recopila varios datos y los muestra en la página web dedicada y en la aplicación de Android. Cada pocos meses intente agregarle un nuevo sensor. La última vez fue un sensor de luz diurna. Agregó este sensor a su sistema usando ATtiny85 y se conectó a través del bus I2C.

ATtiny85 es miembro de Atmel tinyAVR series que tiene un núcleo de 8 bits y menos funciones, menos pines de E / S y menos memoria que otras series de AVR.

los Circuito interintegrado El protocolo (I2C) es un protocolo diseñado para permitir que varios circuitos integrados digitales «esclavos» («chips») se comuniquen con uno o más chips «maestros». Como la interfaz periférica en serie (SPI), está diseñado solo para comunicaciones de corta distancia dentro de un solo dispositivo. Al igual que las interfaces seriales asíncronas (como RS-232 o UART), solo requiere dos cables de señal para intercambiar información.

I2C usa solo dos bidireccionales Drenaje abierto líneas, Serial Data Line (SDA) y Serial Clock Line (SCL), arrancados con resistencias. Los voltajes típicos utilizados son + 5V o + 3.3V, aunque se permiten sistemas con otros voltajes.

Ejemplo de un diagrama de circuito interintegrado (I²C) con un maestro (un microcontrolador) y tres nodos esclavos

La mayoría de los desarrolladores utilizan I2C para conectarse a sensores con la ayuda de Biblioteca «Wire» de Arduino o «herramientas i2c«En la Pi, pero es raro ver a alguien construyendo el dispositivo esclavo I2C. El diseño de Paweł usa TinyWireS biblioteca, una biblioteca SPI en modo esclavo e I2C para proyectos AVR ATtiny Arduino.

Este diagrama muestra cómo construir un convertidor de analógico a digital usando ATtiny85 y conectarlo a cualquier dispositivo (Raspberry Pi, Arduino) usando el bus I2C. Aquí se utilizó fotorresistencia, pero cualquier medidor analógico servirá: temperatura, potenciómetro, humedad …

ATtiny85 conectado directamente a Raspberry Pi a través de I2C, fotoresistor desplegable de 10kOhm conectado a ATtiny85 y LED de señal.

ATtiny85 conectado directamente a Raspberry Pi a través de I2C, fotoresistor desplegable de 10kOhm conectado a ATtiny85 y LED de señal.

Para leer los datos puede utilizar este código. ATtiny envía la medición actual como dos valores de 8 bits. Primero los bits más antiguos, luego los 8 bits más recientes.

Wire.requestFrom(0x13, 2);    // request 2 bytes from slave device #0x13

int i =0;
unsigned int readout = 0;

while (Wire.available())  // slave may send less than requested
 byte c = Wire.read(); // receive a byte as character

 if (i == 0) 
  readout = c;
  else 
  readout = readout << 8;
  readout = readout + c;
 

 i++;


Serial.print(readout);

Para hacer este proyecto necesita usar Arduino IDE 1.6.6., Biblioteca TinyWireS, placa ATtiny45 / 85, más un oscilador interno de 1MHz.

Temporizador de vigilancia ATtiny se detiene cada pocos minutos, mide el voltaje, lo filtra y lo almacena. Cada vez que se solicita la operación de lectura, el último valor ADC filtrado (10 bits como 2 bytes). El soporte I2C es proporcionado por la biblioteca TinyWireS que configura ATtiny USI (Interfaz serial universal) como esclavo I2C.

/**
* This function is executed when there is a request to read sensor
* To get data, 2 reads of 8 bits are required
* First requests send 8 older bits of 16bit unsigned int
* Second request send 8 lower bytes
* Measurement is executed when request for first batch of data is requested
*/
void requestEvent() 
 TinyWireS.send(i2c_regs[reg_position]);

 reg_position++;
 if (reg_position >= reg_size) 
  reg_position = 0;
 


/*
* Setup I2C
*/
TinyWireS.begin(I2C_SLAVE_ADDRESS);
TinyWireS.onRequest(requestEvent); //Set I2C read event handler

Brillante de día, oscuro de noche

Esta fantástica estación meteorológica y su necesidad de un sensor de luz natural son solo un ejemplo. Lo sorprendente es que ahora puede construir nuevos sensores I2C e introducir nuevos módulos en sus diseños fácilmente siguiendo los pasos de Paweł.

Para más detalles sobre este proyecto puede consultar Github y la estación meteorológica sitio web.

Deberías compartir en en tu Twitter y Facebook para que tus amigos lo flipen

??? ? ? ???

Comparte