jueves, 10 de marzo de 2016

Comunicación serie entre dos Arduinos


En este POST vamos a conectar dos Arduinos UNO Rev.3 a través de un puerto serie denominado “mySerial” que he creado mediante software, gracias a la librería  , en los pines digitales 10 (Recepción à RX) y 11 (Emisión à TX) de cada uno de los Arduinos. Es necesario realizar dos montajes, el del “Arduino Emisor”, que va a ser el que tiene conectado el pulsador (pin digital 4) y está alimentado a través del puerto USB de nuestro PC, y el del ”Arduino Receptor” que es el que tiene conectado el LED (pin digital 5) y que está alimentado directamente a través del pin Vin mediante los +5V que entrega el “Arduino Emisor”. Las masas (GND) de ambos Arduinos deben estar conectadas entre sí.
Diagrama de conexión serie RX/TX entre los Arduinos

Para realizar una comunicación serie unidireccional satisfactoria entre los dos Arduinos, simplemente tenemos que conectar el pin 11 (TX) del “Arduino Emisor” al pin 10 (RX) del “Arduino Receptor”, para posteriormente cargar los correspondientes programas. Si todo está correcto veremos que el LED conectado al “Arduino Receptor” permanecerá encendido mientras estemos presionamos el pulsador conectado al “Arduino Emisor”. Es un ejemplo muy sencillo al cual vosotros podéis ir añadiendo mayor número de componentes y que se ejecuten muchas más funciones (podéis intentar realizar una comunicación bidireccional entre los dos Arduinos). Para mayor información consultar los comentarios del código del programa.

Lista de Materiales:


·         2 Arduinos UNO Rev.3.

·         Cable USB tipo A-B.

·         Pulsador.

·         LED de 3mm (de cualquier color).

·         Resistencias de 220Ω y 10KΩ.

·         Protoboard.

·         Cables de conexión.


Código del programa:

·         Emisor serie (TX) :




·         Receptor serie (RX) :




Video:

18 comentarios:

  1. gracias!! funciono muy bien con arduino leonardo como receptor tambien. solo que no funciona conectando 5v del emisor al Vin de leonardo, asique lo conecte irecto a los 5v del legonardo.

    ResponderEliminar
  2. Una pregunta... A que distancia maxima se puede usar la comunicacion serial entre Arduinos. Tienes alguna pagina que proveea la informacion tecnica de Serial, I2C y SPI?

    ResponderEliminar
  3. Hola me podrías ayudar estoy realizando una simulación en Proteus con los dos condigos TX y RX pero en el receptor no menciona no ingresa al If(mySerial.available())

    ResponderEliminar
  4. Una pregunta, con dos arduinos mega tambien se puede verdad , solo que en la configuracion se utilizaran los pines RX y TX correspondientes a los que vengan en dicho arduino.

    ResponderEliminar
    Respuestas
    1. Eso es, aunque puedes utilizar cualquier pin para la comunicación serie si utilizas la librería SoftwareSerial.h. Saludos

      Eliminar
  5. y si quiero q el esclavo le responda al maestro como haria

    ResponderEliminar
  6. De la misma manera pero cambiando el rol de cada dispositivo. Tendrias que conectar RX1 a TX2 y RX2 a TX1. De esta manera los dos arduinos podrían leer y escribir con serial.read y serial.write respectivamente (o en su defecto el software serial que estes utilizando)

    ResponderEliminar
  7. Estimado, creo que usted me puede ayudar, estoy empezando en el mundo arduino y quiero transmitir 2 variables de temperatura y humedad inalambricamente, a traves de unos modulos de tx/rx HAC UM 96, que se conectan mediante puerto serial, el tema es que puedo enviar solo 1 dato a la vez EJ: si envio 56, el arduino receptor me indica que recibio solo 5 y el 6 lo representa con un simbolo.

    Me puedes ayudar con eso? creo que tengo que almacenar los datos obtenidos por el sensor, en una cadena, enviar 1 a la vez y recibirlos pero no tengo claridad como realizar,

    GRacias por tu ayuda

    ResponderEliminar
  8. hola muy bueno tu proyecto, pero quisiera saber si el esclavo le puede mandar una función al maestro y de el maestro a un modulo bluetooth para que se conecte con un celular andriod ??

    ResponderEliminar
  9. Hola si me funciono el proyecto pero como le puedo hacer para poner otro led

    ResponderEliminar
  10. Buenos dias, se podria usar otros pines digitales para esta transmision?

    ResponderEliminar
  11. si. Los que configures tu mediante softwareSerial

    ResponderEliminar
  12. Una duda...
    En la parte:

    mySerial.write('H'); // Enviamos 'H' por el puerto serie (TX)

    Estas convirtiendo la letra H en información en bytes, y en el ardudino receptor identifica esa información de bytes como H. Por lo tanto Yo puedo poner más letras para indicar más acciones.
    Estoy en lo correcto?
    Tiene algún tipo de sintaxis lo que va dentro de "mySerial.write()" (cierta cantidad de letras, numero signos)?

    ResponderEliminar
  13. Buenas tardes, si se puede enviar datos desde un arduino a varios arduinos por medio de Bluetooth?

    ResponderEliminar
    Respuestas
    1. Por supuesto que si, un maestro enviando a varios esclavos.

      Eliminar
  14. muy buena explicacion! me agrado lo probare, gracias!

    ResponderEliminar