Hola! este es el tercer capítulo del curso de programación de Arduino para usos industriales. En este
capítulo vamos a ver cómo funcionan las
salidas digitales, PWM y Analógicas en los
diferentes PLCs. Las salidas a relé ya las comentaremos
en el siguiente capítulo cuando veamos un
ejemplo integrando todo lo visto en los capítulos
anteriores controlado desde una interfaz gráfica
hecha con processing. Lo primero que hay que
hacer para que las salidas funcionen es alimentar
el PLC por el conector correspondiente. Como
véis cada equipo tiene un conector extraíble
de 2 pines por donde se conecta la alimentación
y el GND. El equipo se puede alimentar a un
voltaje que vaya de 12 a 24 Voltios en continua.
Si utilizamos una placa Arduino lo que tenemos
que hacer es conectar el GND en los pines
indicados con esa función y conectar el positivo
al PIN indicado con el nombre VIN. El voltaje
de trabajo de las placas Arduino que recomendamos
es de 7 Voltios. Y la forma de conectarlo
es exactamente igual para la placa Arduino
Leonardo cómo para la placa Arduino Mega. Una vez
tenemos alimentados todos los equipos vamos
a ver cómo funcionan las salidas digitales.
Un accionamiento que requiere de una salida
digital básicamente necesita recibir un voltaje
para ser activado y tenemos diferentes formas
de conectarlo. Primero de todo tenemos que
conectar el PLC a una fuente de alimentación
entre 12 y 24V. Luego conectamos una salida
del PLC directamente a la entrada del accionamiento.
En este caso hemos representado un piloto
luminoso cómo accionamiento para simplificar
el coneccionado. Cómo véis lo que hacemos
es conectar el Piloto al negativo proveniente
de la misma fuente de alimentación del PLC
y por otro lado el PLC es el encargado de
proveer el voltaje necesario para que el piloto
se encienda conectando la salida del PLC al
positivo del piloto. También tenemos la posibilidad
de tener instalaciones aisladas ya que en
los diferentes PLCs tenemos algunas salidas
optoaisladas. Esto significa que la fuente
de alimentación que alimenta el PLC no es
la encargada de ofrecer el voltaje de salida
en estas. En estos casos podemos entender
que tenemos una segunda fuente de alimentación.
Normalmente esta proviene de la instalación
del cliente. Dónde esta alimentación se
conecta por un lado al voltaje de referencia
que tenemos indicado en los PLCs y también
necesitamos conectar el común de esta fuente
aislada al común de las salidas. El motivo
de esto es que no podemos dejar que las salidas,
en los casos que no estén activas queden
al aire y nos puedan dar falsas señales.
En muchas instalaciones, por diferentes características
es posible que se junten las masas entre una
fuente de alimentación y otra. En estos casos
la instalación dejará de estar aislada aunque
seguirá siendo necesario conectar el voltaje
de referencia y el común a los pines correspondientes
de los PLCs para que estos den voltaje a las
salidas cuando se activen ya que internamente
no están conectados. Para que lo entendáis,
la placa Arduino ensamblada dentro de los
PLCs esta optoaislada de la instalación industrial
que va a activar la salida. Como véis, una
señal digital se puede entender como un interruptor
TODO o NADA donde sí está en estado LOW
significa que no nos dá ningún voltaje y
si está en estado HIGH nos ofrece el voltaje
al que el equipo esté alimentado en los casos
que no haga falta conectar la alimentación
adicional para las salidas lo que si el PLC
se alimenta a 12V nos ofrecerá 12 Voltios
a la salida. O 24V si el PLC está alimentado
a 24. En los casos que la salida requiere
de Voltaje de referencia el voltaje que nos
dará la salida será este. Los diferentes
modelos de PLC nos permiten alimentar de 5
a 24 Voltios en continua. Ahora bien, existe
otro tipo de señal digital, que lo que hace
es trabajar a una cierta frecuencia. Estas
señales se llaman salidas a PWM. Básicamente
lo que hacen estas señales es ofrecer una
salida por pulsos a una frecuencia determinada
por la placa Arduino y lo que se puede ajustar
es el tiempo en el que cada pulso se encuentra
en estado HIGH. Para las placas Arduino Leonardo
y Arduino Mega esta señal tiene 8 bits lo
que permite utilizar un valor de entre 0 y
255. La forma de programar esto es utilizar
la sentencia AnalogWrite(). Como vemos en
la gráfica al principio entendemos que tenemos
un valor de 0 por lo que el pulso no llega
en ningún momento a HIGH. Cuando el valor
programado lo dejamos a 125 más o menos la mitad del valor máximo el pulso se encuentra en HIGH más o menos la mitad del tiempo de
ciclo. Y si dejamos la señal a 255 el pulso
se queda a HIGH el 100% del tiempo. En nuestros
PLCs tenemos la opción de utilizar esta salida
PWM cómo salida analógica ya que tienen
señales diseñadas para realizar una interpolación
lineal entre el valor 0 y 255 de la salida
Por pulsos PWM a una señal analógica de
0 a 10 Voltios que es uno de los estándares
industriales utilizados en el control de un
actuador analógico. Esto nos permitiría
por ejemplo regulador de velocidad de un motor
conectado el PLC a un variador de frecuencia
dónde variando el voltaje de 0 a 10 Voltios
podemos modificar la velocidad de frecuencia
mínima o en algunos casos parada a frecuencia
máxima. Ahora vamos a ver como se programa
cada una de las salidas con el Arduino IDE.
Es importante tener claros estos conceptos
ya que en el próximo capítulo vamos a integrar
todos los conocimientos ofrecidos hasta ahora
para poder activar y desactivar una salida
en función al estado de diferentes entradas.
Todo esto lo veremos además interctuando
al interfaz gráfico hecho con processing.
Aprovecho para recomendaros que respondáis
a todas las preguntas de los diferentes capítulos
porque de esta forma vuestro tutor os podrá
enviar el documento en processing para que
podáis conectar el PLC con la interfaz gráfica.
De esta forma veréis que podréis activar
una salida haciendo clic en el ordenador y
también podréis ver el estado, en pantalla
de las diferentes entradas. Veréis que la
comunicación entre la interfaz gráfica y
el PLc se realizará mediante el puerto serie.
Teniendo el PLC conectado al puerto USB del
ordenador. Esta conexión se puede hacer también
por otros sistemas de comunicación. Ahora
vamos a ver de forma rápida cómo se programa
una salida digital en el Arduino IDE. Para
ello vamos a abrir el primer ejemplo que podéis
encontrar en la rutina Archivo / ejemplo / 01
– Digital y luego abrimos el ejemplo BLINK.
Como es habitual lo primero que nos encontramos
es un comentario sobre la descripción del
ejemplo. Esto es recomendable en todos los
programas que realices. Ya que es habitual
repasar programas cuando hace tiempo que se
han realizado y sin una buena descripción
realiza complicado interpretar todo el código
de forma ágil. Pasados el comentario vemos
que se configura la señal cómo salida, de
la misma forma que vimos la semana pasada
en las entradas. Y una vez configurado el
pin correspondiente como salida dentro del
apartado void LOOP() se escribe el código
principal del ejemplo. En este caso es muy
sencillo dado que para activar una salida
digital simplemente hay que escribir la sentencia
digitalWrite(), seguido del nombre de la salida
y el estado que se quiera poner. Si es LOW
para desactivarlo o estado HIGH para activarlo.
En el ejemplo blink se ejecuta también la
función delay() , que nosotros no recomendamos,
para temporizar la intermitencia de la salida
cada segundo. Para programar una salida PWM
podemos abrir el ejemplo ANALOGWRite MEGA
en el subapartado ANALOG del menú ejemplo.
En este ejemplos vemos que configuramos los
pines correspondientes en este caso se utiliza
el pin 13 de arduino que permite trabajar
cómo salida PWM. No todos los pines de Arduino
le permiten pero podéis ver que pines permiten
esta función en la indicación sobre de la
placa Arduino. Para los PLCs cualquier salida
digital que vaya asociada también a estos
pines con función PWM también se puede programar
como salida PWM y el conexionado es exactamente
igual que una salida digital. En este ejemplo
se muestra como se asocia una variable al
pin 13 y en la secuencia del código principal
podemos ver que se han fijado unos límites
utilizando la sentencia FOR(), que veremos
más adelante, dónde se realiza un incremento
de valores añadiendo el texto ++ detrás
del nombre de la variable brightness, dentro
de los límites que la placa arduino permite
trabajar una salida PWM. Que, al ser una señal
de 8 bits, tiene por rangos del valor 0 al
valor 255. En este ejemplo también se ha
programado un retardo de 2 milisegundos utilizando
la función delay. Ahora bien, a menudo nos
es cómodo poder ver los valores de una variable
por pantalla. En estos casos podemos ver el
ejemplo Analog INPUT Serial del menú de ejemplos
del Arduino IDE en el apartado 03-analog.
En este ejemplo vemos la combinación de una
entrada analógica con una salida PWM. En
este caso lo que hacemos es imprimir por el
monitor serial el valor de la entrada analógica
y de la salida PWM. Para hacerlo lo que hacemos
es configurar el puerto serie a 9600 baudios
para que pueda existir la comunicación entre
la placa Arduino dentro del PLC y el ordenador.
Como podéis ver en el código, leemos una
entrada analógica con la sentencia AnalogRead
que vimos la semana pasada. En este caso se
utiliza una función MAP() para realizar la
interpolación entre la lectura de una entrada
analógica que trabaja a 10 bits y tiene por
valores mínimo y máximo de 0 a 1023 con
los 8 bits que tienen las salidas PWM (que
pueden trabajar de forma analígica en los
PLCs) que van del valor 0 al 255. Como podéis
ver con una simple línea de código se puede
realizar esta interpolación lineal. Finalmente
definimos el valor a la salida PWM con la
sentencia ANALOGWRITE. Para imprimir el valor
de las diferentes variables por el puerto
serie utilizamos la sentencia Serial.print
que nos permite, por un lado, imprimir un
texto escrito entre comillas dobles y también
nos permite imprimir el valor que toman las
diferentes variables escribiendo simplemente
el nombre de las variables. Muy bien, una
vez visto un ejemplo básico de cómo se activan
y se asignan valores a las salidas digitales
y analogicas. Vamos a ver conceptos básicos
que utilizaremos para elaborar un programa
con el Arduino IDE. Para ello podemos ver
directamente en la página web de Arduino
las diferentes sentencias. Comentar que Arduino,
por motivos que no vienen al caso tiene 2
paginas web diferentes. Arduino.cc y Arduino.org
podéis ver las diferentes referencias en
cualquiera de ellas yendo al apartado “Reference”
del menú learning. En esta página lo primero
que destacamos es la zona de Structure”
dónde vemos lo que hemos ido comentando en
los diferentes capítulos sobre cómo se utiliza
y funciona el void LOOP y para qué sirve
el void SETUP.. Todos los programas que realizáis
con el Arduino IDE deben llevar estos 2 apartados
imprescindiblemente. En cada ejemplo que encontramos
en la página REFERENCE de arduino podemos
ver un pequeño ejemplo de código que nos
ayudará a interpretar y entender cómo funciona
cada una de las sentencias. Entre estas sentencias
podemos encontrar las sentencias vistas hasta
ahora cómo son: la sentencia MAP, la sentencia
milis y la sentencia delay(). Como vemos.
La sentencia MAP almacena los valores dada
una interpolación lineal entre un valor mínimo
y un valor máximo de referencia y un valor
mínimo y un valor máximo objetivo. Este
ejemplo es exactamente igual que el que hemos
visto en el ejemplo de hoy. Por otro lado
tenemos también la sentencia milis y la sentencia
delay tal y como hemos visto en la mayoría
de ejemplos hasta ahora. Os recomiendo hacer
un repaso a una serie de secuencias que serán
muy prácticas para el próximo capítulo
y que es bueno repasar y saber interpretar.
Básicamente es tener claro los diferentes
conceptos del apartado Analog I/Os y dentro
de las operaciones booleanas tendremos que
tener claras las diferentes sentencias. Así
cómo las estructuras básicas de control
if, y la estructura if--- elseif. En el próximo
capítulo, para conectarnos con el processing
utilizaremos también la comunicación seria
entre el PLC y el Ordenador. Donde como siempre
utilizaremos los comandos serial.print y serial.println
(que sirve para cambiar de línea al final
de la impresión) habiendo antes configurado
el puerto con la sentencia serial.begin en
el setup. A partir de ahora la temática se
empezará a complicar por eso os recomiendo
tener muy bien interiorizados estos conceptos
básicos mostrados hasta la fecha. Si tenéis
alguna dificultad es importante que realices
prácticas o que preguntéis a vuestro tutor
ya que a partir de aquí la cosa se pone emocionante
conectando diferentes elementos. Motores,
controladores, y visualizando en todo momento
el estado de la instalación.
Así pues, nos vemos en el próximo capítulo!
