en compras
mayores a $750
Compras mayores a $750
Ordena el material de todo tu salón y obtén un descuento.
en compras
mayores a $750
Compras mayores a $750
Ordena el material de todo tu salón y obtén un descuento.
Muchas veces tenemos la necesidad de comunicar dos microcontroladores y para ello una de las mejores alternativas es el protocolo de comunicación I2C.
¿Que es i2c? Circuito inter-integrado (Inter-Integrated Circuit) es un bus serie de datos desarrollado en 1982 por Philips. Poco a poco fue aceptado por otros fabricantes hasta convertirse en un estándar.
El bus I2C requiere únicamente dos cables para su funcionamiento.
Se utiliza en muchas aplicaciones como la lectura de múltiples sensores con la ventaja de solo conectar 2 cables algunos módulos que funcionan bajo este protocolo se encuentran RTC DS3231, sensores de temperatura DHT11, Humedad DHT22, acelerometros/giroscopios MPU6050, pantallas LCD entre muchos mas.
El bus I2C por lo general está construido por un maestro y una serie de esclavos. Los maestros son los que determinan los tiempos y a que esclavo se dirigen los datos.
Tarjeta |
SDA |
SCL |
Arduino UNO |
A4 |
A5 |
Arduino NANO |
A4 |
A5 |
Arduino MEGA |
20 |
21 |
Para este ejemplo usaremos la librería "wire.h" por lo que deberemos incluirla en el programa que vamos a escribir.
Se utiliza para establecer comunicación con dispositivos I2C.
Dirección: la dirección del esclavo de 7 bits es opcional y si la dirección no se especifica, se une al bus como un maestro.
Esta función se usa para leer un byte que se recibió del dispositivo maestro o esclavo.
Wire.write()
Esta función se utiliza para escribir datos en un dispositivo esclavo o maestro.
Material
Para este ejemplo un arduino nano cumplirá la tarea como maestro y un arduino UNO (esclavo) sera el encargado de ejecutar tareas que el maestro le asigne.
Las tareas o procesos se controlaran con una maquina de estados, ese estado sera actualizado por el usuario.
El usuario podrá seleccionar 4 tareas diferentes desde el modulo touch de 4 canales. Los procesos se realizan con una función que acepta como parametro el tiempo de transición entre cada relevador.
void Proceso(int Tiempo)
Encenderá los relevadores (ch1 al ch4) dejando un tiempo de 200 ms entre cada cambio.
Encenderá los relevadores (ch1 al ch4) dejando un tiempo de 400 ms entre cada cambio.
Encenderá los relevadores (ch1 al ch4) dejando un tiempo de 800 ms entre cada cambio.
Detendrá todo el proceso, los procesos en este ejemplo no pueden ser interrumpidos a la mitad.
https://es.wikipedia.org/wiki/I%C2%B2C
https://www.arduino.cc/en/Reference/Wire
Dejar un comentario