Perifericos Armando Mtz.R. ITNL Microcontroladores [email protected].

69
Perifericos Perifericos Armando Mtz.R. ITNL Microcontroladores armando2 k@gmail. com

Transcript of Perifericos Armando Mtz.R. ITNL Microcontroladores [email protected].

Page 1: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

PerifericosPerifericosArmando Mtz.R.

[email protected]

Page 2: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Referencia de programación

0 • Se requiere (forzosamente) una función 0 setup y una función loop0 • Setup es la preparación0 • Loop es la ejecución

Page 3: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Referencia de programación• Digital I/O • Analog I/O

• pinMode(pin, mode) • digitalWrite(pin, value) • int digitalRead(pin)

• int analogRead(pin) • analogWrite(pin, value) -PWM

• Advanced I/O • Time

• shiftOut(dataPin, clockPin, bitOrder, value) • unsigned long pulseIn(pin, value)

• unsigned long millis() • delay(ms) • delayMicroseconds(us)

Page 4: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Comunicación serial Operadores booleanos

• Serial.begin(speed) • int Serial.available() • int Serial.read() • Serial.flush() • Serial.print(data) • Serial.println(data)

• && (and) • || (or) • ! (not)

• Operadores compuestos Tipos de variables

++ (increment) • -- (decrement) • += (compound addition) • -= (compound subtraction) • *= (compound multiplication) • /= (compound division)

boolean• char• byte• int• unsigned int• long• unsigned long• float• double• string• array

Page 5: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Además pueden hacerse las siguientes asignaciones:x ++. Lo mismo que x = x + 1.x --. Lo mismo que x = x - 1, or decrements x by -1.x += y. Lo mismo que x = x + y, or increments x by +y.x -= y. Lo mismo que x = x - y .x *= y. Lo mismo que x = x * y. x /= y. Lo mismo que x = x / y.

Para su utilización en sentencias condicionales u otras funciones Arduino permite utilizar los siguientes operadores de comparación:x == y. x es igual a y.x != y. x no es igual a y.x < y, x > y, x <= y, x >= y.

Y los siguientes operadores lógicos:Y lógico: if (x > 0 &#38;&#38; x < 5). Cierto si las dos expresiones lo son.O lógico: if (x > 0 || y > 0). Cierto si alguna expresión lo es.NO lógico: if (!x > 0). Cierto si la expresión es falsa.

Page 6: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Modulación de ancho de pulso

Page 7: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Programando pwm

Page 8: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.
Page 9: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.
Page 11: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Ejemplo de diseñoUsaremos el transistor 2N3904 (puede ser el 2N2222) deseamos encender 5 LED desde el arduino, de la hoja de datos del 2N3904 datasheet tenemos que:IC max = 200mA (para propositos practicos usar solo la mitad), hFE = 100 to 300, VBE saturate = 0.65 Volt, VCE saturate = 0.2 VoltPara la mayoria de los transistores el VBE = 0.7 Volt (saturación) and VCE = 0 Volt. Usando 5 volt power supply (VCC) y asumiendo queVLED = 2 Volt, y corriente de 15 mA, hacemos los calculos siguientes:

Page 12: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

DiseñoIC = 5 x 15 mA = 75mA (0.075 A), Esta corriente la manejara bien el

transistor 2N3904, asi:

RC = (VCC – VLED) / IC = (5 – 2) / 0.075 = 40 OhmLa potencia que disipara la resistencia RC es;P = (VCC – VLED) x IC = (5 – 2) x 0.075 = 0.225 Watt

Buscamos el valor comercial mas cercano,  47 Ohm, 0.5 watt  (usualmente seleccionamos potencia del doble requerida).Asumiendo minimo 100 de hFE , la minima corriente requerida por la base sera:

IC = hFE x IBIB = IC / hFE = 0.075 / 100 = 0.00075 A (0.75 mA)

Page 13: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

DiseñoEsta corriente la maneja perfectamente la salida del microcontrolador, asi:RB = (VPORT – VBE) / IB

Asumiendo que el minimo voltaje promedio(VPORT) con un “1” logico es 4.2 volt

RB = (4.2 – 0.7) / 0.00075 = 4666.66 OhmY su potencia disipada:

P = (VPORT – VBE) x IB = (4.2 – 0.7) x 0.00075 = 0.002625 Watt

asi, usamos 4K7 Ohm, 0.25W

Page 14: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Otra alternativa..

Page 15: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Diseño simplificado

Page 16: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Conexión con 2N2222

Page 17: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Motores de corriente continua con escobillas

Requieren de conmutadores rotativos para generar el campo magnético adecuado

La velocidad depende generalmente de la tensión aplicada

Page 18: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Inversión del sentido de giro y frenado en motores c.d.

• Para invertir sentido el giro hay que invertir la polaridad

• El motor puede tener frenado pasivo, reostático o regenerativo

• Al desconectar un motor, colapsa el campo magnético de las bobinas y se produce un pico de tensión de polaridad opuesta

• No debe cambiarse bruscamente el sentido de giro de un motor cargado, es mejor frenarlo primero

Page 19: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

El puente en H

• Consiste en 4 interruptores conectados en parejas

• Permite controlar la velocidad, invertir el giro y frenar el motor

Page 20: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Puente en H de nuestro robot: el L293D

> Consta de dos puentes en H completos (4 medios puentes)

> Incluye diodos para absorber la fcem al desconectar

> Hasta 600mA continuos, 1.2A de pico

> Transistores bipolares

Existen varios chips que pueden suministrar más o menos potencia, a la vez de tener otras características similares

Page 21: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Uso del L293D

• Consta de 4 entradas y 4 salidas + 2 ENABLE

• Las entradas controlan las salidas según la siguiente tabla:

• Cada ENABLE activa uno de los puentes

Page 22: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Esquema de conexión

Page 23: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Ejemplo con Arduino

Modificaciones:

Donde dice “pin 4” nosotros lo conectaremos al pin 5

External power supply significa la pila de 9V

Eliminaremos toda la parte del pulsador

Page 24: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Ejemplo con Arduino: código

• La función AnalogWrite de arduino no da valores puramente analógicos, sino PWM.

• Vamos a aprovecharlo para controlar nuestro L293D.

• Lo primero será activar el ENABLE del puente que vamos a utilizar

• Después, pondremos una entrada a HIGH o a LOW y haremos PWM en la otra. Conmutaremos las funciones para cambiar de sentido de giro.

Page 25: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Ejemplo en Arduino

Enviaremos una A por serie para activar el puente, una P para desactivarlo.

Enviaremos d para que el motor gire a la derecha, i para que gire a la izquierda. El motor frenará y luego arrancará en el otro sentido.

Enviaremos F para que el motor frene y se mantenga frenado.

Enviaremos + para incrementar la velocidad de giro, - para disminuirla

Page 26: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Ejemplo en Arduino Robot Movil

Proximamente

Page 27: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Simulando sensor

Page 28: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

A/D, lectura de potenciometro

Page 29: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.
Page 30: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Entrada a partir de un potenciómetroEn el siguiente código se emplea arduino para controlar la

frecuencia de parpadeo de un LED.

int potPin = 0; // Pin de entrada para el potenciómetro int ledPin = 13; // Pin de salida para el LED

void setup() { pinMode(ledPin, OUTPUT); // Declara el pin del LED como de salida}

void loop() { digitalWrite(ledPin, HIGH); // Enciende el LED delay(analogRead(potPin));// Lee el valor del potenciómetro

digitalWrite(ledPin, LOW); // Apaga el LED delay(analogRead(potPin));

}

Page 31: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Sensores de Temperatura

0 Proporciona Vout propocional a la temperatura de medio ambiente.

0 Concepto : cuando la temperatura aumenta, el voltaje a traves de union p-n incrementa a una razón conocida. (en este caso Vbe)

0 Voltage at Anlg.Pin in Volts = (lectura del ADC) * (5/1024) V

0 Temp. en grados centigrados= [(analog voltage in V) – 0.5] * 100

Page 32: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Antes: de escribir codigo…

0 Revisar:0 Como opera el LM35?0 Leer datasheet del lm35.0 Como conectarlo al arduino?0 Que referencia voy a utilizar?0 Que tipos de “Ruidos” estan presentes?0 Que significa la entrada analogica?

Page 33: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Datasheet of LM35

Page 34: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Circuito y conexiones

Page 35: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Codigo de sensor Temp.

0 Connect lm35 as per circuit diagram in 7. Temp Sensor folder.

0 UsaremosAREF as 3.3V para reducir ruido del LM35 y lograr lecturas mas exactas.

0 Cargar el codigo al Arduino y su salida se observara en el monitor serial.

Page 36: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Escribir el codigo

1. Decida cual pin asignaras como variable global

2. En setup() { }, inicialize el puerto serial a9600 baud para envi o de datos a la PC.

3. En loop() { }, toma lectura analogica del pin y se almacena en variable temp float.

4. Multiplica la lectura por 5.0 y dividela entre 1024 para obtener la lectura del puerto . Almacenar esta variable (float variable) llamada volt.

5. Imprimir este valor en el puerto serie (hacia la PC).

Page 37: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Escribir codigo

0 Para obtener la temperatura e grados centigrados, realiza la operación ; (volt – 0.5) * 100

0 Envia el dato al puerto serie.

0 Para obtener grados fahrenheight, mult iplicar por 9 y dividir por 5 sumandole 32 para tener asi el resultado. Enviandolo al puerto serie.

Page 38: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Mejoras?

0 Usa 3.3V como referencia para incrementar su resolución en el datasheet menciona obtendremos : lm35 ~ 10mV.

0 Soldar en circuito impreso para evitar cambios de resistencia del protoboard.

0 No humedecerlo o hacer contacto con el agua.

0 Construya una cubierta impermeable si la aplicación es en agua

Page 39: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

LDR fotoresistencia0 Un LDR es una resistencia que varia con la luz

0 Asi la intensidad de luz se convierte en un valor de resistencia proporcional.

0 Tambien llamada photocelda porque convierte la energia luminica a una señal electrica.

0 Util para encender o apagar dispositivos en función de obscuridad o luz.

Page 40: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.
Page 41: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.
Page 42: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.
Page 43: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Como conectar un LDR0 LDR es basicamente una resistencia variable.

0 Necesitaras una resistencia pull-down para evitar un corto en el pin del arduino.

0 El circuito es GND-10kohn-LDR-VCC.

0 Este circuito trabajara entre 0-5VSi la luz es muy intensa, se satura a 5V.

0 Colocando un potenciometro de 10k (en lugar de la resistencia fija) , permite regular la posible saturación del LDR.

Page 44: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Valores tipicosAmbiente como…

Ambient luz(lux)

Photocell resistance ( )Ω

LDR + R ( )Ω

Current thru LDR +R

Voltage across R

Luz muy tenue

0.1 lux 600KΩ 610 KΩ 0.008 mA 0.1 V

Luz de luna

1 lux 70 KΩ 80 KΩ 0.07 mA 0.6 V

Room obscuro

10 lux 10 KΩ 20 KΩ 0.25 mA 2.5 V

cuarto iluminado

100 lux 1.5 KΩ 11.5 KΩ 0.43 mA 4.3 V

Luz de dia 1000 lux 300 Ω 10.03 KΩ 0.5 mA 5V

Page 45: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Conexiones con arduino

Page 46: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Escribiendo codigo!0 Decide que pin usar coo entrada del LDR.

0 En setup(){ }, inicializa puerto serie a 9600 bauds.

0 En loop(){ }, primero hacer un analogueread(pin) y almacenarlo en variable int llamada reading.

0 Este valor representa la iluminacion enviada por el LDR.0 Enviar dato al Serial Port.

0 Insertar un retardo para que el ADC se estabilize.

Page 47: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Aplicación 1

0 Crea umbral y determina la brillantes detectada por el LDR y enviada por el puerto serie.

if (reading < 10) { Serial.println(" - Obscuro"); } else if (reading < 200) { Serial.println(" - Tenue"); }else if (reading < 500) { Serial.println(" - brillante"); } else if (reading < 800) { Serial.println(" – muy brillante"); }else { Serial.println(" - saturado"); }

Page 48: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Aplicación 2 tarea

0 Tome una lecturas analogicas utilizando codigo del ejemplo blink, elabora un control on-off que encienda el led 13 cuando la luz se inferior a luz tenue (<200).

Page 49: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Otra Aplicación0 Prueba la respuesta del LDR con 3 diferentes Leds;

rojo, verde y azul.

0 Enciende el Led Rojo y observa el valor del LDR.0 Enciende el Led Verde y observa el valor del LDR.0 Enciende el Led Azul y observa el valor del LDR.

0 Con estos 3 valores podras determinar el color de la luz.

Page 50: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Registrando datos de sensor en PC

0 Tomar lecturas de un sensor y graficarlas en una PC en labor sencilla usando un Arduino.

0 Envia datos continuamente por el puerto serie .

0 Los datos los recibe la Pc y los grafica con cualquier programa.

Page 51: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Codigo de ejemplo

Page 52: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Send sensor data to serial port

0 Open the folder Sensor data graph

0 Upload the arduino code onto the arduino and close arduino IDE after checking serial monitor.

0 In softwares folder extract the processing folder.

0 Open processing and copy the processing code onto it and run.

0 Make sure serial port number in the processing sketch matches arduino

Page 53: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

The motor shield1. DC Motor InterfaceDrives 2 motors with L293D DC Motor Driver IC.

2. IR paired sensorsFor line sensing, 4 IR sensor pairs can be attached and controlled.

3. The Buzzer or Servo MotorSelectable via jumper

4. The Switch or Servo MotorSelectable via jumper

5. Two LEDs

The motor shield goes on top of the arduino neatly.

There are loads of shields for the arduino that provide different functionality.

Be careful removing the shield, if you bend the pins, you cant put the shield in again.

Page 54: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.
Page 55: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.
Page 56: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

IR TX RX Pair

0 An IR transmitter (TX) is a LED that emits light in the infrared spectrum.

0 (most cameras see IR, light up the IR LED and point a camera at it to check)

0 An IR Receiver (RX) is a transistor with the base exposed.

0 The base voltage depends on the amount of IR received and it controls the amount of current passing through the C-E junction (leads).

Page 57: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

IR schematic

0 The IR TX LED is connected through a current limiting resisto

0 The IR RX is connected via a variable potentiometer to a voltage comparator to give a digital output.

0 The pot is used to adjust

For ambient light intensity.

Page 58: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Remember

0 The IR TX RX pairs should be spaced 1/4th of an inch apart for optimal detection.

0 Calibration of IR sensors is important to adjust the sensors for ambient light.

0 The output of this circuit is DIGITAL and read by a digital pin.1 – obstruction; 0 – No obstruction.

0 If you have to use IR sensors in the sun, use electrical tape to provide adequate shielding.

Page 59: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Using the IR sensors

0 The motor shield has 4 IR sensors and 4 pots.0 Connect the IR dongles to the placeholders. They go in only

one way0 There are status LEDs just next to each IR socket, if the

comparator goes HIGH, the LED lights. This is for calibration.

0 Keep the IR sensor pointed at nothing (no obstruction).0 Use a screwdriver and GENTLY turn the appropriate POT

until the respective IR sensors status LED turns dark.0 Check with your hand if LED lights, if not readjust as you

like.

Page 60: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

PINS

0 The table below shows the pin arrangement for the 4 sensors on the shield.

0 If the shield is mounted, then these 4 pins provide the output of the comparator.

0 Use digitalread(pin) to see the state of the pin at any time.

Page 61: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Try

0 Connect all four IR sensors and calibrate them.

0 Write a program to output which of the 4 IR sensors has gone HIGH to the serial port.

0 CHALLENGE: Try and make sure that the message on the serial port doesn’t repeat until the IR sensor has gone LOW again (obstruction removed). It shouldn't continuously output the message if the IR sensor is obstructed,

Page 62: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

DC motors0 Motors are devices that convert electrical energy to

mechanical energy.

0 Motors come in different varieties: AC, DC, Servo, Stepper etc

0 If motor draws less than 40mA of current, it can be directlu wired to an arduino pin.

0 Current drawn by a DC motor is propotional to speed and torque. To avoid burning out the arduino, we use motor drivers to control DC motors.

Page 63: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

The L293 driver0 Este chips aisla los voltajes del arduino con lo de los

motores a controlar.

0 Llamado doble puente H-bridge.

0 Este driver puede controlar independientemente 2 motores de c.d. logrando tambien inversión de giro.

Page 64: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Motor Driver

Page 65: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

The Motor Shield0 The motor driver is present on the

shield which also contains a wire block for easy connection of the wires.

0 The supply will have terminals marked on the board. Do not reverse these connections.

0 Motor can be connected in anyway. The direction might have to be calibrated by testing if the terminals are reversed.

+

-

Page 66: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Arduino shield to Motor Driver Pinout

0 To use a motor, set the enable pin to high in the setup() { }

0 Motor movement is done in loop() { }0 If l1 is HIGH and l2 is LOW, motor turn in one direction.0 If l1 is LOW and l2 is HIGH, the motor turns in the other

direction.

0 If both l1 and l2 are set to HIGH or LOW, then motor is stopped.

Page 67: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Wiring motors

0 Attach the arduino shield onto the arduino.

0 Take a 9V battery cap and screw it onto the motor supply terminals. Take care of polarity. 0 Red >> + and Black >> -

0 Wire up the motors and connect them to the terminals.

Page 68: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

TRY

0 Move both motors in same direction.

0 Reverse both motors.

0 Stop one and turn the other.0 Stop the other and turn the one.

0 Make each motor turn in a different direction.

Page 69: Perifericos Armando Mtz.R. ITNL Microcontroladores armando2k@gmail.com.

Exercise

0 Combine the functionality of 2 IR sensors and the motors to make an obstacle avoider bot.

0 Algorith:0 Move forward, left and right randomly.0 If IR sensors detect an obstruction, move a little back in

the opposite side of the obstruction0 Continue.