sábado, 7 de diciembre de 2019

Laboratorio 16_2019



Laboratorio N° 16

Microcontroladores

FASE 16:

PARTE FÍSICA DEL CARRO SEGUIDOR DE LINEAS

1. COMPETENCIA ESPECIFICA DE LA SESIÓN:

  • Implementar el circuito en fisico.
  • Funcionamiento del carro siguiendo una linea.
2.MARCO TEÓRICO:
2.1 Arduino Uno:es una plataforma de creación de electrónica de código abierto, la cual está basada en hardware y software libre, flexible y fácil de utilizar para los creadores y desarrolladores.

2.2 Sensor Óptico:Detectan la presencia de una persona o de un objeto que interrumpen el haz de luz que le llega al sensor.

2.3 Morreductor: Los reductores ó motorreductores son apropiados para el accionamiento de toda clase de máquinas y aparatos que necesitan reducir su velocidad en una manera segura y eficiente.  Las transmisiones de fuerza por correa, cadena o trenes de engranajes que aún se usan para la reducción de velocidad presentan una regularidad perfecta tanto en la velocidad como en la potencia transmitida,  mayor eficiencia en la transmisión de la potencia suministrada por el motor.
2.4 Llantas:

2.5 Rueda loca:

3. Evidencia del trabajo:



4. OBSERVACIONES:
  • Al momento de realizar las conexiones nos faltaron cables hembras por lo que se opto por alambres de cobre delgados para la conexiones.
  • Uno de nuestro sensores no podía ser calibrado para la distancia entre el suelo y la base del carro debido a que la rueda loca era muy grande.
  • Se busco una guía en Internet para realizar la programación.
5. CONCLUSIONES:

  • Al finalizar el laboratorio de logro armar el circuito de nuestro carro gracias a las simulaciones en tinkercad.
  • Se logro concluir que para poner una guía para que el carro siga su rutina es necesario colocar una cinta negra o algún material oscuro.
  • Se logro comprender las diferentes funciones de los códigos en la programación
Integrantes
Contreras Quispe, Erick
Puma Maldonado, Fabian 
Turpo Luque Diego

Laboratorio 15_2019

Laboratorio 15

      LABORATORIO N°15 Microcontroladores
Proyecto"Carro Seguidor de Lineas"

Integrantes:
  • Contreras Quispe Erick 
  • Puma Maldonado Fabian
  • Turpo Luque Diego
Introducción:

