RESUMEN BLOQUE 5

BLOQUE 5:
CONCEPTOS:
ESPACIO:
Este módulo nos preparará para la exploración del espacio y nos ayudará a crear todas las  cosas que necesitamos con la placa 101 y un poco de programación avanzada.

¿Qué es una IMU?

 Una IMU (unidad de medida inercial) es un dispositivo electrónico que mide cómo se mueve el dispositivo en direcciones horizontales / verticales y en rotación angular. La IMU a bordo es un acelerómetro / giroscopio de 6 ejes donde las direcciones horizontal / vertical se miden mediante el acelerómetro y la rotación angular mediante el giroscopio.

ACELERÓMETRO

La parte del acelerómetro de la IMU mide en qué dirección se mueve el tablero. La rapidez con la que se mueve afecta la altura de las medidas.
Nota: cualquier lado del tablero que apunte hacia el suelo no será ~ 0, ya que ese lado se ve afectado por la fuerza constante de la gravedad.

CABECEO Y BALANCEO

Combinando el giroscopio y el acelerómetro es posible calcular el ángulo de un dispositivo. El resultado de este cálculo son dos valores llamados pitch and roll. La inclinación es el ángulo de inclinación del dispositivo hacia atrás y hacia adelante, y la rotación es hacia la izquierda y hacia la derecha.

USANDO LAS MEDICIONES DE LA IMU

En estos ejemplos, utilizará las mediciones de la IMU para crear sonido
Ejemplo 1:
Obteniendo y utilizando las medidas de Gyro.
Resultado
Giroscopio: El Piezo ahora reproducirá el sonido según la velocidad con la que lo inclines en los ejes X e Y.
Ejemplo 2:
Obtención y uso de las medidas del acelerómetro.

Resultado

El Piezo ahora reproducirá sonidos en función de cómo lo muevas en los ejes X e Y.
Ejemplo 3:
Obtención de las medidas de cabeceo y balanceo.
Resultado
El Piezo ahora reproducirá un sonido basado en cómo lo inclinas en los dos ejes.
Cómo funciona
  • Se declara el objeto IMU .
  • Se declara que la variable, ledPin , mantiene el valor 13, el LED incorporado y el pin piezo se establece en el pin 8.
  • En configuración () , una vez que se abra el monitor serie , comenzará la inicialización de la IMU .
  • El programa hace una pausa de 5000 milisegundos para calibrar la IMU durante la inicialización.
  • Parpadea el LED de a bordo para mostrar cuando se realiza la calibración y configura el piezo como salida.
  • En loop () , ejecute el objeto IMU para obtener los valores IMU apropiados .
  • Use imu.getPitch / imu.getRoll para el lanzamiento y la tirada.
  • Imprima los resultados de la medición de IMU en el monitor serie.
  • Obtenga el valor absoluto para cada medida.
  • Agregue la medida de los dos valores absolutos en cada versión para crear un solo valor.
  • Reducir a la mitad ese valor único para obtener el promedio entre los dos.
  • Usa ese valor promedio como frecuencia para que juegue el piezo.
  • Si esa frecuencia es inferior a 50, el piezo no reproduce ningún sonido.
  • Parpadea el LED para indicar actividad.
  • bucle () continúa en bucle.

BLE:

Facilita la transferencia de datos entre dos dispositivos que están cerca uno del otro. Los dispositivos que utilizamos a diario utilizan bluetooth, como altavoces inalámbricos, teclados, ratones, teléfonos y computadoras.
El último estándar de Bluetooth es Bluetooth 4, también conocido como Bluetooth Low Energy o BLE. Es muy eficiente energéticamente y puede ser alimentado por una pequeña batería durante mucho tiempo. Se ha utilizado en muchos dispositivos, por ejemplo, bandas de ejercicios, relojes inteligentes, auriculares, etc. El potencial es casi ilimitado y se puede usar en sensores de entorno para crear granjas inteligentes, o en tiendas y edificios para proporcionar información sobre un Ubicación que ayudará en el desarrollo de futuras ciudades inteligentes.
El tablero de control tiene capacidades BLE integradas. En este módulo, aprenderá a programar el tablero para comunicarse con teléfonos inteligentes Android.


Instalación de la aplicación CTC:

