207
SISTEMAS INDUSTRIALES CON MICROCONTROLADORES M.C. Jorge Luis Salazar Martínez

Sistemas Industriales Con Microcontroladores

Embed Size (px)

DESCRIPTION

Trabajo

Citation preview

SISTEMAS INDUSTRIALES CON

MICROCONTROLADORES

M.C. Jorge Luis Salazar Martínez

COMPONENTES PARA ARMAR TU ROBOT

CONTENIDO

Introducción a Arduino

Robot mini-sumo

Material

Programación

Robot seguidor de línea

Material para construir seguidor de línea

Programación

MATERIAL PARA ROBOT SEGUIDOR DE

LÍNEA

2(en total 6 para seguidor de línea y sumo) Led infrarrojo CNY70

Hc-sr04

2 Resistencias 220

2 Resistencias 47K

1 Driver para motor L293 B ó SN754410NE

2 Secciones de acrílico de 12x12 cms de 10 mm. de ancho para las partes superior e inferior.

Tornillos y Tuercas

2 Ruedas de 8 cm de diámetro

1 Rueda loca

1Twin Motor GrearBox

1 Placa Arduino ATMega168

1 Protoboard

Cables para conexiones

5 Condensadores

SENSOR LED INFRARROJO CNY70

POTENCIA PUENTE H (4)

COMO CONECTAR

COMO FUNCIONA

MOTOREDUCTOR Y RUEDA

MOTOREDUCTORES

ORUGA

PRÁCTICA 1

PRÁCTICA 1

PROGRAMA

PRÁCTICA 2

PRÁCTICA 3 PULL

PRÁCTICA 4

PRÁCTICA 5

PRÁCTICA 5

1xMotor CD, 5 o 6v

– 1xTransistor Bipolar NPN de uso general,

BC547, 2N2222, 2N3904

– 1xDiodo de proposito general, 1N4001, 1N4007

– 1xResistencia 330 ohms (naranja, naranja,

cafe)

… y lo que no puede faltar:

– Arduino

– Protoboard (Tabla Prototipo)

– Algunos jumpers

/ Declaramos la variable d3 para referenciar el pin digital 3

int d3 = 3;</code></code>void setup(){

// Iniciamos el pin digital como salida.

pinMode(d3, OUTPUT);

}

void loop(){

digitalWrite(d3, HIGH); // escribimos en el pin un valor de salida Alto (Digital 1)

delay(1500); // esperamos 1.5 segundos

digitalWrite(d3, LOW); // escribimos en el pin un valor de salida Bajo (Digital 0)

delay(1000); // esperamos 1.5 segundos

}

PRÁCTICA 5

#include <Servo.h>

Servo Servo1; //Declaramos que queremos controlar un Servo int val; //El valor a leer por el puerto análogo

