Herramientas de usuario

Herramientas del sitio


proyectos:programacion_bats

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
proyectos:programacion_bats [2018/01/19 14:19] – [Un mundo binario] Félix Sánchez-Temblequeproyectos:programacion_bats [2022/07/12 08:12] (actual) – [Tipos de variables] Félix Sánchez-Tembleque
Línea 5: Línea 5:
 {{:proyectos:bats:bats.jpg|}} {{:proyectos:bats:bats.jpg|}}
  
-BATS -Bricolabs Arduino Training Shield- es una idea original de Sergio Alvariño de una placa escudo (shield) para Arduino UNO con muchos de los componentes que se utilizan en los cursos para el aprendizaje inicial de esta plataforma. La idea es doble+BATS -Bricolabs Arduino Training Shield- es una idea original de Sergio Alvariño y Tucho Méndez de una placa escudo (shield) para Arduino UNO con muchos de los componentes que se utilizan en los cursos para el aprendizaje inicial de esta plataforma. La idea es doble
    
   * En cuanto al hardware: aprender técnicas de soldadura básica.   * En cuanto al hardware: aprender técnicas de soldadura básica.
   * En cuanto al software: aprender ideas básicas de programación.   * En cuanto al software: aprender ideas básicas de programación.
 +  * En cuanto al diseño: aprender a usar KiCAD diseñando la PCB de BATS.
  
-No creemos que exista una edad mínima exacta para empezar con esto. Tentativamente 10 años puede estar bien con supervisión. 
  