REQUISITO
Se necesita un teléfono Android que admita BLE, preferiblemente con la versión de Android 4.3 o superior.
busque en Google Play "Tecnologías avanzadas de CTC" para descargar e instalar la aplicación.
BLE EN ACCIÓN
Una vez que la aplicación está correctamente instalada, es hora de ver BLE en acción. En el ejemplo de messenger, usa la aplicación para enviar un mensaje al tablero de control y almacenarlo allí. El mensaje puede ser leído por el mismo teléfono o uno diferente. Desaparecerá si enviamos otro mensaje o reinicia el tablero.
ANTES DE EMPEZAR:
un periférico permite que otros dispositivos se conecten a él, el panel de control es un periférico en nuestros proyectos. Un dispositivo que establece una conexión de forma activa se llama central, un teléfono Android es un dispositivo central. Un central puede conectarse a múltiples periféricos, mientras que un periférico solo puede conectarse a un central.
Para ser energéticamente eficientes, los dispositivos BLE no se comunican entre sí todo el tiempo. Ellos deciden por sí mismos cuándo es el mejor momento para enviar datos de un lado a otro. Por lo tanto, puede haber un ligero retraso entre el envío y la recepción, pero en la mayoría de los casos no se nota.
Ejemplo:
  • Cree un objeto de la clase BLEuart y configúrelo como TYPE_MESSENGER . La clase BLEuart se encarga de hacer todo con BLE. Al establecer el tipo en TYPE_MESSENGER, la aplicación puede reconocer esa placa específica.
  • Establece el nombre de tu dispositivo BLE. Puede configurarlo según la cadena que desee, siempre que tenga menos de 8 caracteres. Asegúrate de que sea diferente de tus compañeros de clase.
  • Iniciar la comunicación BLE.
  • Busque un dispositivo central (un teléfono Android en este caso) y ejecute el siguiente código una vez que haya establecido una conexión.
  • Repita el siguiente código mientras el dispositivo central está conectado.
  • Busca los datos enviados por el dispositivo central. Tenga en cuenta que incluso si el dispositivo central envió datos nuevos después de este punto, los datos obtenidos no cambiarán hasta que vuelva a llamar a uart.fetchData () .
  • Mostrar los datos obtenidos en el monitor de serie.
  • Crea una matriz de caracteres para almacenar los datos.
  • Puede averiguar la longitud (número de caracteres) de los datos obtenidos llamando a uart.getReceivedLength () .
  • Recorra los datos obtenidos y almacene todos los caracteres en la matriz de datos.
  • Enviar la matriz de datos al dispositivo central. No se realiza ningún cambio en los datos originales, por lo que el dispositivo central recibirá exactamente el mismo mensaje que envió anteriormente.
Enviar datos desde el dispositivo BLE
Por lo general, los dispositivos BLE están diseñados para tareas específicas. Y las aplicaciones de teléfonos móviles correspondientes están hechas para funcionar con estos dispositivos. Necesita diferentes aplicaciones para manejar diferentes tipos de aplicaciones y valores.
Para hacer las cosas más flexibles, la aplicación CTC proporciona un protocolo y una interfaz para mostrar valores genéricos. Nosotros decidimos qué valores y cuántos de ellos desea enviar desde el panel de control, y en la aplicación establece una serie de valores para mostrar. Lo único que necesitamos hacer un seguimiento es la secuencia de valores.

FORMATO DE DATOS

BLE envía y recibe datos con una matriz de bytes. Un byte puede representar un valor entre 0 y 255, y podemos representar cualquier tipo de datos con un byte a lo largo, o una combinación de unos pocos bytes.
Para que la comunicación funcione, tanto el lado de envío como el de recepción deben acordar qué tipo de datos se envían.
Por ejemplo, si ambos lados aceptan que es una matriz de caracteres que se están enviando, y el remitente envía los siguientes valores: 72,101,108,108,111. El receptor convertirá a cada uno de ellos en un char según el código ASCII, por lo que recibe "Hola"

Por el contrario, si el remitente desea enviar un número entero 512, y el receptor cree que solo tiene 2 bytes, lo leerá como 2 números: 2, 0.

