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
Requisitos
- Arduino based PLC >>>
- Openmote B board >>>
- Cables
- Max485 de convertidor TTL a RS485
- Power supply >>>
- 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.
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.
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
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.
Placa RS485 y Openmote B