Para esta experiencia, realizaremos la lectura de un potenciómetro que lo realizará un Arduino que tendrá la función de un nodo esclavo en una comunicación tipo I2C conectado a un Arduino que hará el papel de un maestro que hará una comunicación serial con una computadora que graficará el cambio de voltaje en el potenciómetro en tiempo real.
# PIN A0 : Arduino UNO del Esclavo => PIN CENTRAL : Potenciómetro
# GND : Arduino UNO del Maestro => EXTREMO : Potenciómetro => GND : Arduino UNO del Esclavo
# 5V : Arduino UNO del Maestro => EXTREMO : Potenciómetro => 5V : Arduino UNO del Esclavo
# PIN A4 (SDA) : Arduino UNO del Maestro => A4 (SDA) : Arduino UNO del Esclavo
# PIN A5 (SCL) : Arduino UNO del Maestro => A5 (SCL) : Arduino UNO del Esclavo
# PIN A4 (SDA) : Arduino UNO del Maestro => A4 (SDA) : Arduino UNO del Esclavo
# PIN A5 (SCL) : Arduino UNO del Maestro => A5 (SCL) : Arduino UNO del Esclavo
El programa usado para el Esclavo es el siguiente: (Para obtener más información sobre este programa entrar al siguiente link: "Comunicación maestro / esclavo: Parte 3 (Comunicación I2C - Introducción)")
/* PROGRAMA DE PRUEBA DE COMUNICACION ENTRE DOS PUNTOS: USO DE LA LIBRERIA WIRE (PROGRAMA PARA EL ESCLAVO) MAESTRO: Arduino UNO (1) ESCLAVO: Arduino UNO (2) CONEXION: A4 (Arduino UNO (1) / SDA - MAESTRO): A4 (Arduino UNO (2) / SDA - ESCLAVO) A5 (Arduino UNO (1) / SCL - MAESTRO): A5 (Arduino UNO (2) / SCL - ESCLAVO) Potenciometro: Pin A0 (Arduino UNO(2) - ESCLAVO) GND: Conectar los dos GND VCC: Conectar los dos 5V En el siguiente programa probaremos la comunicacion Maestro / Esclavo. El Maestro permite la visualizacion de los datos obtenidos de leer el potenciometro que va conectado al Esclavo. Para correr el programa se necesita la libreria Wire (Wire.h) Autor: Renato H. http://beetlecraft.blogspot.pe/ El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor */ #include <Wire.h> // Libreria de manejo de red I2C int POT = A0; // Pin de entrada de senal del potenciometro int POT_valor = 0; // Variable de almacenamiento del porcentaje del potenciometro int porcentaje; // Variable de conversion a porcentaje void setup() { Wire.begin(1); // Unirse a la red I2C (Esclavo con direccion "1") Wire.onRequest(escritura); // Registro de evento de la funcion "escritura" } void loop() { delay(100); } void escritura(){ POT_valor = analogRead(POT); // Lee el valor del sensor (Rango de 0 a 1023) porcentaje = map(POT_valor,0,1023,0,100); // Porcentaje del rango de 0 a 100% // 100 corresponde a 5V y 0 a 0V Wire.write(porcentaje); // Escritura por I2C del porcentaje de voltaje }
En caso del Maestro tenemos el siguiente programa: (Para obtener más información sobre este programa entrar al siguiente link: "Tercera parte: Comunicación serial con Arduino y Processing")
Los resultados tomando el Processing se muestran a continuación:
Autor: /* PROGRAMA DE PRUEBA DE COMUNICACION ENTRE DOS PUNTOS: USO DE LA LIBRERIA WIRE (PROGRAMA PARA EL MAESTRO) MAESTRO: Arduino UNO (1) ESCLAVO: Arduino UNO (2) CONEXION: A4 (Arduino UNO (1) / SDA - MAESTRO): A4 (Arduino UNO (2) / SDA - ESCLAVO) A5 (Arduino UNO (1) / SCL - MAESTRO): A5 (Arduino UNO (2) / SCL - ESCLAVO) Potenciometro: Pin A0 (Arduino UNO(2) - ESCLAVO) GND: Conectar los dos GND VCC: Conectar los dos 5V En el siguiente programa probaremos la comunicacion Maestro / Esclavo. El Maestro permite la visualizacion de los datos obtenidos de leer el potenciometro que va conectado al Esclavo. Los datos se veran por medio de una interfaz en Processing. Para correr el programa se necesita la libreria Wire (Wire.h) Autor: Renato H. http://beetlecraft.blogspot.pe/ El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor */ #include <Wire.h> // Libreria de manejo de red I2C int POT; // Variable de almacenamiento del valor leido del potenciometro void setup() { Wire.begin(); // Unirse a la red I2C (Maestro) Serial.begin(9600); // Configuracion del puerto serial a 9600 baudios } void loop(){ Wire.requestFrom(1,1); // Pedido de informacion del Esclavo 1 de 1 byte while (Wire.available()) { // Verificacion que el puerto serial virtual recibe datos POT = Wire.read(); // Lectura de datos del I2C // Mensaje de muestra del porcentaje del voltaje leido del potenciometro Serial.print('P'); // Cabecera de inicio de comunciacion serial Serial.write(lowByte(POT)); // Envia el byte bajo Serial.write(highByte(POT)); // Envia el byte alto } delay(100); }En caso del programa en Processing tenemos lo siguiente: (Para obtener más información sobre este programa entrar al siguiente link: "Tercera parte: Comunicación serial con Arduino y Processing")
/* PROGRAMA DE PRUEBA DE COMUNICACION SERIAL CONEXION: Arduino (A0) : Pin central potenciometro Arduino (GND): Pin extremo potenciometro Arduino (5V) : Pin extremo potenciometro El siguiente programa nos ayuda a realizar la lectura del votlaje del potenciometro y mostrarlo por puerto serial para mostrarlo por Processing cambiando el ancho del rectangulo mostrado en pantalla. Autor: Renato H. http://beetlecraft.blogspot.pe/ El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor */ import processing.serial.*; // Declaracion inicial para comunicacion serial Serial Puerto; // Crear el puerto serial char cabecera = 'P'; // Letra asignada como cabecera del mensaje int POT; // Variable de lectura del puerto serial void setup() { size(100, 100); // Porte de la pantalla Puerto = new Serial(this, "COM4", 9600); // Inicio de la comunicacion a 9600 bps del puerto COM4 } void draw() { if ( Puerto.available() >= 3) { // Verifica que exista 3 bytes en el puerto serial if (Puerto.read() == cabecera) { // Verifica que "P" sea la cabecera del mensaje POT = Puerto.read(); // Lectura del puerto POT = Puerto.read() * 256 + POT; // Conversion del mensaje de 16 bits a integer println("Valor del potenciometro: " + POT); // Muestra el dato en el puerto serial } } // Dibujo del rectangulo background(167); // Rellena el espacio de trabajo de color plomo fill(0); // Llena el espacio del rectangulo dibujado en negro rect(0, 0, 100, POT); // Dibuja el rectangulo con los valores obtenidos de la lectura del puerto }Los resultados tomando sólo en cuenta el Monitor Serial del Arduino IDE se muestran a continuación:
Los resultados tomando el Processing se muestran a continuación:
No hay comentarios:
Publicar un comentario