Con la interfaz Value Display, todos los bytes recibidos se consideran bytes. BLE admite un máximo de 20 bytes, por lo que la interfaz puede mostrar hasta 20 valores. Solo asegúrese de que cuando envíe los datos, esté en el formato correcto.
Ejemplo 5.5
Este ejemplo demuestra cómo se puede utilizar la Visualización de valores. El panel de control supervisa el estado de un botón conectado al pin digital 9, un contador de prensa y un sensor de luz conectado al pin A0. Los 3 valores se envían a través del BLE en una secuencia, y la aplicación lee los valores en la misma secuencia.
Cómo funciona:
  • Crear un objeto de la clase BLEuart .
  • Declara una variable de contador y una variable btnPressed . El primero es para mantener un registro de cuántas veces se ha presionado el botón, el segundo es para que el programa sepa si se ha presionado el botón.
  • Establece el nombre de tu dispositivo BLE.
  • Iniciar la comunicación BLE.
  • Busque un dispositivo central y ejecute el siguiente código una vez que se establezca la conexión.
  • Repita el siguiente código mientras el dispositivo central está conectado.
  • Obtener lecturas del sensor de luz y el botón.
  • Mapee el valor del sensor de luz de 0 - 1023 a 0-255. Solo los valores entre 0 y 255 se pueden enviar a la aplicación.
  • Compruebe si el botón ha sido presionado. Si es así, aumentar el contador.
  • Agregue los 3 valores (lectura de botón, valor de contador y lectura de sensor de luz) al BLE y envíe los datos.

Recibir datos en dispositivo BLE

Esta sección explica cómo enviar datos a la pizarra desde la aplicación del teléfono a través de BLE.
La aplicación CTC tiene algunos botones que puede personalizar, y al usarlos puede enviar datos a la pizarra.
Ejemplo 5.6
Este ejemplo muestra cómo recibir datos en el panel de control. Cuando toca los botones en la interfaz de la aplicación CTC, los valores asociados con los botones serán recibidos por la placa en forma de una matriz de un carácter. El valor se muestra en el monitor de serie después.
Cómo funciona:Crear un objeto de la clase BLEuart .
  • Establece el nombre de tu dispositivo BLE.
  • Iniciar la comunicación BLE.
  • Busque un dispositivo central y ejecute el siguiente código una vez que haya establecido una conexión.
  • Repita el siguiente código mientras el dispositivo central está conectado.
  • Si se reciben datos de BLE, haga lo siguiente.
  • Recupera todos los datos que se envían a BLE. Cuando se recuperan datos, se almacenan con el objeto BLEuart y no cambian hasta que se recuperan nuevamente.
  • Lea los datos de 1 byte del objeto BLEuart .
  • Imprima los datos al puerto serie.

Programación avanzada

En este módulo, analizaremos la programación orientada a objetos y profundizaremos en la programación de gráficos.CLASES Y OBJETOS
La Clase establece la regla de ( por ejemplo ) uno contenedores pueden contener diferentes fluidos.
Por lo tanto, para llenar uno de estos recipientes, debemos elegir uno y establecer una regla para el tipo de fluidos que debe contener.
Por ejemplo  el vidrio es un nuevo objeto, que también se denomina vidrio.
Ahora digamos que el vaso solo puede contener agua, jugo o leche. Esta es una regla que solo se aplica a todos los vasos entre los contenedores, por lo que cualquier otro tipo de contenedor no puede contener esos fluidos. Entonces, mientras que el vaso puede tener agua, la taza puede tomar té.Entonces, para resumir, todos los contenedores pertenecen a la misma clase con la regla de que los contenedores pueden contener un tipo de fluido, y los diferentes tipos de contenedores son objetos con su propio conjunto de reglas de qué tipo de fluido contienen.
VARIABLES Y MÉTODOS
Una clase puede tener variables privadas o públicas. Se puede acceder a las variables públicas desde cualquier parte del programa, pero las privadas son inaccesibles fuera de la clase específica a la que pertenecen. Para llegar a las variables de las clases, es una práctica personalizada usar métodos. Los métodos son cómo podemos cambiar lo que hay en un objeto, por ejemplo, llenar un vaso con un líquido específico. Algunos métodos simplemente realizan acciones, mientras que otros pueden devolver variables. Tomemos como ejemplo la clase de IMU que hemos demostrado antes. Cuando declaramos nuestra variable imu como un objeto de la clase IMU , podemos usar los métodos de clase que devuelven el valor de giro con imu.getGyroX () .
De vuelta a algunas metáforas del mundo real.
Los conejos pertenecen a la clase general de animales, junto con los perros, aves y gatos. Así como un vaso, que es un objeto en una clase de contenedores, los gatos son objetos en una clase de animales.
Ejemplo 5.7
En este ejemplo, se le presentará cómo funcionan las clases y los objetos en el código real.
Resultado:Ejecute el código y vea cómo el programa principal llama a los métodos del objeto relacionados con las clases a las que pertenecen.
Cómo funciona
  • Se declaran dos objetos de cada clase.
  • Los dos objetos están instanciados en la configuración () .
  • El método flapWings () que pertenece a la clase Bird se llama en draw () .
  • El método eatCarrot () que pertenece a la clase Rabbit se llama en draw () .
  • A medida que se ejecuta el programa, la salida es "flap, flap, flap" y "yum, yum, yum
