Instalación Inicial
ARDUINO IDE
Arduino IDE is the Original platform to program Arduino boards. This cross-platform application is available on Windows, macOS and Linux and
under
the GNU General Public License
Arduino IDE supports C and C++ code structuring. Industrial Shields recommend using Arduino IDE to
program
Arduino Based PLC’s, but any Arduino compatible software are compatible with Industrial Shields Controllers.
A parte de todo esto, Industrial Shields brinda la posibilidad de seleccionar tu propio PLC basado en Arduino en su Arduino IDE y compilar sus bocetos para los diferentes PLC's
Descargar el Arduino IDE 1.8.6
Entradas y Salidas
ENTRADAS ANALÓGICAS
La variación de voltaje entre –Vcc (o GND) y , +Vcc, puede tomar cualquier valor. Una salida analógica proporciona una medición codificada en forma de un valor digital con un número de N-Bits. En I/O digital y analógica hay una autoaislamiento, por lo que es posible conectarlos a una fuente de alimentación diferente a 24 V
Entrada:
Entradas analógicas (0-10Vdc, 10bit) / Digital (7-24Vdc) configurables por el software.
CONEXIÓN TÍPICA
Para saber más sobre entradas analógicas...
TYPICAL CONNECTION
ENTRADAS DIGITALES
La variación de voltaje de –Vcc (o GND) a +Vcc, sin valores intermedios. Dos estados : 0 (-Vcc o GND) y 1 (+Vcc). En I/O digital y analógica hay una autoaislamiento, por lo que es posible conectarlos a una fuente de alimentación diferente a 24 V.
Entradas: Entradas Analógicas (0-10Vdc, 10bit) / Digital (7-24Vdc) configurables por el software.
Todas las entradas digitales son PNP.
Para saber más sobre entradas digitales...
CONEXIÓN TÍPICA
- Entrada Digital Aislada
- Entrada Digital no Aislada
Entradas de Interrupción
Interrupt Service Rutine ( rutina de servicio de interrupción). Un mecanismo que permite asociar una función con la ocurrencia de un evento particular. Cuando el evento ocurre que el procesador sale inmediatamente del flujo normal del programa y ejecuta la función ISR asociada ignorando cualquier otra tarea.
Entradas:
(6x) Entradas de interrupción (7-24Vdc). “Puede funcionar como una Entrada Digital (24Vdc)”.
Interruptor | Arduino Mega Pin | M-Duino Pin |
INT0 | 2 | I0.5/INT0 |
INT1 | 3 | I0.6/INT1 |
INT4 | 19 | I1.1 |
INT5 | 18 | I1.0 |
INT2 | 21 | I2.6/INT2 |
INT3 | 20 | I2.5/INT3 |
- I0.5/INT0 y I0.6/INT1 también como Pin3 y Pin2. Habilite las interrupciones activando los interruptores número 3 y 4 de interruptores de comunicación inactivos.
- I1.0 yvI1.0 también como Tx1 y Rx1. Habilite las interrupciones activando los interruptores número 1 y 2 de los interruptores de comunicación ascendente.
- I2.5/INT3 y I2.6/INT2 también como SCA y SCL. Habilite las interrupciones activando los interruptores número 3 y 4 de los interruptores de comunicación ascendente. En este caso no podrá usar I2C.
Para saber más sobre las entradas de interrupción...
Conexión Típica
En este ejemplo activamos INT0 usando el pin I0_5 de la placa M-duino. Cuando haya un cambio.
#define INTERRUPT I0_0 //other pins: I0_1, I0_6, I2_6, I2_5, I1_6, I1_5 (M-Duino) I0_0, I0_3, I0_2, I0_1 (Ardbox) volatile bool state = false; void setup() { pinMode(INTERRUPT, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(INTERRUPT), function_call_back, CHANGE); } void loop() { if (state == true){ Serial.println("Interrupt activated"); state = false; } } void function_call_back(){ //Change led state state = true; }
Comunicaciones
Ethernet
Ethernet is the technology that is most commonly used in wired local area networks ( LANs ).
A LAN is a network of computers
and other electronic devices that covers a small area such as a room, office, or building. It is used in contrast to a wide area
network (WAN) , which spans much larger geographical areas. Ethernet is a network protocol that controls how data is
transmitted over a LAN. Technically it is referred to as the IEEE 802.3 protocol. The protocol has evolved and improved over time
to transfer data at the speed of a gigabit per second.
Nuestra familia M-Duino incorpora el IC W5500 integrado.
WX5500 es un controlador Ethernet incorporado TCP / IP cableado que proporciona una conexión a Internet más fácil a los sistemas integrados. Este chip permite a los usuarios tener Conectividad a Internet en sus aplicaciones mediante el uso de un solo chip en el que se apilan TCP / IP, 10/100 Ethernet MAC y PHY están integrados. El chip W5500 incorpora el búfer de memoria interna de 32Kb para el paquete Ethernet tratamiento. Con este chip, los usuarios pueden implementar la aplicación Ethernet agregando el programa de socket simple. SPI se proporciona para Fácil integración con el microcontrolador externo
Hardware
Configuración Hardware
*IMPORTANTE: Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc). Solo con USB no hay suficiente energía para encender la comunicación de Ethernet.
Configuración de Interruptores
Para el protocolo de comunicación Ethernet no hay ningún interruptor que lo afecte . Por lo tanto, no importa la configuración de la conmutadores para implementar la comunicación
Códigos (Pines) usados
Para el protocolo de comunicación Ethernet, el pin Arduino Mega definido es el PIN 10, que está conectado y ya internamente
ensamblado al controlador Ethernet WX5500 . El W5500 IC se comunica con la placa Mega a través del bus SP también ensamblado. Usted puede Acceder fácilmente al puerto Ethernet en nuestros PLC Ethernet, se encuentra en la parte superior de la capa de comunicaciones.
La configuración del hardware Ethernet debe ser plug and play.
Software
*IMPORTANTE: Asegúrese de descargar el Arduino based PLC boards para Arduino IDE.
Software Configuration:
Una vez que se realiza la configuración del hardware, es posible continuar con la configuración del software y también su uso. En primer lugar es necesario incluir la biblioteca Ethernet2.h proporcionada por Industrial Shields (tiene la misma funcionalidad y uso que Ethernet.h).
#include <Ethernet2.h>
* Remember that for the V7 version or earlier versions you must use the <Ethernet.h> library.
Ethernet2 Library - funciones.
* Ethernet2.h library tiene las mismas funciones que Ethernet.h.
Códigos de ejemplo
Servidor Echo TCP
Una vez que el servidor se está ejecutando, cualquier cliente puede conectarse al servidor. En este ejemplo, se utiliza un M-Duino para generar el servidor. El ejemplo de cliente TCP mostrado anteriormente podría ser uno de los clientes.
A continuación se muestra el código de Arduino IDE:
// use Ethernet.h if you have a M-Duino V7 version
#include <Ethernet2.h>
// mac address for M-Duino
byte mac[] = { 0xBE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Ip address for M-Duino
byte ip[] = { 192, 168, 1, 100 };
int tcp_port = 5566;
EthernetServer server = EthernetServer(5566);
void setup()
{
// initialize the ethernet device
Ethernet.begin(mac, ip);
// start server for listenign for clients
server.begin();
}
void loop()
{
// if an incoming client connects, there will be bytes available to read:
EthernetClient client = server.available();
if (client.available()) {
// read bytes from the incoming client and write them back
// to the same client connected to the server
client.write(client.read());
}
}
Echo TCP Client:
Una vez que el servidor se está ejecutando, M-Duino puede conectarse al servidor. En este ejemplo, se utiliza un M-Duino para conectarse con Node.js servidor llamado server.js, el mismo que se usó en el enlace de ejemplo anterior.
Para configurar el M-Duino, esta publicación solo sigue el ejemplo de TCP del sitio web de Arduino con algunos cambios. Para poder conectarnos al servidor, debemos conocer la IP del servidor TCP y el puerto donde este servidor está escuchando
A continuación se muestra el códiog Arduino.:
#include <Ethernet2.h>
#include <SPI.h>
byte mac[] = { 0xBE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 100 };
byte server[] = { 192, 168, 1, 105 }; // Touchberry Pi Server
int tcp_port = 5566;
EthernetClient client;
void setup()
{
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
Serial.println("Connecting...");
if (client.connect(server, tcp_port)) { // Connection to server.js
Serial.println("Connected to server.js");
client.println();
} else {
Serial.println("connection failed");
}
}
void loop()
{
if (client.available()) {
if(Serial.available()){
char s = Serial.read();
client.write(s); // Send what is reed on serial monitor
char c = client.read();
Serial.print(c); // Print on serial monitor the data from server
}
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;) ;
}
}
Para saber más sobre la comunicación Ethernet...
Ethernet con HTTP.
Ethernet con MQTT.
Ethernet con Modbus TCP/IP (PLC = Slave).
Ethernet con Modbus TCP/IP (PLC = Master).
Serial TTL
Interfaz de comunicación entre dos dispositivos con un voltaje de bajo nivel. Un puerto serial envía datos por una secuencia de bits.
Dos señales: Tx (Dato transmitido) y Rx (Dato recibido).
M-Duino tiene dos puertos TTL, RX0/TX0, RX1/TX1. Se accede a TTL0 con la función serial (pines 0 y 1 del Arduino Mega).Se accede a TTL1 con la función Serial1 (pines 18 y 19 del Arduino Mega).
Para saber más sobre Serial TTL...
Hardware
IMPORTANTE: Asegúrese de que su Ethernet PLC está alimentado (12-24Vdc).
Configuración de interruptores.
Para lograr la comunicación Serial TTL no hay ningún interruptor que lo afecte, siempre está habilitado. Por lo tanto, no importa la configuración de los conmutadores para implementar la comunicación Serial TTL
Códigos (pines) usados
MDuino Ethernet PLC Pinout | Arduino Mega Pinout |
Tx 0 | 0 |
Rx 0 | 1 |
Tx 1 | 18 |
Rx 1 | 19 |
Software
IMPORTANT: Asegúrese de descargar los Arduino based PLC boards para Arduino IDE.
Configuración del Software
Una vez que se realiza la configuración del hardware, es posible continuar con la configuración el software y también su uso. En primer lugar es necesario incluir la biblioteca RS232.h provista en nuestros tableros. Entonces no olvide implementar la inicialización adecuada de su comunicación en la función setup ():
Serial.begin(9600);
Ejemplo Básico de escritura serial TTL
Lee una entrada analógica en Tx0 (pin 0), imprime el resultado en el monitor en serie.
La representación gráfica está disponible utilizando el trazador en serie (menú herramientas > Menú de trazador en serie) en el monitor Arduino IDE serial ..
// the setup routine runs once when you press reset:
void setup() {
pinMode(I0_2, INPUT);
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(I0_2);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
I2C
I2C Es un protocolo síncrono. Solo usa 2 cables, uno para el reloj (SCL) y otro para los datos (SDA).Esto significa que el maestro y el esclavo envían datos a través del mismo cable, que es controlado por el maestro, que crea la señal del reloj. I2C no utiliza la selección de esclavos, sino el Direccionamiento
I2C es un bus de comunicaciones en serie. La velocidad es de 100 kbit / s en modo estándar, pero también permite velocidades de 3.4 Mbit / s. Es un bus muy utilizado en la industria,principalmente para comunicar microcontroladores y sus periféricos en sistemas integrados y generalizar más para comunicar circuitos integrados entre ellos que normalmente residen en un mismo circuito impreso.
Hardware
IMPORTANTE: Asegúrese de que su Ethernet PLC está alimentado (12-24Vdc).
Configuración de interruptores.
Para lograr la comunicación I2C no hay ningún interruptor que lo afecte, siempre está habilitado. Por lo tanto, no importa la configuración de los conmutadores para implementar la comunicación I2C.
Códigos (pines) usados
MDuino Ethernet PLC Pinout | Arduino Mega Pinout |
SDA | 20 |
SCL | 21 |
Software
SPI
Estos pines solo pueden funcionar como pines de 5 V si no se va a utilizar el protocolo Ethernet. Como el protocolo Ethernet usa el SPI para comunicarse con la placa Arduino, ambos comportamientos no pueden ocurrir al mismo tiempo que Ethernet no funcionaría.
Estos pines no se establecen con una configuración pull-up o pull-down. El estado de estos pines es desconocido. Si se deben utilizar estos pines, requieren una configuración pull-up o pull-down. La placa Arduino permite que los pines se configuren en una configuración pull-up. De lo contrario, debe establecerse un circuito externo pull-up o pull-down para que funcione correctamente con estos pines.
Hardware
IMPORTANTE: Asegúrese de que su Ethernet PLC está alimentado (12-24Vdc).
Configuración de interruptores.
Para lograr la comunicación SPI no hay ningún interruptor que lo afecte, siempre está habilitado. Por lo tanto, no importa la configuración de los conmutadores para implementar la comunicación SPI.
Pines usados
Para el protocolo de comunicación en serie, los pines Mega Arduino definidos se muestran en la tabla a continuación. Para el bus SPI, los pines MISO, MOSI y CLOCK son común a todos los dispositivos conectados al M-Duino, por el contrario, cada uno de los dispositivos conectados tendrá un pin SS único y dedicado.
Function | M-Duino connection | Arduino Mega Pinout |
MISO | SO | 50 |
MOSI | SI | 51 |
CLOCK | SCK | 52 |
RST | Reset | Reset |
IMPORTANT: Asegúrese de descargar Arduino based PLC boards para Arduino IDE.
// inslude the SPI library: #include <SPI.h> // set pin 10 as the slave select for the digital pot: const int slaveSelectPin = 10; void setup() { // set the slaveSelectPin as an output: pinMode(slaveSelectPin, OUTPUT); // initialize SPI: SPI.begin(); } void loop() { // go through the six channels of the digital pot: for (int channel = 0; channel < 6; channel++) { // change the resistance on this channel from min to max: for (int level = 0; level < 255; level++) { digitalPotWrite(channel, level); delay(10); } // wait a second at the top: delay(100); // change the resistance on this channel from max to min: for (int level = 0; level < 255; level++) { digitalPotWrite(channel, 255 - level); delay(10); } } } void digitalPotWrite(int address, int value) { // take the SS pin low to select the chip: digitalWrite(slaveSelectPin, LOW); // send in the address and value via SPI: SPI.transfer(address); SPI.transfer(value); // take the SS pin high to de-select the chip: digitalWrite(slaveSelectPin, HIGH); }
Funciones especiales
RTC
El término reloj en tiempo real se utiliza para evitar confusiones con los relojes de hardware ordinarios, que son solo señales que gobiernan la electrónica digital y no cuentan el tiempo en unidades humanas. RTC no debe confundirse con la computación en tiempo real, que comparte el acrónimo pero no se relaciona directamente con la hora del día.
Aunque se puede mantener el tiempo sin un RTC, usar uno tiene beneficios:
- Bajo consumo de energía (importante cuando se ejecuta desde energía alternativa)
- Libera el sistema principal para tareas de tiempo crítico
- A veces más preciso que otros métodos
Para saber más sobre el RTC...
CONFIGURACIÓN DEL HARDWARE
IMPORTANTE: Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc) .
Configuración de interruptores
RTC funciona con la comunicación del protocolo I2C, por lo que es necesario haber habilitado el protocolo I2C.
Se deben configurar 4 interruptores para habilitar las funciones RTC y la comunicación I2C:
INTERRUPTOR | ON | OFF |
NC | - | - |
NC | - | - |
RTC/SCL | RTC | - |
RTC/SDA | RTC | - |
RTC SCL & RTC SDA debe establecerse en modo ON para habilitar los cables I2C al RTC. Si están en modo APAGADO, el Arduino no se comunicará con el RTC
CONFIGURACIÓN DE SOFTWARE
Una vez que se realiza la configuración del hardware, es posible continuar con la configuración del software y también su uso. En primer lugar es necesario incluir la biblioteca RTC.h proporcionada en nuestros tableros (RTC.h incluye la inicialización I2C.h, por lo que no será necesario inicializar la biblioteca I2C.h):
#include <RTC.h>
Para verificar si el puerto RTC funciona, es fácil usar el monitor serial de Arduino IDE usando la frase correcta dentro de la función setup ():
#Serial.begin(9600L)
CÓDIGO DE EJEMPLO
TEST Básico de RTC
// RTC library example // by Industrial Shields #include <RTC.h> //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(9600L); } /////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { if (!RTC.read()) { Serial.println("Read date error: is time set?"); } else { Serial.print("Time: "); Serial.print(RTC.getYear()); Serial.print("-"); Serial.print(RTC.getMonth()); Serial.print("-"); Serial.print(RTC.getMonthDay()); Serial.print(" "); Serial.print(RTC.getHour()); Serial.print(":"); Serial.print(RTC.getMinute()); Serial.print(":"); Serial.print(RTC.getSecond()); Serial.print(" ("); Serial.print(RTC.getTime()); Serial.println(")"); } delay(1000); }