Código:
Int:
Los int (enteros) son el tipo de datos primario para el almacenamiento de números.
Void Setup:
El setup es la primera función en ejecutarse dentro de un programa en Arduino. Es, básicamente, donde se «setean» las funciones que llevará a cabo el microcontrolador.Aquí es donde establecemos algunos criterios que requieren una ejecución única. Por ejemplo, si nuestro programa va a usar comunicación serial, en el setup establecemos el comando Serial.begin para indicarle al programa que vamos a iniciar la comunicación serial.Si vamos a utilizar un pin determinado como salida de voltaje, usamos el pinMode para indicarle a Arduino que determinado pin funcionará como salida, usando el parámetro OUTPUT.
Serial.begin:
Establece la velocidad de datos en bits por segundo (baudios) para la transmisión de datos en serie. 
PinMode:
Configura el pin especificado para que se comporte como entrada o salida.
Void loop:
Loop en inglés significa lazo o bucle. La función loop en Arduino es la que se ejecuta un número infinito de veces. Al encenderse el Arduino se ejecuta el código del setup y luego se entra al loop, el cual se repite de forma indefinida hasta que se apague o se reinicie el microcontrolador.
DigitalRead:
Lee el valor de un pin digital especificado, ya sea HIGH o LOW.
Serial.print:
Imprime datos en el puerto serie como texto ASCII legible para humanos. Este comando puede tomar muchas formas. Los números se imprimen utilizando un carácter ASCII para cada dígito. Los flotadores se imprimen de manera similar como dígitos ASCII, por defecto con dos decimales. Los bytes se envían como un solo carácter. Los caracteres y las cadenas se envían tal cual. Por ejemplo-
Serial.print(78) da "78"
Serial.print(1.23456) da "1.23"
Serial.print('N') da "N"
Serial.print("Hello world.") da "Hola mundo".
If:
La if es una declaración que verifica si hay una condición y ejecuta la declaración o el conjunto de declaraciones en curso si la condición es 'verdadera'.
Else if:
Permite un mayor control sobre el flujo de código que el básico if declaración, al permitir múltiples pruebas para agruparse. Se else ejecutará una cláusula (si es que existe) si se if produce la condición en la declaración false. El else puede proceder con otra if prueba, de modo que se puedan ejecutar múltiples pruebas mutuamente excluyentes al mismo tiempo.
DigitalWrite:
Escriba un HIGH o un LOW valor en un pin digital.
Si el pin se ha configurado como OUTPUTcon pinMode (), su voltaje se establecerá en el valor correspondiente: 5V (o 3.3V en placas de 3.3V) para HIGH, 0V (tierra) para LOW.
Si el pin está configurado como INPUT, digitalWrite () habilitará (HIGH) o deshabilitará (LOW) el pullup interno en el pin de entrada. Se recomienda configurar pinMode () a INPUT_PULLUP para habilitar la resistencia de pull-up interna. Vea el tutorial Digital Pins para más información.
Si no se establece la pinMode () a OUTPUT, y conectar un LED a un pin, al llamar digitalWrite (HIGH), el LED puede aparecer tenue. Sin una configuración explícita pinMode (), digitalWrite () habrá habilitado la resistencia pull-up interna, que actúa como una gran resistencia limitadora de corriente.
Código para arduino:

int IR1 = 0;
int IR2 = 0;
//////////variables de PWM
int motor2A = 5;
int motor2B = 6;
//////////variables de los motores
int motor1A = 4;
int motor1B = 7;
void setup() {
  Serial.begin(9600);/////////Establece la velocidad de datos en bits por segundo(9600)
  pinMode(2, INPUT);/////////sensor 1
  pinMode(3, INPUT);/////////sensor 2
  ////////////salidas motor normales
  pinMode (motor1A, OUTPUT);
  pinMode (motor1B, OUTPUT);
  ///////////salidas motor PWM
  pinMode (motor2A, OUTPUT);
  pinMode (motor2B, OUTPUT);
}
void loop() {
  IR1 = digitalRead(2);
  IR2 = digitalRead(3);
  Serial.print(IR1);//////Imprime datos en el puerto serie(IR1)
  Serial.print(IR2);//////Imprime datos en el puerto serie(IR2)
  /////////////sentencias
  if (IR1 == 0 && IR2 == 0) {       
    parar();
  } 
  else if (IR1 == 0 && IR2 == 1) { 
    derecha();
  }  
  else if (IR1 == 1 && IR2 == 0) {
    izquierda();
  } 
  else if (IR1 == 1 && IR2 == 1) { 
    avanzar();
  }

delay(200);
}

//////////////funciones
void avanzar() {
  digitalWrite(motor1A, 1);
  digitalWrite(motor1B, 1);
  digitalWrite(motor2A, 150);
  digitalWrite(motor2B, 150);
}
void derecha() {
  digitalWrite(motor1A, 0);
  digitalWrite(motor1B, 1);
  digitalWrite(motor2A, 0);
  digitalWrite(motor2B, 150);

}
void izquierda() {
  digitalWrite(motor1A, 1);
  digitalWrite(motor1B, 0);
  digitalWrite(motor2A, 150);
  digitalWrite(motor2B, 0);

}
void parar() {
  digitalWrite(motor1A, 0);
  digitalWrite(motor1B, 0);
  digitalWrite(motor2A, 0);
  digitalWrite(motor2B, 0);

}

Imagen de la simulación en Tinkercad:
Vídeo:


Conclusiones:
  • El programa arduino trabaja con lenguaje C++ esto hace que el método al momento de realizar el código sea mas sencillo.
  • Los comandos usados para el código son sencillos y prácticos, no obstante cada uno tiene una forma de sintaxis.
  • El programa tinkercad es una plataforma virtual capaz de simular un circuito, nos ayudo con la simulación para el carro 
Integrantes
Contreras Quispe, Erick
Puma Maldonado, Fabian 
Turpo Luque Diego

Laboratorio 14_2019

Laboratorio 14
"Simulación del proyecto en proteus"


1.- Marco teórico
Los robot-tortuga son muy populares y trabajar con ellos resulta divertido. Por ese motivo su uso se está extendiendo en los centros educativos y en el mundo de los aficionados. Aunque sus posibilidades son muy amplias, normalmente los proyectos para los que se utilizan caen dentro de una de estas tres categorías: 1. Seguir el trazado de una línea. 2. Evitar obstáculos en el camino. 3. Recorrer un laberinto. Proteus pone a nuestra disposición un completo modelo eléctrico de un robot-tortuga que incluye motores y sensores gobernados por una placa Arduino. Y nos lo presenta dentro de un mundo de ‘realidad virtual’ intencionadamente simple pero, a la vez, muy flexible en el que es posible ver la evolución de nuestro robot-tortuga y simular todos sus movimientos. Controlar nuestro robot-tortuga utilizando el Diseñador Gráfico se simplifica enormemente mediante la utilización de los “métodos de alto nivel” que podemos incorporar dentro del flujograma que contiene la lógica de control. Alternativamente, es posible obtener una mayor flexibilidad y escribir programas tan complejos como deseemos utilizando la programación en el lenguaje C disponible con los equipos Arduino. Y, por supuesto, independiente del modo de programación seleccionado, Proteus pone a nuestra disposición un amplio y potente conjunto de herramientas de depuración y simulación con lo que podemos asegurarnos de que nuestro programa se comportará como realmente deseamos que lo haga, antes de proceder a cargar el código dentro de nuestro robot-tortuga del mundo real. Actualmente, Proteus incorpora dos modelos completos para la simulación de dos robot-tortuga con amplia presencia en el mercado: 

2.- Vídeo


Simulación



3.-Conclusiones
  • Logramos realizar la simulación en proteus exitosa mente aplicando una programación diferente a lo que vimos antes.
  • Realizamos e identificamos los componente de un diagrama de flujo.
Integrantes
Contreras Quispe, Erick
Puma Maldonado, Fabian 
Turpo Luque Diego

domingo, 1 de diciembre de 2019

Laboratorio 13_2019

Laboratorio 13
"Lectura de Entradas Analógicas"

1.- Marco teórico

"El sensor LM35"

El LM35 es un circuito electrónico sensor que puede medir temperatura. Su salida es analógica, es decir, te proporciona un voltaje proporcional a la temperatura. El sensor tiene un rango desde −55°C a 150°C. Su popularidad se debe a la facilidad con la que se puede medir la temperatura. Incluso no es necesario de un microprocesador o microcontrolador para medir la temperatura. Dado que el sensor LM35 es analógico, basta con medir con un multímetro, el voltaje a salida del sensor.
Para convertir el voltaje a la temperatura, el LM35 proporciona 10mV por cada grado centígrado. También cabe señalar que ese sensor se puede usar sin offset, es decir que si medimos 20mV a la salida, estaremos midiendo 2°C.

"El sensor DS18B20"

El DS18B20 es un sensor de temperatura en el cual se lleva la conversión analógico a digital dentro del encapsulado, facilitando el resultado de dicha conversión a través de una interfaz digital llamada 1-wire.
El sensor de temperatura DS18B20 se puede encontrar en diversas formas, entre las cuales destacamos 2 que son bastante comunes:
  • El encapsulado TO-92 (usado comúnmente en transistores).
  • El sensor tipo sumergible, que es fabricado por terceros utilizando sensores en encapsulado TO-92 colocados dentro de una cubierta impermeable de acero inoxidable.

2.- Vídeo


Simulación

Código 

Ejercicio 1




Ejercicio Final

3.-Conclusiones
  • Logramos realizar las lecturas en puertos analógicos, resolviendo los ejercicios planteados en el laboratorio. 
  • Utilizamos y configuramos el sensor de temperatura LM35.
  • Realizamos una lectura analógicas en la pantalla LCD.

martes, 12 de noviembre de 2019

Laboratorio 12_2019

Laboratorio 12
"Manejo del Timer y las Interrupciones"

1.- Marco teórico
Temporizador contador PIC


Un temporizador contador PIC es un registro que aumenta su valor en una unidad con cada 4 ciclos de reloj al cual se encuentre funcionando el micro controlador PIC, si por ejemplo la frecuencia del oscilador es de 4MHz, entonces  el ciclo de trabajo del microcontrolador PIC será de 1us, por lo que el temporizador contador PIC aumentará  su  valor de uno en uno en cada micro segundo; por ejemplo cuando el temporizador aumenta su valor en 10 unidades habrán transcurrido 10us.
El temporizador contador PIC puede aumentar sus valores de 0 a 255 si es de 8 bits como el timer0, o de 0 a 65535 si es de 16 bits como el timer1, cada vez que estos registros alcanzan su máximo valor se reinician, volviendo a contar desde su valor mínimo hasta su máximo, ademas pueden ser programados para provocar interrupciones.
Para el uso del temporizador contador PIC se cuenta además con un grupo de registros mediante los cuales se puede lo puede configurar de acuerdo a las necesidades que se tengan.
El registro temporizador contador PIC TMR1 puede ser utilizado para tareas de comparación, captura y el registro TMR2 es utilizado para la obtención de señales  de modulación de ancho de pulso o PWM, siendo para ello necesario el uso de otros registros.

2.- Vídeo



Simulación

Código 








3.-Conclusiones
  • Se utilizo 3 pulsadores para incrementar los segundos, minutos y darle a la cuenta regresiva haciendo la función de un temporizador.
  • Para congelar el temporizador en cero minutos y ceros segundos se utilizó la relación condicional de que si minutos es igual a -1, se detenga el temporizador.
  • Se debe usar un delay  después de presionar cada pulsador, esto con la finalidad de evitar falsos disparos.

martes, 5 de noviembre de 2019

Laboratorio 11_2019

Laboratorio 11
"Programación de una Pantalla LCD"

1.- Marco teórico

Descripción y funcionamiento de una pantalla LCD

El LCD o pantalla de cristal líquido es un dispositivo empleado para la visualización de contenidos o información de una forma gráfica, mediante caracteres, símbolos o pequeños dibujos dependiendo del modelo. 
En este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían en función de cada modelo.


¿DDRAM y CGROM?

Son las dos zonas de memoria del LCD.
La memoria DDRAM(Data Display Ram): corresponde a una zona de memoria donde se almacenan los caracteres que se van a representar en pantalla. Es decir es la memoria donde se almacenan los caracteres a mostrar con su correspondiente posición.

La memoria CGROM es una memoria interna donde se almacena una tabla con los caracteres que podemos visualizar en el lcd. En la imagen podemos ver un ejemplo de la tabla con un contenido de 192 caracteres.


La memoria CGRAM(Character Generator Ram): en ella se pueden almacenar nuestros propios caracteres.


La librería del LCD:

Para poder visualizar los caracteres o símbolos en el LCD es necesario que en el programa de código fuente a emplear, incluyamos la librería de este. 
En este caso empleamos la librería "lcd.c", la cual hemos modificado. Siempre que utilicemos una librería de este tipo tendremos que analizarla para saber cuales son los pines de control y los pines para el Bus de datos, en este caso podemos observar que están definidos al comienzo de la misma.

#define LCD_ENABLE_PIN  PIN_D0
#define LCD_RS_PIN      PIN_D1
#define LCD_RW_PIN      PIN_D2
#define LCD_DATA4       PIN_D4   
#define LCD_DATA5       PIN_D5  
#define LCD_DATA6       PIN_D6 
#define LCD_DATA7       PIN_D7 