Programación grafica
En Procesando todo se dibuja en base a posiciones en una cuadrícula de coordenadas. Esta cuadrícula se puede utilizar para cambiar la posición y la rotación de los elementos gráficos en ella.
Para mover un elemento usamos el método de traslación (x, y) , y para la rotación usamos rotar (ángulo) .
ELEMENTOS DE POSICIONAMIENTO
A menudo, un elemento que procesa los dibujos tiene una entrada para las coordenadas de inicio en su línea de código inicial, por ejemplo: rect (x, y, ancho, alto) . La "x" y la "y" son las coordenadas iniciales.
Es posible que tenga muchos rectángulos que deben moverse o cambiarse de otra manera, utilizando translate () en lugar de las coordenadas iniciales. Esto facilita el seguimiento de dónde está el elemento en una cuadrícula.
Para usar translate (), las coordenadas de inicio en la cuadrícula se configuran para un elemento, manteniendo la propia coordenada inicial del elemento en 0. A través de esto obtenemos una cuadrícula compartida entre los elementos, lo que facilita el movimiento de los elementos entre sí.
Ejemplo 5.8
En este ejemplo, colocará dos rectángulos en diferentes coordenadas usando translate ()
Cómo funciona
  • Relleno () se utiliza para colorear el primer rectángulo negro.
  • translate (x, y) define el punto de inicio para el rectángulo negro.
  • rect () dibuja el rectángulo negro, utilizando las coordenadas translate () como punto de inicio.
  • Relleno () se utiliza para colorear el segundo rectángulo gris.
  • Otro traductor (x, y) define las coordenadas de inicio para el rectángulo gris, agregando al valor de las coordenadas del primer traductor () .
  • rect () dibuja el rectángulo gris, utilizando las coordenadas combinadas translate () como punto de partida.
Resultado
El código dibuja dos rectángulos, ambos con las mismas coordenadas en su propia línea de código. Al frente de cada rectángulo, translate () se usa para mover su punto de inicio, de modo que se dibujen en dos posiciones diferentes.
ELEMENTOS ROTATIVOS
El método rotar (ángulo) nos permite rotar un elemento, como un rectángulo, alrededor de la posición relativa de las coordenadas a las coordenadas de inicio de sí mismo. Los ángulos deben especificarse en radianes. Aunque puedes convertir grados a radianes con el método radians () . Al igual que traducir (x, y) , el método de rotación (ángulo) se agrega a las transformaciones anteriores. Hay una excepción: cuando se utiliza rotar (ángulo), se gira toda la cuadrícula. Esto mueve las posiciones de los elementos del original sin rotar.
Ejemplo 5.9
En este ejemplo, utilizará rotate () para rotar un rectángulo, pero debe mantener sus coordenadas iniciales originales con traducir (x, y) .
Cómo funciona
  • Relleno () se utiliza para colorear el primer rectángulo negro.
  • rect () dibuja el rectángulo negro, utilizando sus propias coordenadas para tener una posición en la cuadrícula.
  • fill () se utiliza para colorear el segundo rectángulo gris.
  • translate (x, y) define las coordenadas de inicio para el rectángulo gris, cambiando las coordenadas para compensar el efecto translate () en el mismo.
  • rotar (radianes (grados)) rota la cuadrícula, moviendo todo al valor de grado que se convierte por el método de radianes () .
  • rect () dibuja el rectángulo gris, utilizando las coordenadas translate () como punto de inicio y se gira en función del valor en translate () .
Resultado
Se crean dos rectángulos, uno negro se coloca en la cuadrícula utilizando sus propias coordenadas para determinar sus posiciones. La posición del rectángulo gris primero se gira utilizando rotate () , permaneciendo en un ángulo diferente como el primer rectángulo. Luego se mueve a otras coordenadas con la función translate () .

Comentarios