Placa RS485 y Openmote B

Saca el máximo partido a tu openmote con la comunicación RS485
17 de febrero de 2022 por
Placa RS485 y Openmote B
Boot & Work Corp. S.L., Fernandez Queralt Martinez

Introducción

La placa principal de OpenMote-B incluye un puerto de expansión (8 pines con una separación de 2,54 mm) que puede utilizarse para la depuración o para conectar placas hijas como la placa de sensores de OpenMote-B. La placa de expansión incluye un VCC (2,5V) y un pin GND, así como seis pines configurables.

En esta entrada del blog, vamos a utilizar tres de estos seis pines configurables para conectar una placa Openmote B con un PLC basado en Arduino a través de RS485. 

Últimas publicaciones

Your Dynamic Snippet will be displayed here... This message is displayed because you did not provided both a filter and a template to use.

Requisitos

  1. Arduino based PLC >>>

  2. Openmote B board >>>


  3. Cables 

  4. Max485 de convertidor TTL a RS485

  5. Power supply >>>

  6. Cable tipo B para programar el PLC basado en Arduino

1. Cómo conectar la placa openmote B a un convertidor MAX485

En primer lugar, vamos a conectar los cables como se muestra en la siguiente imagen.

 Ten en cuenta que las antenas y las baterías no son necesarias en el openmote. Además, alimenta tu PLC basado en Arduino.

Conexión de los cables - RS485 & Placa Openmote B

2. Código Arduino

Entonces, necesitaremos tener el IDE de Arduino instalado en nuestro ordenador, y también el Placas de Industrial Shields para programar nuestro PLC basado en Arduino.

Así que:
1- Abre el IDE de Arduino.

2- Ve al Menú > Herramientas > Placa > Selecciona tu placa de Industrial shields.

3- Ve al Menú > Herramientas > Modelo > Selecciona el modelo de tu placa industrial shields.

4- Ve al Menú > Herramientas > Puerto > Y selecciona el que vas a conectar a tu PLC.

5- Finalmente, pega el código de abajo y sube el sketch a la placa Arduino.

/*
   Copyright (c) 2017 Boot&Work Corp., S.L. All rights reserved
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU Lesser General Public License for more details.
   You should have received a copy of the GNU Lesser General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#if defined(HAVE_RS485)
#include <RS485.h>
#else
#define RS485 Serial2
#endif
#define RATE          9600UL
#define PERIOD        1000
#define DUPLEX        HALFDUPLEX
#define LEDS_ENABLED  0
#define SEND_LN       0
#if LEDS_ENABLED
#define LED_BLINK     20
#define TX_LED        Q0_0
#define RX_LED        Q0_1
#endif
unsigned long lastSent = 0;
unsigned long txPinStart = 0;
unsigned long rxPinStart = 0;
////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600L);
  Serial.println("rs485-periodic-sender started");
#if LEDS_ENABLED
  pinMode(TX_LED, OUTPUT);
  pinMode(RX_LED, OUTPUT);
#endif
  RS485.begin(RATE, DUPLEX);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
#if LEDS_ENABLED
  updateLeds();
#endif
  if (millis() - lastSent > PERIOD) {
    tx();
  }
  //rx();
}
#if LEDS_ENABLED
////////////////////////////////////////////////////////////////////////////////////////////////////
void updateLeds() {
  updateLed(TX_LED, txPinStart);
  updateLed(RX_LED, rxPinStart);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void updateLed(int pin, unsigned long startTime) {
  if (millis() - startTime > LED_BLINK) {
    digitalWrite(pin, LOW);
  }
}
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////
void tx() {
  static uint8_t counter = 0;
  RS485.write(counter + '0');
#if SEND_LN
  RS485.write('\r');
  RS485.write('\n');
#endif
  lastSent = millis();
#if LEDS_ENABLED
  digitalWrite(TX_LED, HIGH);
  txPinStart = millis();
#endif
  Serial.print("TX: ");
  Serial.println(counter, HEX);
  counter = (counter + 1) % 10;
  RS485.flush();
}

////////////////////////////////////////////////////////////////////////////////////////////////////
void rx() {
  if (RS485.available()) {
    byte in = RS485.read();

#if LEDS_ENABLED
    digitalWrite(RX_LED, HIGH);
    rxPinStart = millis();
#endif

    Serial.print("RX: ");
    Serial.println(in, HEX);
  }
}

Si abres el monitor Serial, verás lo que está enviando: un contador de 0 a 9.

3. Código Openmote B

a. En primer lugar, visita esta entrada del blog y ve al segundo punto llamado: 2. CÓMO DESCARGAR ARCHIVOS OPENMOTE B

b. Una vez en la lista, necesitaremos instalar docker-compose. Por favor, instálalo desde  here >>>

c. Luego, dentro de la carpeta test, está la carpeta llamada test-rs485-rx, que será el proyecto que vamos a ejecutar. to execute.

Así, desde la carpeta openmote-fw/, ejecutaremos el siguiente comando:

docker-compose run --rm openmote test-rs485-rx


d. Por último, instala la pantalla si no la tienes:

sudo apt update
sudo apt install screen


Y comprueba cómo recibe el contador de 0 a 9 que estamos enviando a través de nuestro PLC basado en Arduino:

screen /dev/ttyUSB1 115200

contador de 0 a 9 - RS485 &amp; placa Openmote B

Presiona Ctrl+a y \N para salir de la pantalla.

 Asegúrate de que la tasa de baudios uart0 del código openmote es la misma que la tasa de baudios del comando de ejecución de pantalla. Y que la tasa de baudios uart1 del código openmote es la misma que la tasa de baudios RS485 del código Arduino.

Buscar en nuestro blog

Placa RS485 y Openmote B
Boot & Work Corp. S.L., Fernandez Queralt Martinez 17 de febrero de 2022
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>