-Para los más avanzados, en [[https://github.com/brico-labs/BATS|Github]] tenemos un tutorial para diseñar la placas de circuito impreso de BATS con KiCAD. Ahí también hay programas de ejemplo para la BATS.+Para los más avanzados, en esta otra [[https://bricolabs.cc/wiki/proyectos/pcb_bats|entrada]] tenemos un tutorial para diseñar la placas de circuito impreso de BATS con KiCAD. El tutorial para montarla está en este otro [[https://bricolabs.cc/wiki/proyectos/montaje_bats|enlace]].
  
-Esta entrada de la Wiki se refiere a la programación de proyectos sencillos una vez montada la placa. El tutorial para montarla está en este [[https://bricolabs.cc/wiki/proyectos/montaje_bats|enlace]].+Esta entrada de la Wiki se refiere a la programación de proyectos sencillos una vez montada la placa. No creemos que exista una edad mínima exacta para empezar con estoTentativamente 10 años puede estar bien con algo de ayuda.
  
 Los proyectos tendrán forma de programas de Arduino . En cada uno se mostrará el código de varios ejemplos de más sencillo a más complejo, y se propondrá una tarea sin pistas. Un programa no es nada más que una lista ordenada de tareas en un lenguaje que entienda el ordenador que las va a hacer. Los proyectos tendrán forma de programas de Arduino . En cada uno se mostrará el código de varios ejemplos de más sencillo a más complejo, y se propondrá una tarea sin pistas. Un programa no es nada más que una lista ordenada de tareas en un lenguaje que entienda el ordenador que las va a hacer.
Línea 299: Línea 299:
 Esta tarea está pensada para reforzar el concepto de salida analógica y divertirse un poco mezclando luces de colores. Esta tarea está pensada para reforzar el concepto de salida analógica y divertirse un poco mezclando luces de colores.
  
-===== Proyecto 4. Compartir programas =====+===== Proyecto 4: Entradas digitales y analógicas ===== 
 + 
 +==== Información desde el exterior ==== 
 + 
 +Podemos interpretar las entradas de datos a Arduino como la información que tenemos del exterior por nuestros sentidos. 
 + 
 +{{:proyectos:gpio.png}} 
 + 
 +==== Pulsar un botón ==== 
 + 
 +En el caso de las entradas digitales, la información será como lo visto para las salidas: si/no, encendido/apagado, uno/cero. Empezaremos con la más sencilla: un interruptor o un botón, que cuando lo pulsemos cambiará de estado. Como para las salidas, necesitamos declarar la función del pin antes de usarlo. En la shield tenemos los dos botones conectados a los pines 11 y 12. Para ver su estado, vamos a usar el monitor serie. 
 + 
 +<code> 
 +void setup() 
 +
 +  pinMode(11,INPUT); // vamos a usar el pin 11 como entrada 
 +  Serial.begin(9600); // decimos a Arduino que vamos a usar el monitor serie 
 +
 + 
 +void loop() 
 +
 +  int entrada = digitalRead(10); 
 +  Serial.println(entrada); 
 +  delay(10); 
 +
 + 
 +</code> 
 + 
 +Subiendo el código y abriendo el monitor serie podremos ver lo que sucede cuando pulsamos los botones. El IDE tiene un programa de ejemplo parecido 
 + 
 +**Archivo>Ejemplos>01.Basics>DigitalReadSerial**  (cambiar el pin digital 2 por el 11/12). 
 + 
 +==== Encender la luz ==== 
 + 
 +Podemos unir la información de entrada con la de salida enlazando un botón con un led. 
 + 
 +<code> 
 +void setup() 
 +
 +  pinMode(11,INPUT); // pin 11 con un botón 
 +  pinMode(2, OUTPUT); // pin 2 con el led verde 
 +
 + 
 +void loop() 
 +
 +  int entrada = digitalRead(10); 
 +  digitalWrite(2,entrada); 
 +  delay(10); 
 +
 + 
 +</code> 
 + 
 +==== Entradas analógicas ==== 
 + 
 +Arduino tiene varios pines con entradas que son capaces de medir un valor intermedio entre LOW (0 voltios) y HIGH (5 voltios). Para medir algunos parámetros (temperatura, distancia…) utilizaremos sensores que leeremos con una entrada analógica. La shield tiene dos resistencias variables (potenciómetros) que pueden simular una entrada analógica para ver cómo se usa. 
 + 
 +El IDE tiene un ejemplo que lee una entrada y muestra el resultado por el monitor serie. 
 + 
 +**Archivo>Ejemplos>01.Basics>AnalogReadSerial**: cambiar el pin A0 por el A1/A2. 
 + 
 +Una vez subido el programa y abierto el monitor serie giraremos el potenciómetro para ver el resultado. El número que muestra el monitor serie será 0 en un extremo, 1023 en el otro y un valor proporcional para valores intermedios. 
 + 
 +==== Tipos de variables ==== 
 + 
 +Hasta ahora hemos definido variables con un nombre, y les hemos puesto por delante la coletilla 'int' pero sin contar qué significa. Cuando creamos una variable tenemos que decirle a Arduino qué tipo de números -y otras cosas que no lo son- va a almacenar. Veremos ahora los tipos más comunes: 
 + 
 +  - 'int': en las variables //integer// almacenaremos números enteros. Positivos o negativos, pero sin decimales. 
 +  - 'float': en las variables //floating point// almacenaremos números reales. Positivos o negativos, con decimales. 
 + 
 +Cuando leemos una entrada analógica, obtenemos un número entero entre 0 y 1023, que se corresponde con una tensión en voltios de 0 a 5 según una regla de tres. El programa de ejemplo 
 + 
 +**Archivo>Ejemplos>01.Basics>ReadAnalogVoltage** 
 + 
 +lee el valor en una entrada (entero) y lo convierte en un número real de 0 a 5 con los decimales que correspondan. 
 + 
 +Otro tipo de variable común es 'boolean', que es una condición y sólo puede tener valores 'TRUE' o 'FALSE', o bien 1 y 0. 
 + 
 +==== Tarea 4: Regular la luz ==== 
 + 
 +Leer una entrada (de uno de los dos potenciómetros) y en proporción a ella encender un led de forma variable. 
 +===== Proyecto 5: Tareas condicionadas ===== 
 + 
 +==== Sentencia if-then ==== 
 + 
 +Con mucha frecuencia querremos que nuestro programa haga una determinada tarea, pero sólo si se cumple una condición. La forma de hacerlo es con una sentencia if-then (si-entonces). La forma básica es con la instrucción if, después la condición entre paréntesis () y la lista de tareas entre corchetes {}. 
 + 
 +<code> 
 +if (condición) 
 +
 +  // tareas a realizar si se cumple la condición 
 +
 + 
 +</code> 
 + 
 +Una forma más completa es tener una tarea alternativa si la condición no se cumple. 
 + 
 +<code> 
 +if (condición) 
 +
 +  // tareas a realizar si se cumple la condición 
 +
 +else 
 +
 +  // tareas a realizar si NO se cumple la condición 
 +
 + 
 +</code> 
 + 
 +La condición será una expresión matemática (igual, mayor, menor…). El programa anterior que enlazaba el botón con el led puede hacerse también de este modo 
 + 
 +<code> 
 +void setup() 
 +
 +  pinMode(11,INPUT); // pin 11 con un botón 
 +  pinMode(2, OUTPUT); // pin 2 con el led verde 
 +
 + 
 +void loop() 
 +
 +  int entrada = digitalRead(10); 
 +  if (entrada == 1) // la comparación de igualdad de dos números se escribe con un símbolo doble == 
 +  { 
 +    digitalWrite(2,HIGH); 
 +  } 
 +  else 
 +  { 
 +    digitalWrite(2,LOW); 
 +  } 
 +  delay(10); 
 +
 + 
 +</code> 
 + 
 +El IDE tiene un ejemplo de if-then que conecta un potenciómetro con un led 
 + 
 +**Arduino>Ejemplos>05.Control>IfStatementConditional**: cambiar el analogPin por A1 y el ledPin por 2/4/6. Probar diferentes valores el umbral (threshold) y girar el potenciómetro. 
 + 
 +==== Variables de estado ==== 
 + 
 +Vamos a definir ahora un estado del sistema con una variable que vamos a llamar 'encendido', y que podrá tener valores 0 y 1. El cambio de un estado a otro se hará con los botones del pin 11 y el 12. Y el resultado de estar encendido será el led verde y el apagado el led rojo. 
 + 
 +<code> 
 +int encendido = 0; 
 + 
 +void setup() 
 +
 +  pinMode(11,INPUT); // pin 11 con un botón 
 +  pinMode(12,INPUT); // pin 12 con un botón 
 + 
 +  pinMode(2, OUTPUT); // pin 2 con el led verde 
 +  pinMode(6, OUTPUT); // pin 6 con el led rojo 
 + 
 +
 + 
 +void loop() 
 +
 +  if (encendido == 0) 
 +  { 
 +    encendido = digitalRead(12); // si el sistema está apagado y se pulsa el botón verde, pasa a encendido 
 +  } 
 +  if (encendido == 1) 
 +  { 
 +    encendido = !digitalRead(11); // si el sistema está encendido y se pulsa el botón rojo, pasa de apagado. El símbolo ! indica que intercambiamos los valores 0 y 1. 
 +  } 
 +  digitalWrite(2,encendido); 
 +  digitalWrite(6,!encendido); 
 +  delay(10); 
 +
 + 
 +</code> 
 + 
 +Este programa con una variable de estado es el ejemplo más sencillo de un autómata finito (en inglés Finite State Machine). Parece un programa sencillo, pero aññadido a los programas de movimiento del robot nos permitirá pararlo o volver a ponerlo en marcha en cualquier momento. 
 + 
 +==== Tarea 5: luces autónomas ==== 
 + 
 +En el pin A0 de la BATS hay conectado un sensor de luz. El programa debe leer la información, y si la luz no es suficiente (establecer un umbral) se debe encender una luz led. Así es como funcionan algunas farolas. 
 + 
 +===== Proyecto 6. Compartir programas =====
  
 ==== Hardware y software abiertos ==== ==== Hardware y software abiertos ====
Línea 311: Línea 488:
 {{:proyectos:github.png|}} {{:proyectos:github.png|}}
  
-==== Tarea 4: Probar programas de Github ====+==== Tarea 6: Probar programas de Github ====
  
 Entra en la carpeta de [[https://github.com/brico-labs/BATS/tree/master/sw|software]] del proyecto BATS en Github, navega por las subcarpetas y prueba algún programa en tu Arduino con BATS. Una manera sencilla es cortar y pegar el programa a la ventana de Arduino. Entra en la carpeta de [[https://github.com/brico-labs/BATS/tree/master/sw|software]] del proyecto BATS en Github, navega por las subcarpetas y prueba algún programa en tu Arduino con BATS. Una manera sencilla es cortar y pegar el programa a la ventana de Arduino.
proyectos/programacion_bats.1516371563.txt.gz · Última modificación: 2021/04/16 20:36 (editor externo)