Introducción
El RS-485, también conocido como EIA-485, se define como un sistema de bus diferencial multipunto; es perfecto para transmitir datos con alta velocidad a alcances de hasta 12 m. Una de sus características más importantes es que su par trenzado de cables reduce el ruido inducido en la línea de transmisión. Se pueden conectar múltiples receptores a dicha red en un bus lineal multipunto. Estas características hacen que el RS-485 sea útil en sistemas de control industrial y aplicaciones similares.
Lecturas previas
Te recomendamos que leas las siguientes entradas para entender el programa de este blog. Usamos las siguientes entradas del blog para hacer este ejemplo:
Cómo programar nuestro PLC industrial con Arduino IDECómo instalar las placas de Industrial Shields en Arduino IDE.
Requisitos
Para trabajar con comunicación TTL en serie, necesitará cualquiera de nuestros controladores lógicos programables para la automatización industrial:
Controladores Industrial Shields controllers: Wifi & Bluetooth Controller Family, Ethernet Controller Family, GPRS / GSM Controller Family.
Hardware
Para hacer la conexión entre los dispositivos seguimos el siguiente esquema.
Software
El siguiente código tiene la función de comunicar al Maestro y al Esclavo enviando la instrucción de activar el relé para encender la bomba de agua.
Un ejemplo de la comunicación de Simplecomm Master:
#include <RS485.h>
#include <SimpleComm.h>
// Create SimplePacket for sending and receiving data
SimplePacket packet;
// Define master address
uint8_t masterAddress = 0;
// Define slave address to communicate with
uint8_t slaveAddress = 1;
// Value to send as packet data
int value = 5;
////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(9600L);
// Start RS485
RS485.begin(19200L);
RS485.setTimeout(20);
// Start SimpleComm
SimpleComm.begin(masterAddress);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
static unsigned long lastSent = millis();
// Send packet periodically: once per second
if (millis() - lastSent >= 10000) {
// Set request packet data
packet.setData(value);
// Send request to slave
if (SimpleComm.send(RS485, packet, slaveAddress)) {
lastSent = millis();
Serial.print("Sent value: ");
Serial.println(value);
}
}
// Get responses
if (SimpleComm.receive(RS485, packet)) {
// Update value from the response
value = packet.getInt();
Serial.print("Received value: ");
Serial.println(value);
}
}
Un ejemplo de la comunicación de Simplecomm Slave:
#include <RS485.h>
#include <SimpleComm.h>
// Create SimplePacket for sending and receiving data
SimplePacket request;
SimplePacket response;
// Define slave address to communicate with
uint8_t slaveAddress = 1;
////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(9600L);
// Start RS485
RS485.begin(19200L);
RS485.setTimeout(20);
// Start SimpleComm
SimpleComm.begin(slaveAddress);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
// Get requests
if (SimpleComm.receive(RS485, request)) {
int value = request.getInt();
Serial.print("Received value: ");
Serial.println(value);
if ( value==5){
digitalWrite(R0_8,HIGH);
delay(5000);
digitalWrite(R0_8,LOW);
}
// Process value
//value++;
// Send response to the request packet source
response.setData(value);
if (SimpleComm.send(RS485, response, request.getSource())) {
Serial.print("Sent value: ");
Serial.println(value);
}
}
}
Suscríbete a nuestro YouTube channel si quieres estar al día de nuestos tutoriales.