void setup() { Servo1.attach(9); //El pin al cual conectaremos nuestro Servo }

void loop() { val = analogRead(pot); //Aquí le decimos que lea el valor del potenciómetro, valor el cual oscila entre 0 y 1023 val = map(val, 0 ,1023, 0, 180); //Traduce la lectura anáolga (0, 1023) a grados (0°, 180°) Servo1.write(val); //Mueve el Servo según la lectura análoga delay(15); }

PRACTICA 9

SISTEMAS INDUSTRIALES CON

MICROCONTROLADORES 3-2-5

La presente asignatura genera una aportación al

perfil del ingeniero electrónico en el conocimiento y

habilidades que son necesarios para comprender,

seleccionar, diseñar e implementar sistemas de

control de procesos industriales basados en

microcontroladores, que permiten un desarrollo

tecnológico de vanguardia en el sector productivo.

El programa está diseñado de manera teórico-práctico

dando énfasis en la práctica que permita comprobar la

teoría, por lo que se tiene la necesidad de hacer grupos

pequeños de estudiantes que trabajen en equipo.

OBJETIVO PRINCIPAL DE LA MATERIA

Implementa sistemas de control industrial

basados en el uso de microcontroladores y sus

periféricos.

COMPETENCIAS GENÉRICAS

Capacidades metodológicas para mejorar el

ambiente: ser capaz de organizar el tiempo y las

estrategias para el aprendizaje, tomar decisiones

o resolver problemas.

Capacidad de análisis y síntesis.

Capacidad de organizar y planificar.

Comunicación oral y escrita.

Habilidades básicas de manejo de la

computadora.

Habilidad para buscar y analizar

Información proveniente de fuentes diversas.

Solución de problemas.

Toma de decisiones.

COMPETENCIAS INTERPERSONALES

Capacidad crítica y autocrítica.

Trabajo en equipo.

Habilidades interpersonales.

Compromiso ético.

(Pero no copiar los

programas o prestarse los

micros con los programas

ya precargados)

COMPETENCIAS SISTÉMICAS

Capacidad de aplicar los conocimientos en la

práctica.

Habilidades de investigación.

Capacidad de aprender.

Capacidad de adaptarse a nuevas situaciones.

Capacidad de generar nuevas ideas (creatividad).

Habilidad para trabajar en forma autónoma.

Búsqueda del logro.

Capacidad para diseñar y gestionar proyectos

Iniciativa y espíritu emprendedor.

COMPETENCIAS PREVIAS (LO QUE DEBO DE

SABER)

Programación estructurada y orientada a objetos.

Aplicar los principios del álgebra Booleana.

Diseño de circuitos digitales y analógicos.

Aplicar fundamentos de controles eléctricos.

Seleccionar interruptores y sensores.

Aplicar y seleccionar relevadores.

Interpretar diagramas de controles eléctricos.

UNIDAD I. FUNDAMENTOS DE LOS SISTEMAS

INDUSTRIALES BASADOS EN MICROCONTROLADORES

1.1 Introducción

1.2 El microcontrol en los sistemas industriales

1.3 Pasos de diseño de un sistema industrial con

base en un microcontrolador embebido

1.4 Herramientas de desarrollo de un

microcontrolador

1.1 INTRODUCCIÓN

1.2 MICROCONTROLADORES Y LOS

SISTEMAS INDUSTRIALES

1.3 PASOS DE DISEÑO DE UN SISTEMA INDUSTRIAL

CON BASE EN UN MICROCONTROLADOR EMBEBIDO

Microcontrolados + etapa de potencia = PLC

1.41.4 HERRAMIENTAS DE DESARROLLO DE

UN MICROCONTROLADOR

INTEGRATED DESIGN ENVIRONMENT (IDE)

INSTALACIÓN DE PSOC CREATOR

UNIDAD II. COMUNICACIONES SERIALES

USART, I2C, SPI Y RS485

2.1 Comunicación de datos seriales entre

computadora y microcontrolador

2.2 Implementación de un reloj de tiempo

real externo mediante I2C

2.3 Integración de un puerto de expansión

mediante SPI

2.4 Comunicación RS485 entre dos

microcontroladores

2.1 COMUNICACIÓN DE DATOS SERIALES

ENTRE COMPUTADORA Y MICROCONTROLADOR Fundamento para Arduino-Pc

Iniciamos siempre con

Serial.begin(9600);

Ya que solo necesitamos correr esta orden una

vez, normalmente iría en el bloque void setup()

COMANDOS DE IMPRESIÓN DE DATOS

Las funciones print y println (lo mismo que la

anterior pero con salto de renglón) tienen

opcionalmente un modificador que puede ser de

varios tipos:

Serial.print(data, DEC); // decimal en ASCII

Serial.print(data, HEX); // hexadecimal en ASCII

Serial.print(data, OCT); // octal en ASCII

Serial.print(data, BIN); // binario en ASCII

Serial.print(data, BYTE); // un Byte

En el modo más sencillo y común de

comunicación serial (asincrónica, 8 bits, más un

bit de parada) siempre se está enviando un byte,

es decir un tren de 8 pulsos de voltaje legible por

la máquina como una serie de 8 bit (1 ó 0):

EJEMPLO

Si Arduino lee en un sensor analógico un valor de

65, equivalente a la serie binaria 01000001 esta

será enviada, según el modificador, como:

Es evidente como el modificador BYTE permite el

envío de información más económica (menos

pulsos para la misma cantidad de información) lo

que implica mayor velocidad en la comunicación.

Y ya que esto es importante cuando se piensa en

interacción en tiempo real es el modo que

usaremos.

VARIOS SENSORES A LA VES

int firstSensor = 0;

int secondSensor = 0;

int thirdSensor = 0;

int inByte = 0;

void setup()

{

// inicializa la comunicación serial:

Serial.begin(9600);

while (!Serial) {

; // espera a que el puerto serial se conecte. Necesitado solo por Arduino Leonardo.

}

pinMode(2, INPUT); // sensor digital esta en el pin digital 2

establishContact(); // envía un byte para establecer contacto

// hasta recibir una respuesta

}

void loop()

{

// si se obtiene un byte valido

if (Serial.available() > 0) {

// obtiene el byte entrante:

inByte = Serial.read();

// lectura del primer sensor

firstSensor = analogRead(A0);

// lectura del segundo sensor

secondSensor = analogRead(A1);

// lectura del pulsador, mapea esta lectura entre 0 o 255L

thirdSensor = map(digitalRead(2), 0, 1, 0, 255);

// envía el valor de los sensores:

Serial.print(firstSensor);

Serial.print(",");

Serial.print(secondSensor);

Serial.print(",");

Serial.println(thirdSensor);

}

}

void establishContact() {

while (Serial.available() <= 0) {

Serial.println("0,0,0"); // envía una cadena inicial

delay(300);

}

COMUNICACIÓN I2C

I²C es un bus de comunicaciones en serie. Su nombre viene

de Inter-Integrated Circuit (Circuitos Inter-Integrados). La

versión 1.0 data del año 1992 y la versión 2.1 del año 2000,

su diseñador es Philips. La velocidad es de 100 kbit/s en el

modo estándar, aunque también permite velocidades de

3.4 Mbit/s. Es un bus muy usado en la industria,

principalmente para comunicar microcontroladores y

sus periféricos en sistemas integrados

Las líneas se llaman:

SDA: datos

SCL: reloj

GND: tierra

ESPECIFICACIONES

La misma línea de datos envía la información en las dos direcciones, por lo que es necesario un control de acceso al bus y un direccionamiento de cada elemento.

En I2C hay un valor fuerte y otro valor débil, normalmente el 0 es el valor fuerte y el 1 el débil Esto es así porque el 0 se consigue forzando la línea a esa tensión pero por contra el 1 se consigue con pull-up, por lo tanto en caso de que alguien transmita un 0 y otro un 1, en la línea solo se vera reflejado el 0. Por lo tanto se define como el valor de reposo del bus como el 1, ya que si alguien quiere empezar a comunicar siempre podrá modificar el estado del bus y los demás se darán cuenta.

Otro aspecto a tener en cuenta en I2C es que los

maestros o maestro son los únicos que pueden

controlar la linea de SCL, eso implica que solo un

maestro puede iniciar una transmisión por lo que un

Slave tendrá que esperar a que un maestro le pregunte

por un dato para poder enviarlo.

Así en I2C cada dispositivo tiene una dirección de 7

bits, es decir se pueden tener hasta 128 dispositivos

conectados al mismo bus, hay que tener en cuenta que

existen versiones extendidas de I2C con

direccionamiento a 8,10 y 12 bits.

En el caso del I2C el protocolo del bus si reserva unos

campos para poder realizar la transmisión, cosa

totalmente diferente con el SPI donde podíamos enviar

en cada byte el dato que queramos.

Una trama I2C esta comprendida por los siguientes campos.

Bit de start: Este es un bit especial ya que como hemos dicho antes la linea SDA no puede cambiar a menos que SCL este a 0. Este bit rompe dicha norma y provoca un cambio de 1 a 0 cuando SCL esta a nivel alto.

Address: El primer byte enviado empieza con 7 bits de dirección, el cual indica a quien enviamos o solicitamos el dato.

R/W (Read/Write): El siguiente bit indica si vamos a realizar una operación de lectura o escritura.

ACK: Este bit esta presente al final de cada byte que enviamos y nos permite asegurarnos que el byte ha llegado a su destino. De este modo el que envía deja el bit a 1 y si alguien a recibido el mensaje fuerza ese bit a 0. De esta manera confirma que le ha llegado el byte y la transmisión puede continuar.

1º Byte de datos: Este es el primer byte de datos propiamente dicho ya que lo anterior no lo podemos elegir nosotros y nos viene impuesto por el protocolo. Aquí podemos poner el dato que queramos en caso de comunicación con sensores remotos un uso habitual es poner el numero de registro al que queremos escribir o leer. Después del byte de datos se espera otro ACK del receptor.

Se repite el paso 5 tantas veces como sea necesario.

Bit de Stop. En este caso ocurre lo contrario al bit de Start, se pasa de 0 a 1 cuando la linea SCL se encuentra en alto. Esto termina la transmisión y deja el bus libre para que otro puede empezar a transmitir.

PRÁCTICA 1. YA EN CÓDIGO

Wire.beginTransmission(dirección) :Inicia el bus

y ponemos con que dirección vamos a

comunicarnos.

Wire.write(bytes): Esta función envía uno o

varios bytes a la dirección anterior.

Wire.endTransmission(): Finaliza la

comunicación con un STOP y deja el bus libre.

PRÁCTICA II (PARTE DE LA PRIMERA)

RESPONDIENDO DESDE EL SLAVE: PRÁCTICA 3

COMUNICACIÓN SPI

IEEE 802.3

FUENTE PARA COMUNICACIÓN I2C ARDUINO

HTTPS://WWW.ARDUINO.CC/EN/TUTORIAL/MAST

ERWRITER

SPI(SERIAL PERIPHERAL INTERFACE)

PINES

SCLK (Clock): Es el pulso que marca la sincronización. Con cada pulso de este reloj, se lee o se envía un bit. También llamado TAKT (en Alemán).

MOSI (Master Output Slave Input): Salida de datos del Master y entrada de datos al Slave. También llamada SIMO.

MISO (Master Input Slave Output): Salida de datos del Slave y entrada al Master. También conocida por SOMI.

SS/Select: Para seleccionar un Slave, o para que el Master le diga al Slave que se active. También llamada SSTE.

Mayor velocidad de transmisión que con I²C

Protocolo flexible en que se puede tener un control absoluto sobre los bits transmitidos No está limitado a la transferencia de bloques de 8 bits

Elección del tamaño de la trama de bits, de su significado y propósito

Su implementación en hardware es extremadamente simple Consume menos energía que I²C o que SMBus debido que posee menos

circuitos (incluyendo las resistencias pull-up) y estos son más simples

No es necesario arbitraje o mecanismo de respuesta ante fallos

Los dispositivos clientes usan el reloj que envía el servidor, no necesitan por tanto su propio reloj

No es obligatorio implementar un transceptor (emisor y receptor), un dispositivo conectado puede configurarse para que solo envíe, sólo reciba o ambas cosas a la vez

Usa mucho menos terminales en cada chip/conector que una interfaz paralelo equivalente

Como mucho una única señal específica para cada cliente (señal SS), las demás señales pueden ser compartidas

VENTJAS

Consume más pines de cada chip que I²C, incluso en la variante de 3 hilos

El direccionamiento se hace mediante líneas específicas (señalización fuera de banda) a diferencia de lo que ocurre en I²C que se selecciona cada chip mediante una dirección de 7 bits que se envía por las mismas líneas del bus

No hay control de flujo por hardware

No hay señal de asentimiento. El servidor podría estar enviando información sin que estuviese conectado ningún cliente y no se daría cuenta de nada

No permite fácilmente tener varios servidores conectados al bus

Sólo funciona en las distancias cortas a diferencia de, por ejemplo, RS-232, RS-485, o Bus CAN

TRAMA

El funcionamiento para un envió de un Master es el

siguiente:

Se habilita el chip al que hay que enviar la

información mediante el CS (Opcional).

Se carga en el buffer de salida el byte a enviar.

La línea de Clock empieza a generar la señal

cuadrada donde normalmente por cada flanco de

bajada se pone un bit en MOSI.

El receptor normalmente en cada flanco de

subida captura el bit de la línea MISO y lo

incorpora en el buffer.

CAMBIAR VELOCIDAD PARA EVITAR

ERRORES (POR DEFECTO ES 4 MHZ)

HTTPS://WWW.ARDUINO.CC/EN/TUTORIAL/S

PIEEPROM

2.4 COMUNICACIÓN RS485 ENTRE DOS

MICROCONTROLADORES

DUAL-SIMULTANEA (FULL-DUPLEX)

La comunicación dual-simultanea (full-duplex) requiere la utilización de 2 pares de cables (cuatro hilos) para la comunicación. Se ha de separar la transmisión y la recepción con hilos independientes, conectando el transmisor de un elemento con el receptor del otro y viceversa.

FULL-DUPLEX

Se pueden montar redes de cuatro hilos con

una comunicación dual-simultánea (full-duplex)

con una conexión semejante a la conexión punto a

punto. Aunque la comunicación entre dos nodos

puede ser (full-duplex) solo un nodo de la red

tiene la facultad de comunicarse con todos los

demás, a este nodo se le denomina maestro

(Master), al resto de nodos se les denomina

esclavos (Slave). Los modos esclavos no pueden

establecer una comunicación entre si, estos se

han de comunicar siempre con el master.

Se puede montar una red con dos hilos simplificando de

esta forma considerablemente las conexiones en el bus de

comunicación. Las redes de 2 hilos rs2485 solo

pueden comunicarse de forma dual-no simultánea

(half-duplex), lo que conlleva a un tipo de comunicación

de pregunta-respuesta.

La ventaja de estas redes es que se puede montar una

estructura multi-maestro (multi-master), es decir cada

nodo tiene la facultad de comunicarse con cualquier otro.

Evidentemente todo tiene un precio, las reglas de

arbitraje y la detección de colisiones se hace

imprescindible en este tipo de redes.

UNIDAD 3:IMPLEMENTACIÓN DE REDES

ETHERNET CON MICROCONTROLADORES

3.1 Introducción

3.2 Programación general para la comunicación

con Ethernet

3.3 Consiguiendo una dirección IP

automáticamente

3.4 Resolviendo nombres de dominio para

direcciones IP (DNS)

3.5 Solicitando datos de un Servidor Web

3.6 Usando HTML para un formato de respuesta

del servidor Web

CMD

IPCONFIG

CAMBIAR IP

PASOS PARA CAMBIAR IP

DNS

DNS son las iniciales de Domain Name

System (sistema de nombres de dominio) y es

una tecnología basada en una base de datos que

sirve para resolver nombres en las redes, es

decir, para conocer la dirección IP de la máquina

donde está alojado el dominio al que queremos

acceder.

#UNAM 132.248.10.2 132.248.204.1 132.248.64.250 132.248.237.250 #PRODIGY 200.33.146.193 200.33.146.201 200.33.146.209 200.33.146.217 #AVANTEL 148.240.241.9 148.240.241.41 #ZONEEDIT 209.126.159.80 216.122.4.160 #REDIRIS 130.206.1.39 130.206.1.2 130.206.1.3

FORMA 1 PARA CONECTAR MODULO WIFI

AT

El conjunto de comandos Hayes es un

lenguaje desarrollado por la compañía Hayes

Communications que prácticamente se convirtió

en estándar abierto de comandos para configurar

y parametrizar módems. Los caracteres «AT», que

preceden a todos los comandos, significan

«Atención», e hicieron que se conociera también a

este conjunto de comandos como comandos AT.

Midiendo la longitud de los bits se puede

determinar en detalle la velocidad de

transmisión.

AT

OK

AT+CWMODE?

¿O?

AT+CWMODE=n

AT+CWLAP

Para ver a que redes puedo entrar

AT+CWJAP=”Nombre de red”,”contraseña”

Estos son los datos SSDI

PARA VER QUE IP

AT+CIFSR

IP /

IP/ P13=10,

FORMA 2 MODULO WIFI NRF2401 CON

ARDUINO

Conexión

PINES

PROGRAMAS

NFR2401Emisor

NFR2401Receptor

BLUETOOTH

Módulo VCC → VCC Arduino

Módulo GND → GND Arduino

Módulo RX → PIN 3 Arduino

Módulo TX → PIN 2 Arduino

UNIDAD IV: REDES INALÁMBRICAS PARA

MICROCONTROLADORES

4.1 Conexión de un microcontrolador a un módulo

inalámbrico

4.2 Envío de mensajes utilizando módulos

inalámbricos

4.3 Obtención de datos de un sensor a través de

una red inalámbrica

4.4 Activando un actuador conectado a la red

inalámbrica

UNIDAD 5: SISTEMAS SENSOR –

ACTUADOR EN REDES INDUSTRIALES

5.1 Comunicación de un sistema en red

5.2 Envío de datos al sistema desde los sensores

5.3 Activación de actuadores

5.4 Implementación de un sistema de control

industrial basado en redes de microcontroladores