La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Armando Mtz.R. ITNL Microcontroladores

Presentaciones similares


Presentación del tema: "Armando Mtz.R. ITNL Microcontroladores"— Transcripción de la presentación:

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

2 Referencia de programación
• Se requiere (forzosamente) una función setup y una función loop • Setup es la preparación • Loop es la ejecución

3 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)

4 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

5 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 && 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.

6 Modulación de ancho de pulso

7 Programando pwm

8

9

10 Ejemplo de diseño

11 Ejemplo de diseño Usaremos 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 Volt Para 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:

12 Diseño IC = 5 x 15 mA = 75mA (0.075 A), Esta corriente la manejara bien el transistor 2N3904, asi: RC = (VCC – VLED) / IC = (5 – 2) / = 40 Ohm La potencia que disipara la resistencia RC es; P = (VCC – VLED) x IC = (5 – 2) x = 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 IB IB = IC / hFE = / 100 =  A (0.75 mA)

13 Diseño asi, usamos 4K7 Ohm, 0.25W
Esta 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) / =  Ohm Y su potencia disipada: P = (VPORT – VBE) x IB = (4.2 – 0.7) x =  Watt asi, usamos 4K7 Ohm, 0.25W

14 Cuando requerimos mas de una salida
Otra alternativa.. Cuando requerimos mas de una salida

15 Diseño simplificado

16 Conexión con 2N2222

17  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

18  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

19  El puente en H Consiste en 4 interruptores conectados en parejas
Permite controlar la velocidad, invertir el giro y frenar el motor

20  Puente en H de nuestro robot: el L293D
Existen varios chips que pueden suministrar más o menos potencia, a la vez de tener otras características similares > 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

21  Uso del L293D Consta de 4 entradas y 4 salidas + 2 ENABLE
Cada ENABLE activa uno de los puentes Las entradas controlan las salidas según la siguiente tabla:

22  Esquema de conexión

23  Ejemplo con Arduino

24 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.

25  Ejemplo en Arduino

26  Ejemplo en Arduino Robot Movil
Proximamente

27 Simulando sensor

28 A/D, lectura de potenciometro

29

30 Entrada a partir de un potenciómetro
En 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)); }

31 Sensores de Temperatura
Proporciona Vout propocional a la temperatura de medio ambiente. Concepto : cuando la temperatura aumenta, el voltaje a traves de union p-n incrementa a una razón conocida. (en este caso Vbe) Voltage at Anlg.Pin in Volts = (lectura del ADC) * (5/1024) V Temp. en grados centigrados= [(analog voltage in V) – 0.5] * 100

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

33 Datasheet of LM35

34 Circuito y conexiones

35 Codigo de sensor Temp. Connect lm35 as per circuit diagram in 7. Temp Sensor folder. UsaremosAREF as 3.3V para reducir ruido del LM35 y lograr lecturas mas exactas. Cargar el codigo al Arduino y su salida se observara en el monitor serial.

36 Escribir el codigo Decida cual pin asignaras como variable global
En setup() { }, inicialize el puerto serial a9600 baud para envi o de datos a la PC. En loop() { }, toma lectura analogica del pin y se almacena en variable temp float. Multiplica la lectura por 5.0 y dividela entre 1024 para obtener la lectura del puerto . Almacenar esta variable (float variable) llamada volt. Imprimir este valor en el puerto serie (hacia la PC).

37 Escribir codigo Para obtener la temperatura e grados centigrados, realiza la operación ; (volt – 0.5) * 100 Envia el dato al puerto serie. Para obtener grados fahrenheight, mult iplicar por 9 y dividir por 5 sumandole 32 para tener asi el resultado. Enviandolo al puerto serie.

38 Mejoras? Usa 3.3V como referencia para incrementar su resolución en el datasheet menciona obtendremos : lm35 ~ 10mV. Soldar en circuito impreso para evitar cambios de resistencia del protoboard. No humedecerlo o hacer contacto con el agua. Construya una cubierta impermeable si la aplicación es en agua

39 LDR fotoresistencia Un LDR es una resistencia que varia con la luz
Asi la intensidad de luz se convierte en un valor de resistencia proporcional. Tambien llamada photocelda porque convierte la energia luminica a una señal electrica. Util para encender o apagar dispositivos en función de obscuridad o luz.

40

41

42

43 Como conectar un LDR LDR es basicamente una resistencia variable.
Necesitaras una resistencia pull-down para evitar un corto en el pin del arduino. El circuito es GND-10kohn-LDR-VCC. Este circuito trabajara entre 0-5VSi la luz es muy intensa, se satura a 5V. Colocando un potenciometro de 10k (en lugar de la resistencia fija) , permite regular la posible saturación del LDR.

44 Valores tipicos Ambiente 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

45 Conexiones con arduino

