miércoles, 18 de mayo de 2016

Comunicación RS-485 simplex entre dos Arduinos con módulos MAX485


Hoy os voy a mostrar cómo trabajar con uno de los estándares de comunicación en bus de la capa física del Modelo OSI denominado RS-485, muy utilizado en las comunicaciones industriales debido a su robustez, fácil implementación y buenas prestaciones. Está definido como un sistema de bus diferencial multipunto, es ideal para transmitir a altas velocidades sobre largas distancias (35 Mbit/s hasta 10 metros y 100 kbit/s en 1200 metros) y a través de canales ruidosos, ya que el par trenzado reduce los ruidos que se inducen en la línea de transmisión, admitiendo 32, 128 o 254 estaciones en un solo par.  La transmisión diferencial permite alcanzar mayor distancia con una notable inmunidad al ruido, siempre que el bus de comunicación conserve las características de bus balanceado dando la posibilidad de una configuración multipunto. La norma RS-485 indica que cada uno de sus nodos se conecta a la línea de transmisión formando una cadena conocida como topología en Bus. Cada elemento o nodo de la red (transmisor o driver y receptor) se conecta a la línea de transmisión mediante unos cables de enlace cortos. Por sus características físicas, este tipo de topología es el más sencillo que se puede implementar. La interface con la topología tipo Bus puede ser diseñada para una comunicación unidireccional (simplex), dual simultanea (full-duplex) o dual no simultánea (half-duplex).

Ejemplo de comunicación industrial con protocolo RS-485

El módulo MAX485 RS485-TTL tiene acceso a todos los pines del MAX485 que incorpora y contiene todos los componentes adicionales, tales como resistencias o condensadores, necesarios para su correcto funcionamiento y control. Los pines A y B se pueden conectar también desde la bornera. Este módulo nos permite establecer una interfaz RS-485 a Serie TTL para trabajar con los pines RX y TX de Arduino como si de una simple comunicación serie se tratara pero respetando el protocolo de comunicación RS-485. Las salidas A y B son por donde se envían los datos, B es la negación de A, es decir, se envían los mismos datos pero en la línea B están negados, de esta forma se pueden restar ambas señales y eliminar el ruido y quedarnos solo con la señal de datos. El encargado de esta transmisión diferencial es el  integrado MAX485.

Módulo MAX485 RS485-TTL

En este POST vamos a comunicar dos Arduinos de manera unidireccional (simplex) a través de módulos MAX485 RS485-TTL, por lo que en este caso un Arduino se comporta solo como transmisor y el otro solo como receptor, a nivel de programación es como si estuviéramos trabajando con una comunicación serial, pero en un solo sentido (uno envía y el otro solo recibe datos). El modulo conectado al Arduino transmisor solo va a trabajar como transmisor, es decir,  se tienen que conectar a +5V los pines RE y DE para que el modulo sepa que las salida A y B se van a comportar como salida de datos.  Desde el Arduino transmisor se envía el valor mapeado del potenciómetro (de 0 a 254), dependiendo de la posición en la que se encuentre su mando de control, desde el pin TX de Arduino hacia el pin DI (Data Input) del módulo y este  transmitirá los datos por los pines A y B hacia el módulo del Arduino Receptor. El módulo conectado al Arduino receptor solamente va a trabajar como receptor y para ello debemos de conectar los pines RE y DE del módulo a GND, y los datos recibidos por A y B estarán presentes en el pin RO (Receiver Output) del módulo, por lo que conectando el pin RO del módulo al RX de nuestro Arduino receptor podemos leer el dato recibido y en función de su valor (entre 0 y 254) brillará un LED, que tenemos conectado a una salida digital PWM de Arduino, con una intensidad concreta, desde permanecer apagado hasta conseguir un brillo máximo del LED cuando movemos el mando del potenciómetro del Arduino transmisor de un límite mecánico al otro. Solo dos cables (salidas A y B de los módulos MAX485 RS485-TTL) unirán a los Arduinos, pero teniendo en cuenta que si la distancia es larga se recomienda usar cable trenzado para eliminar interferencias como el ruido. Se han habilitado a través de la librería   nuevas conexiones serie TX (pin 3) y RX (pin 2) dentro de los programas que cargaremos a los dos Arduinos para poder dejar libres las conexiones TX (pin 1) y RX (pin 0) que trae configuradas el Arduino por defecto para comunicarse a través del puerto serie, puesto que son utilizadas a la hora de cargar los programas y de comunicarse con el monitor serie del IDE de Arduino, produciendo ciertas incompatibilidades al comunicarse con el módulo MAX485 RS485-TTL. Para una mayor información os recomiendo revisar los comentarios realizados dentro de cada uno de los programas.



Lista de Materiales:


·         2 Arduinos UNO Rev.3.

·         Cable USB tipo A-B.

·         2 Módulos MAX485 RS485-TTL.

·         Potenciómetro lineal de 10KΩ.

·         Resistencia de 220Ω.

·         LED de 3mm de cualquier color (válido de 5mm también).

·         Batería de 12VDC (DC 12300).

·         Batería de 9VDC con clip para Jack de 3,5mm macho.

·         2 Protoboards.

·         Cables de conexión.



Código del programa:

·         Transmisor_simplex_RS485:





·         Receptor_simplex_RS485:



Video:

martes, 3 de mayo de 2016

Detector de metal con sensor de proximidad inductivo PNP y un zumbador


En el POST de hoy vamos a trabajar con el sensor de proximidad inductivo PNP LJ12A3-4-Z/BY, capaz de detectar todos los metales que sean de tipo ferroso, que son aquellos que en su composición tienen principalmente hierro, como el acero (mezcla de hierro  con un poco de carbono ) o el hierro puro. Este tipo de sensores de proximidad es muy utilizado en la industria para contar objetos metálicos o para conocer su posición en un determinado momento, mejorando así la velocidad de los procesos industriales sin que tenga que intervenir ningún operario.

Sensor de proximidad inductivo PNP LJ12A3-4-Z/BY

El funcionamiento de este sensor es muy simple, es decir, en presencia de metales ferrosos la corriente que circula por el hilo conductor, va a  generar un campo magnético alrededor del mismo conmutando la salida del sensor. Como la salida del sensor es normalmente abierta (NO) siempre se encontrará a NIVEL BAJO hasta que conmute cambiando a NIVEL ALTO (salida PNP, si fuese NPN trabajaría al revés, es decir, pasaría de NIVEL ALTO a NIVEL BAJO en la conmutación), que es cuando se activará el zumbador que tenemos conectado a nuestro Arduino. A continuación os muestro las principales características de este sensor.

Principales características del sensor LJ12A3-4-Z/BY


Lista de Materiales:

·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Sensor inductivo de proximidad PNP (LJ12A3-4-Z/BY).

·         Zumbador piezoeléctrico (Buzzer).

·         Protoboard.

·         Cables de conexión.


Código del programa:



Video: