Mostrando entradas con la etiqueta Inf_G10per1. Mostrar todas las entradas
Mostrando entradas con la etiqueta Inf_G10per1. Mostrar todas las entradas

miércoles, 30 de enero de 2019

Clase 6 Lectura de variables externas con Arduino

Vamos a realizar otros ejemplos de lectura de variables, los ejercicios que se expondrán a continuación debes escribirlos  y probarlos en el IDE de arduino y posteriormente probarlos físicamente utilizando el arduino uno.

Como estudiantes deben escribir el pseudocódigo, y el diagrama de flujo; lo cual les permitirá entender cada parte de los programas, ademas de otras funciones con las cuales harán mas extenso su nivel de programación.

Programa 1

// Project 5 - efecto de luces
// Crear un arreglo de 8 pines para LED
/* DESCRIBE EL FUNCIONAMIENTO DEL SIGUEINTE PROGRAMA
*/

byte ledPin[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int ledDelay=65; // espera entre cambios
int direccion = 1;
int recorridoLED = 0;
unsigned long Tiempo;

void setup()
{
// set all pins to output
for (int x=0; x<10; x++)
{
pinMode(ledPin[x], OUTPUT); }
Tiempo = millis();
}

void loop()
{
// if it has been ledDelay ms since last change
if ((millis() - Tiempo) > ledDelay)
{
changeLED();
Tiempo = millis();
}
}

void changeLED()
{
// turn off all LED's
for (int x=0; x<10; x++)
{
digitalWrite(ledPin[x], LOW);
}

// cambiar el recorridoLED
digitalWrite(ledPin[recorridoLED], HIGH);
// recorridoLED incrementa por el valor de direccion
recorridoLED += direccion;
// Cambiamos de dirección si llegamos al final.
if (recorridoLED == 9)
{
direccion = -1;
}

if (recorridoLED == 0)
{
direccion = 1;
}

}

Programa 2

byte ledPin[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int ledDelay; // espera entre cambios
int direccion = 1;
int recorridoLED = 0;
unsigned long Tiempo;
int potpin=14;

void setup()
{
// set all pins to output
for (int x=0; x<10; x++)
{
pinMode(ledPin[x], OUTPUT); }
Tiempo = millis();
}

void loop()
{
// leer el valor del potenciometro
ledDelay = analogRead(potpin);
// if it has been ledDelay ms since last change
if ((millis() - Tiempo) > ledDelay)
{
changeLED();
Tiempo = millis();
}
}

void changeLED()
{
// turn off all LED's
for (int x=0; x<10; x++)
{
digitalWrite(ledPin[x], LOW);
}

// cambiar el recorridoLED
digitalWrite(ledPin[recorridoLED], HIGH);
// recorridoLED incrementa por el valor de direccion
recorridoLED += direccion;
// Cambiamos de dirección si llegamos al final.
if (recorridoLED == 9)
{
direccion = -1;
}

if (recorridoLED == 0)
{
direccion = 1;
}

}

Como observas los programas 1 y 2 son semejantes su diferencia radica en la utilización de los pines análogos del arduino para los tiempos de retardo

El Arduino tiene 6 entradas analógicas.
Entradas / salidas con un convertidor de analógico a digital de 10 bits.(0000000000 a 1111111111) Esto significa que el pin análogo puede leer en voltajes entre 0 y 5 voltios, en números enteros para el arduino estos valores varían entre 0 (0 voltios) y 1023 (5 voltios). 
Esto da una resolución de 5 voltios / 1024 bit o 0.0049
Voltios (4.9mV) por unidad. Necesitamos ajustar el retardo (delay) usando el potenciómetro para que podamos
simplemente utilizará los valores directos leídos desde el pin para Ajusta este tiempo entre 0 y 1023 milisegundos. Nosotros
Tenga en cuenta que no se necesita configurar un pin analógico para ser entrada o salida como si sucede con un pin digital.



Clase 5 Lectura de variables externas con Arduino

Sentencias de control

Un programa es una sucesión de sentencias o de ordenes que son ejecutadas secuencialmente. tal como se ha realizado en la clase anterior; por ejemplo.
digitalWrite(ledPin, HIGH);

delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);

ahora vamos a trabajar con unas secuencias que nos permiten tomar decisiones, 
modificar el flujo del programa introduciendo ciclos y condicionales; estas se llaman sentencias de control.

if (): La sentencia if es un ejemplo de una estructura de control y su propósito es verificar si una determinada condición se ha cumplido o no, como por ejemplo averiguar si un valor analógico está por encima de un cierto número, y ejecutar una serie de declaraciones (operaciones) que se escriben dentro de llaves, si es verdad. Si es falso (la condición no se cumple) el programa salta y no ejecuta las operaciones que están dentro de las llaves. 

if… else: Es una estructura que se ejecuta en respuesta a la idea “si esto no se cumple haz esto otro”. Por ejemplo, si se desea probar si se esta presionando un pulsador, y realizar una tarea si la entrada fue o esta en alto, o hacer una tarea distinta si la entrada es baja.

if (inputPin == HIGH) 

{ 
instruccionesA
 } 
else 
{
instruccionesB
}
else: puede ir precedido de otra condición de manera que se pueden establecer varias estructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma que sean mutuamente excluyentes pudiéndose ejecutar a la vez. Es incluso posible tener un número ilimitado de estos condicionales. Recuerde sin embargo que sólo un conjunto de declaraciones se llevará a cabo dependiendo de la condición probada.

for(): Se usa para repetir un bloque de sentencias encerradas entre llaves un número determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se vuelve a testear la condición. La declaración for tiene tres partes separadas por ';' , veamos el ejemplo de su sintaxis:

for (inicialización; condición; expresión)
 {
Instrucciones;
 }

La inicialización de una variable local se produce una sola vez y la condición se testea cada vez que se termina la ejecución de las instrucciones dentro del bucle. Si la condición sigue cumpliéndose, las instrucciones del bucle se vuelven a ejecutar. Cuando la condición no se cumple, el bucle termina.

Vamos a escribir el siguiente proyecto, el estudiante debe interpretar las lineas o códigos y lo que sucede en las sentencias de control

La función millis() me devuelve el número de milisegundos desde que Arduino se ha reseteado, dado que millis devuelve un unsigned long puede tener un valor de hasta 4.294.967.295 que son 49 días, 17 horas, 2 minutos, 47 segundos y 292 milisegundos, por lo tanto al cabo de ese periodo el contador se resetea.

// Project 4 - semaforo interactivo
// asignación de pines

int rojocarro = 5;//pin 5 luz roja del semáforo vehicular

int amarcarro = 6;

int verdecarro = 7;

int rojopea = 8; //pin 8 luz roja peatonal
int verdepea = 9;
int pulsador = 10;// pin del pulsador
int Timecruce = 3000; // time para cruzar
unsigned long changeTime=0; // tiempo desde que se presionó el botón
void setup() 
{
pinMode(rojocarro, OUTPUT);
pinMode(amarcarro, OUTPUT);
pinMode(verdecarro, OUTPUT);
pinMode(rojopea, OUTPUT);
pinMode(verdepea, OUTPUT);
pinMode(pulsador, INPUT);// pulsador declarado como entrada


 digitalWrite(verdecarro, HIGH);//prendo el led verde vehicular
 digitalWrite(rojopea, HIGH);//prendo el led rojo peatonal
}

void loop()
 {
   int estado = digitalRead(pulsador);//declaro la variable estado y le         asigno lo que se lee en el pulsador
  /* estaremos verificando si se presiona el pulsador, y si han  pasado mas de 5 segundos desde que se presiono */
  if (estado == HIGH && (millis() - changeTime) > 5000
     {
      // llamamos la función para cambiar las luces
      changeLights();
     }
  }

void changeLights() 
{
 digitalWrite(verdecarro, LOW);// verde vehicular apagado
 digitalWrite(amarcarro, HIGH);
 delay(2000);
digitalWrite(amarcarro, LOW);
digitalWrite(rojocarro, HIGH);
delay(1000);
digitalWrite(rojopea, LOW);// apago el rojo peatonal que se encontraba prendido
digitalWrite(verdepea, HIGH);
delay(Timecruce); //espero el tiempo que se asigno al cruce

/* vamos a hacer que el led verde peatonal parpadee, declaramos una variable X para realizar el conteo y la iniciamos en cero, la condición sera que mientras x sea menor que 10, se ejecutara el programa, despues cada vez que se realice el bucle, x se incrementa en uno, para alcanzar el valor de 10 y que salga*/
    for (int x=0; x<10; x++
    {
     digitalWrite(verdepea, HIGH);
     delay(200);
     digitalWrite(verdepea, LOW);
     delay(200);
     }
// prendemos la luz peatonal roja
digitalWrite(rojopea, HIGH);
delay(500);
digitalWrite(amarcarro, HIGH);
digitalWrite(rojocarro, LOW);
delay(1000);
digitalWrite(verdecarro, HIGH);
digitalWrite(amarcarro, LOW);
// guardar o grabar el tiempo desde el ultimo cambio de luces 
changeTime = millis();
// depues se regresa al bucle principal
}

este ejemplo corresponde al proyecto 4, de Earthshine Design Arduino Starter Kit Manual, tomado de http://math.hws.edu/vaughn/cpsc/226/docs/askmanual.pdf



Clase 4 Estructuras de lenguaje, variables y operadores

La programación se refiere al proceso de creación de un programa de computadora mediante la aplicación de procedimientos lógicos. La programación se desarrolla en distintos lenguajes, que son códigos estructurados que cobran sentido en determinados contextos de uso.

Para programar el Arduino se utiliza el IDE de Arduino (Integrated Development Environment),ambiente de Desarrollo integrado; es un software libre, que te permite programar en el idioma que el arduino entiende. En este caso es el lenguaje C. El IDE te permite escribir un programa de computadora, es decir el paso a paso de las instrucciones que luego subes al Arduino; para que  el ejecute esas instrucciones e interactue con el mundo exterior. 


Mi primer proyecto en arduino.

Para este primer proyecto trabajaremos en la forma de declarar una variable, definir la forma de trabajo de los pines; para lograr esto se hara parpadear un LED, ademas podremos alternar ese parpadeo con las instrucciones necesarias para que ese LED prenda y apague, cuando reciba la orden o instrucción de un pulsador.

A continuación escribe en el simulador el siguiente código,


// Projecto 1 - LED parpadea
int ledPin = 10;

void setup() 
{
pinMode(ledPin, OUTPUT);
}

void loop()
 {
 digitalWrite(ledPin, HIGH);
 delay(1000);
 digitalWrite(ledPin, LOW);
 delay(1000);
 }

Observa que se ha escrito lo siguiente

// Projecto 1 - LED parpadea, esto corresponde al nombre del proyecto; las barra inclinadas sirven para realizar comentarios y que el programa no lo detecte como código, las barras // permiten comentar una linea de código, pero si deseas escribir mas de una linea, debes utilizar /* texto */. Los comentarios son esenciales en tu código para ayudarte a entender lo que está pasando y cómo trabaja tu código.

/* Todo el texto dentro de la barra y los asteriscos se considera un comentario y sera ignorado por el compilador */

int ledPin = 10;

esta linea de código declara una variable, indica que el led sera conectado al pin 10, por eso se le da el nombre de ledpin; el signo =, sirve para designar un valor.


void setup() 
{
pinMode(ledPin, OUTPUT);
}
 void setup() Se ejecuta una vez y solo una vez al inicio del programa, y es donde escribes instrucciones generales para
preparar el programa antes de que se ejecute el ciclo principal.

pinMode(ledPin, OUTPUT); // Esta función se utiliza cual va a ser el papel que cumplirá el pin especificado, OUTPUT significa que se comportara como una salida, es decir que se conectara  un dispositivo que nos permita visualizar una acción, un led, un motor, un buzzer (parlante), etc. ; si se declara como INPUT, es entrada y significa que el pin estará a la espera de recibir una orden, a el se conectaran pulsadores, sensores.


void loop()
 {
 digitalWrite(ledPin, HIGH);
 delay(1000);
 digitalWrite(ledPin, LOW);
 delay(1000);
 }

La función loop() es la función principal del programa y
corre continuamente mientras nuestro Arduino esté encendido. Cada declaración dentro de la función loop()(dentro de la llaves) se lleva a cabo, paso a paso, hasta que se alcanza la parte inferior de la función, entonces el bucle comienza de nuevo en la parte superior de la función, y así sucesivamente para siempre o hasta que apague el Arduino o se presione el botón Interruptor de reinicio.
En este proyecto queremos que el LED se encienda,  y permanezca encendido durante un segundo, apaga y permanece apagado por un segundo, y luego repetir. Por lo tanto, los comandos para decirle al Arduino para hacer eso está contenidos dentro del bucle ().

digitalWrite(ledPin, HIGH); digitalWrite se utiliza para indicar el valor digital que se desea colocar en el pin especificado, en este caso ledpin que corresponde al pin físico numero 10; la variable constante HIGH indica un valor alto, es decir 5 voltios, si se utiliza LOW indicara 0 voltios o valor bajo, conexión a tierra. 

delay() delay es una instrucción que realiza un retardo, espera y se expresa en milisegundos, es decir que para para por un tiempo de 1 segundo debes escribir 1000 dentro del parentesis, 1000 milisegundos equivalen a 1 segundo

Ahora, vamos a realizar Un semáforo que cumpla las siguientes caracteristicas. (Observa la imagen)




 escribe el siguiente código:
/* aquí escribirás, la forma en que tu piensas trabaja el semáforo, primero escribe el código y luego interpreta lo escrito; también debes comentar cada linea de código indicando que has interpretado lo escrito   */

int ledrojo = 4;
int ledamarillo = 5;
int ledverde = 6;


void setup() 
{
pinMode(ledrojo, OUTPUT);
pinMode(ledamarillo, OUTPUT);
pinMode(ledverde, OUTPUT);
}

void loop()
 {
 digitalWrite(ledrojo, HIGH);
 delay(5000);

 digitalWrite(ledamarillo, HIGH);
 delay(2000);

digitalWrite(ledrojo, LOW);
digitalWrite(ledamarillo, LOW);
digitalWrite(ledverde, HIGH);

delay(5000);
digitalWrite(ledverde, low);
digitalWrite(ledamarillo, HIGH);

delay(2000);

digitalWrite(ledamarillo, LOW);
 }

RETO

Escribe el código para 2 semáforos, recuerda que es muy importante que para evitar colisiones o choques, es necesario asegurar los tiempos para evitar que ambos semáforos estén en verde al mismo tiempo.

Clase 3 Estructuras de lenguaje, variables y operadores

¿Que es arduino?

Arduino es una pequeña computadora que Se puede programar para procesar entradas y salidas,
hacia y desde el chip, es una plataforma de computación integrada, lo que significa que es Un sistema interactivo, que a través del uso de hardware yl software pueden interactuar con él.

Un uso sencillo del Arduino seria enciende una luz por un período de tiempo establecido, digamos 30
segundos, después de presionar un botón. En este ejemplo, el Arduino tendría una lámpara y un botón conectados; el Arduino se sentaría pacientemente a esperar a que se pulse el botón. Cuando se presione el botón se encendería la lámpara y comenzaría a contar 30 segundos despues de contar 30 segundos apaga la lámpara y luego sigue sentado allí esperando a que se vuelva a presionar el botón.


estructura de código en arduino

Un programa de Arduino se pueden dividir en tres partes principales: Estructura, valores (variables y constantes), y funciones. La estructura básica de programación de Arduino es bastante simple . y divide la ejecución en dos partes: setup y loop. 

  • Setup() constituye la preparación del programa: En la función Setup() se incluye la declaración de variables y se trata de la primera función que se ejecuta en el programa. Esta función se ejecuta una única vez y es empleada para configurar el pinMode (p. ej. si un determinado pin digital es de entrada o salida) e inicializar la comunicación serie

  • loop() es la ejecución: La función loop() incluye el código a ser ejecutado continuamente (leyendo las entradas de la placa, salidas, etc.).

Tipos de datos


Los tipos de datos en C se refiere a un sistema amplio usado para declarar variables o funciones de diferentes tipos. El tipo de una variable determina la cantidad de espacio que ocupa en el almacenamiento y cómo se interpreta el patrón de bits almacenado.
byte – Byte almacena un valor numérico de 8 bits sin decimales. Tienen un rango entre 0 y 255. 

int – Enteros son un tipo de datos primarios que almacenan valores numéricos de 16 bits sin decimales comprendidos en el rango 32,767 a -32,768.

long – El formato de variable numérica de tipo extendido “long” se refiere a números enteros (tipo 32 bits = 4 bytes) sin decimales que se encuentran dentro del rango -2147483648 a 2147483647.

float – El formato de dato del tipo “coma flotante” o “float” se aplica a los números con decimales. Los números de coma flotante tienen una mayor resolución que los de 32 bits que ocupa con un rango comprendido 3.4028235E+38 a -3.4028235E+38.

boolean – Un booleano solo tiene dos valores true y false. Cada booleano ocupa un byte de memoria

char – Un char representa un carácter que ocupa 1 byte de memoria. Los caracteres simples se representan con comillas simples ‘a’ y para múltiples caracteres o strings se representan con comillas dobles “Hola!”.

variables y constantes

Las variables en lenguaje de programación C, que utiliza Arduino, tienen una propiedad denominada alcance. Un ámbito es una región del programa y hay tres lugares donde las variables pueden ser objeto de declaración. Son -
  • Dentro de una función o un bloque, que se llama variables locales.
  • Fuera de todas las funciones, que se llama variables globales.

Las variables locales

Son las variables declaradas dentro de una función o bloque son variables locales. Pueden ser utilizados solamente por los estados que están dentro de esa función o bloque de código. Estas variables no funcionan fuera de su propia función. 
Void setup () {

}

Void loop () {
   int x , y ;
   int z ; Local variable declaration
   x = 0;
   y = 0; actual initialization
   z = 10;
}

Variables globales

Las variables globales se definen fuera de todas las funciones, por lo general en la parte superior del programa, mantienen su valor durante todo el programa.
Una variable global se puede utilizar por cualquier función. Es decir, una variable global está disponible para su uso durante todo el programa después de su declaración.
Int T , S ;
float c = 0 ; Global variable declaration

Void setup () {

}

Void loop () {
   int x , y ;
   int z ; Local variable declaration
   x = 0;
   y = 0; actual initialization
   z = 10;
}

operadores

Un operador es un símbolo que indica la realización funciones matemáticas o lógicas específicas.
  • Operadores aritméticos
  • Los operadores de comparación
  • Operadores booleanos
  • Los operadores bit a bit
  • Los operadores compuestos

Instrucciones de control

las estructuras de toma decisiones requieren que el programador especifique una o más condiciones para ser evaluado o probado por el programa. Debe ser, junto con una declaración o sentencias que se ejecutarán si la condición se determina para ser verdad, y, opcionalmente, otras sentencias que se ejecutarán si la condición se determina que es falsa.

bucles

Los lenguajes de programación proporcionan diversas estructuras de control que permiten rutas de ejecución más complicados.
Una sentencia de bucle nos permite ejecutar una sentencia o grupo de sentencias varias veces y que sigue es la forma general de una sentencia de bucle en la mayoría de los lenguajes de programación

Funciones I / O

Las patas de la placa Arduino se pueden configurar como entradas o salidas. Vamos a explicar el funcionamiento de los pasadores en esos modos. Es importante tener en cuenta que la mayoría de pines analógicos Arduino, se puede configurar y utilizar, exactamente de la misma manera que los pines digitales.




Clase 2 Electrónica básica y Arduino

Componentes mas utilizados en Proyectos con arduino

Conozcamos  algunos componentes electrónicos, que utilizaremos en nuestros proyectos con arduino, 
ademas de un software para simulación de proyectos con arduino.

Led: (diodo emisor de luz): es una fuente de luz constituida por un material semiconductor dotado de dos terminales.
para su conexión es necesario disponer de una resistencia que limite la corriente y así no dañarlo, su voltaje de operación va desde 2v hasta 3 v, la corriente que soporta es de aprox. 20 mili Amperios

ResistenciaEs un dispositivo electrónico de dos terminales y que no tiene polaridad, la unidad de medida del resistor es el ohm (Ω). Básicamente es un componente que limita la entre sus terminales y por lo tanto es un elemento pasivo que resiste el flujo de electrones


Fotoresistencia: Una fotorresistencia o LDR (por sus siglas en inglés “light-dependent resistor”) es un componente electrónico cuya resistencia varía en función de la luz.


El valor de resistencia eléctrica de un LDR es bajo cuando hay luz incidiendo en él (puede descender hasta 50 ohms) y muy alto cuando está a oscuras 
(varios megaohmios).




Pulsador: Es un dispositivo utilizado para realizar cierta función.Los botones son por lo general activados, al ser pulsados con un dedo. Permiten el flujo de corriente mientras son accionados. Cuando ya no se presiona sobre él vuelve a su posición de reposo. Puede ser un contacto normalmente abierto en reposo NA o NO (Normally Open en Inglés), o con un contacto normalmente cerrado en reposo NC. 


Potenciómetro: Es una resistencia cuyo valor de resistencia es variable. De esta manera, indirectamente, se puede controlar la intensidad de corriente que fluye por un circuito si se conecta en paralelo, o la diferencia de potencial al conectarlo en serie.



Transistor: Es un dispositivo electrónico semiconductor utilizado para entregar una señal de salida en respuesta a una señal de entrada. Cumple funciones de amplificador, oscilador, conmutador o rectificador. El término «transistor» es la contracción en inglés de transfer resistor («resistencia de transferencia») 


Software para simulación: UnoArduSim
 es una herramienta educativa libre y gratuita. Fue creada por el Profesor Stan Simmons de la Universidad de Queen´s.  Con el podemos ver en la pantalla de nuestro computadorr una placa Arduino ademas de otros dispositivos comunes de entrada y salida.

observa el siguiente vídeo




actividad

1. Investiga, escribe y dibuja en tu cuaderno la forma de conexión, simbología y usos de los elementos antes mencionados.

2. Observa el siguiente vídeo, descarga el Arduino IDE y escribe las características del programa; !prepárate para iniciarte en el mundo arduino¡