46 Escribiendo codigo! Decide que pin usar coo entrada del LDR.
En setup(){ }, inicializa puerto serie a 9600 bauds. En loop(){ }, primero hacer un analogueread(pin) y almacenarlo en variable int llamada reading. Este valor representa la iluminacion enviada por el LDR. Enviar dato al Serial Port. Insertar un retardo para que el ADC se estabilize.

47 Aplicación 1 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"); }

48 Aplicación 2 tarea 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).

49 Otra Aplicación Prueba la respuesta del LDR con 3 diferentes Leds; rojo, verde y azul. Enciende el Led Rojo y observa el valor del LDR. Enciende el Led Verde y observa el valor del LDR. Enciende el Led Azul y observa el valor del LDR. Con estos 3 valores podras determinar el color de la luz.

50 Registrando datos de sensor en PC
Tomar lecturas de un sensor y graficarlas en una PC en labor sencilla usando un Arduino. Envia datos continuamente por el puerto serie . Los datos los recibe la Pc y los grafica con cualquier programa.

51 Codigo de ejemplo

52 Send sensor data to serial port
Open the folder Sensor data graph Upload the arduino code onto the arduino and close arduino IDE after checking serial monitor. In softwares folder extract the processing folder. Open processing and copy the processing code onto it and run. Make sure serial port number in the processing sketch matches arduino

53 The motor shield 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. 1. DC Motor Interface Drives 2 motors with L293D DC Motor Driver IC. 2. IR paired sensors For line sensing, 4 IR sensor pairs can be attached and controlled. 3. The Buzzer or Servo Motor Selectable via jumper 4. The Switch or Servo Motor Selectable via jumper 5. Two LEDs

54

55

56 IR TX RX Pair An IR transmitter (TX) is a LED that emits light in the infrared spectrum. (most cameras see IR, light up the IR LED and point a camera at it to check) An IR Receiver (RX) is a transistor with the base exposed. The base voltage depends on the amount of IR received and it controls the amount of current passing through the C-E junction (leads).

57 IR schematic The IR TX LED is connected through a current limiting resisto The IR RX is connected via a variable potentiometer to a voltage comparator to give a digital output. The pot is used to adjust For ambient light intensity.

58 Remember The IR TX RX pairs should be spaced 1/4th of an inch apart for optimal detection. Calibration of IR sensors is important to adjust the sensors for ambient light. The output of this circuit is DIGITAL and read by a digital pin. 1 – obstruction; 0 – No obstruction. If you have to use IR sensors in the sun, use electrical tape to provide adequate shielding.

59 Using the IR sensors The motor shield has 4 IR sensors and 4 pots.
Connect the IR dongles to the placeholders. They go in only one way There are status LEDs just next to each IR socket, if the comparator goes HIGH, the LED lights. This is for calibration. Keep the IR sensor pointed at nothing (no obstruction). Use a screwdriver and GENTLY turn the appropriate POT until the respective IR sensors status LED turns dark. Check with your hand if LED lights, if not readjust as you like.

60 PINS The table below shows the pin arrangement for the 4 sensors on the shield. If the shield is mounted, then these 4 pins provide the output of the comparator. Use digitalread(pin) to see the state of the pin at any time.

61 Try Connect all four IR sensors and calibrate them.
Write a program to output which of the 4 IR sensors has gone HIGH to the serial port. 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,

62 DC motors Motors are devices that convert electrical energy to mechanical energy. Motors come in different varieties: AC, DC, Servo, Stepper etc If motor draws less than 40mA of current, it can be directlu wired to an arduino pin. 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.

63 The L293 driver Este chips aisla los voltajes del arduino con lo de los motores a controlar. Llamado doble puente H-bridge. Este driver puede controlar independientemente 2 motores de c.d. logrando tambien inversión de giro.

64 Motor Driver

65 The Motor Shield The motor driver is present on the shield which also contains a wire block for easy connection of the wires. The supply will have terminals marked on the board. Do not reverse these connections. Motor can be connected in anyway. The direction might have to be calibrated by testing if the terminals are reversed. - +

66 Arduino shield to Motor Driver Pinout
To use a motor, set the enable pin to high in the setup() { } Motor movement is done in loop() { } If l1 is HIGH and l2 is LOW, motor turn in one direction. If l1 is LOW and l2 is HIGH, the motor turns in the other direction. If both l1 and l2 are set to HIGH or LOW, then motor is stopped.

67 Wiring motors Attach the arduino shield onto the arduino.
Take a 9V battery cap and screw it onto the motor supply terminals. Take care of polarity. Red >> + and Black >> - Wire up the motors and connect them to the terminals.

68 TRY Move both motors in same direction. Reverse both motors.
Stop one and turn the other. Stop the other and turn the one. Make each motor turn in a different direction.

69 Exercise Combine the functionality of 2 IR sensors and the motors to make an obstacle avoider bot. Algorith: Move forward, left and right randomly. If IR sensors detect an obstruction, move a little back in the opposite side of the obstruction Continue.


Descargar ppt "Armando Mtz.R. ITNL Microcontroladores"

Presentaciones similares


Anuncios Google