En el resto de la librería se puede encontrar todas las estructuras necesarias así como las funciones que nos permiten utilizar nuestro LCD.
Podemos encontrar funciones como :

lcd_init: inicializa el lcd.
lcd_gotoxy: establece la posicion de escritura en el lcd.
lcd_putc: nos muestra un dato en la siguiente posición del lcd, podemos emplear funciones como \f para limpiar el display, \n cambio a la segunda línea, \b mueve una posición atrás.
lcd_getc(x,y): devuelve caracteres a la posición x,y.
Otras funciones: lcd_send_nibble(BYTE n), lcd_send_byte(BYTE address, BYTE n). 


Aquí se puede ver un ejemplo de una sencilla programación en una Pic control, y muestra de datos en el LCD, son datos inespecíficos que no muestran ninguna información.

2.- Vídeo



Simulación

Código 






3.-Conclusiones

  • Se utilizo el comando "lcd_gotoxy" para poder establecer y escribir en el LCD teniendo en cuenta las filas.
  • Para hacer la condición de bucle en el buzzer utilizamos la función for.
  • Realizamos un habilitador y des habilitador en el programa a evaluar,
4.- Referencia

viernes, 1 de noviembre de 2019

Laboratorio 10_2019


Laboratorio 10
"Programación con Display de 7 segmentos"

1.- Marco teórico

TIPOS DE VARIABLES

Enteros
Los enteros son el tipo de dato más primitivo en C. Se usan para representar números enteros. Pero siempre se pueden encontrar otras aplicaciones para los números enteros. En general se pueden usar para representar cualquier variable discreta.
Los tipos de datos enteros son: short, int, long y long long, cada uno representando un número entero de un tamaño o capacidad determinado. Según el compilador y la plataforma de hardware, cada uno de estos tipos de dato puede ocupar desde 1 byte hasta 8 bytes en memoria (para más detalles busca en la referencia).
Además, el lenguaje C hace la distinción de si el entero es con signo (signed) o sin signo (unsigned). En caso de que no se declare si es con signo o sin signo, se toma con signo.

Algunos ejemplos de declaraciones de enteros:
int a;
  unsigned int a;
  signed long a;
  signed long long a = 10000000;
Todos los números son representados en memoria mediante una cadena de bits. En el caso de los números con signo, el bit más significativo es el que se usa para representar el signo. La representación de los números negativos se realiza mediante el complemento a dos, que es una técnica que permite operar con los números negativos de forma lógica.
A modo de ejemplo, la representación en memoria del número -8 en una variable de 2 bytes, entera, con signo, sería la siguiente:
1111111111111000

Reales
Los tipos de datos que representan a los números reales, ya que utilizan un sistema de representación basado en la técnica de coma flotante, que permite operar con números reales de diversas magnitudes, mediante un número decimal llamado mantisa y un exponente que indica el orden de magnitud.
El tipo de dato flotante en lenguaje C sólo tiene dos tamaños: el float y el double, que son 4 bytes y 8 bytes respectivamente. Se los puede utilizar tanto para representar números decimales, como para representar números enteros con un orden de magnitud muy grande.
La forma de declarar una variable flotante es escribiendo en una línea uno de los tipos de datos flotantes y a continuación el nombre de la variable y tal vez algún valor que se les quiera dar.
Algunos ejemplos:

float a;
  double a = 1e23;
  double a = 3.1416;
  float a = 4e-9;
  double a = -78;
 Hay que tener en cuenta que aunque los valores flotantes son más convenientes para algunas aplicaciones, hay casos en los que se prefieren los enteros. Esto se debe a que los números flotantes no necesariamente tienen soporte de hardware, en particular en las plataformas integradas. Una alternativa que se utiliza en estas situaciones es interpretar los enteros como decimales de forma que 150 se interprete como 1.5 y 2345 como 23.45.

2.- Vídeo


Simulación


Código






3.-Conclusiones
  • Reconocimos los comandos del software de programación de CCS C COMPILER. 
  • Realizamos la simulación en ISIS PROTEUS del mismo programa.
  • Identificamos y programamos el display de 7 segmentos.