Ya estamos preparando la edición del Campus Tecnológico para Chicas Seré Ingeniera del año 2023, que además ¡coincide con su décimo aniversario!
Nuestro objetivo es proporcionar un ambiente desafiante y acogedor donde las chicas puedan explorar su pasión por la tecnología y las STEM (Ciencia, Tecnología, Ingeniería y Matemáticas).
En nuestro campus tecnológico, que se celebrará en julio en la ETSIIT, las chicas tendrán acceso a una amplia gama de recursos educativos y de formación, desde talleres y charlas hasta proyectos prácticos y colaboraciones con empresas y organizaciones líderes en la industria. Todo el campus estará guiado por nuestras fantásticas profesoras.
Estamos buscando patrocinadores que se unan a nosotras en este importante esfuerzo para cerrar la brecha de género en STEM. Si tu empresa o organización está interesada en apoyar esta iniciativa, por favor consulta esta página para obtener más información sobre las oportunidades de patrocinio y las formas en que puede contribuir a hacer una diferencia en la vida de las futuras ingenieras.
Prestad también atención a nuestro Twitter: @sereingeniera y visitad a menudo el resto de páginas de nuestra web, donde anunciaremos las fechas de celebración y otra información relevante.
Por último pero no menos importante, la que os ha ido contando actualizaciones sobre esta edición del campus tecnológico para chicas seré ingeniera tanto por redes sociales como por este mismo blog, es la última de las monitoras que falta por presentar. Ya conocéis a las ingenieras Ángela, María e Inés y ha llegado la hora de presentarme.
Puede que algunas ya me conozcáis de años anteriores ya que este será mi 5 año participando como monitora de seré ingeniera, además ayudo en la coordinación del campus y la organización desde hace 3 años. Creo que poco a poco me habéis visto crecer personal y profesionalmente porque cada año os he ido contando actualizaciones sobre mi. Pero para las que no me conocéis aún os cuento:
Soy graduada en Ingeniería Informática por la Universidad de Granada y Experta Universitaria en Ingeniería Inversa e Inteligencia Malware por la Universidad de Málaga gracias a una Beca que me concedió Google.
Me apasiona la ciberseguridad, la docencia y la investigación. Soy investigadora y analista en ciberseguridad. He participado como investigadora en diversas actividades organizadas por la Unidad de cultura científica de la Universidad de Granada tales como: la noche europea de los investigadores, la feria de las ingenierías, las actividades organizadas para celebrar la semana de la ciencia o el día internacional de la mujer y la niña en la ciencia, etc. Como puedes ver, me encanta participar en tantas actividades como puedo para fomentar las vocaciones STEM.
En el tiempo que llevo trabajando en empresas relacionadas con la tecnología y la ciberseguridad he podido ratificar lo que ya me temía cuando estaba estudiando el grado en ingeniería informática. Y es que ¡es necesaria mucha más presencia femenina en el sector tecnológico!. Antes de empezar en la universidad, estudié un ciclo formativo de grado superior en administración de sistemas informáticos en red. Ya ahí comencé a darme cuenta de dos cosas. La primera es que hay pocas chicas en el sector tecnológico con perfiles cualificados. Y la segunda, es que ¡este sector es de paro nulo!. Antes de terminar, ya tienes trabajo y que queréis que os diga chicas…
Si estudias un ciclo formativo, una ingeniería o grado relacionado con tecnología, física, matemáticas, electrónica, robótica, etc. ¡Vas a tener trabajo seguro!. Y puede que en estos momentos no tengas claro exactamente que quieres estudiar. Pero hace unas semanas hablando con una chica que estudió Física, me contó que ahora trabaja investigando curas contra el cáncer en un hospital. ¿Pensabais que había que estudiar medicina o enfermería para eso?
Pues… quizás te haya sorprendido pero una Física también puede trabajar en un hospital. Y no solo eso, sino que si estudias ingeniería puedes desarrollar software para ayudar a las personas como el que hay por ejemplo en la sala de coordinación de Urgencias y Emergencias del 061 o participar en el diseño de maquinaria robótica como la que utilizan en las operaciones o incluso aprender a controlar los sistemas de control industrial como pueden ser trabajar en las centrales eólicas, eléctricas, depuradoras de aguas… Con todo esto quiero deciros que ¡las ingenieras estamos en todas partes! además ¡Necesitamos más ingenieras!
Me gusta mucho mantener el contacto con las chicas que participan en el campus en cada edición. Así puedo saber de ellas después. Incluso ayudarles u orientarlas cuando tienen dudas sobre que estudiar.
Si cuando estudias en la Universidad de Granada además vives la universidad, te pasará como a mí, que siempre que me preguntan conozco a alguien que conoce a alguien que ha estudiado el grado por el que me están preguntando y… me encanta hacer un poco de mentora y poder poner en contacto a las chicas del campus con otras mujeres que ya han estudiado el grado por el que me preguntan…
Bueno además de todo esto, me encanta la playa, el senderismo, romper cosas (hacking), cacharrear con el hardware, leer libros de psicología y de herramientas abiertas y ciberinteligencia.
Estoy deseando que llegue el primer día del campus para conocer a todas las aspirantes a ingenieras, saber sus inquietudes y poder ayudarlas en todo lo que necesiten. Este año tenemos unos proyectos muy chulos y me esta costando mucho no publicarlos por redes sociales. Pero quiero que os sorprendamos cuando los veáis el primer día del campus. ¡Os veo en menos de una semana!
¡Hola de nuevo chicas! ¿Pensabais que tan solo os iban a acompañar este año como monitoras Ángela y María? Pues no, tenemos una nueva incorporación más y estoy segurísima de que os va a encantar en cuanto os la presente.
Inés Jiménez Díaz
Nos llena de orgullo presentaros a Inés, porque podríamos decir que es «nuestra chica que se ha convertido en mujer» y es que, Inés ha participado en las últimas 4 ediciones de Seré Ingeniera y ahora estudia Ingeniería Informática en la Universidad de Granada.
Ines participa como miembro técnico de IoT (Internet of things o internet de las cosas) en el GDSC (Google Developers Student Club), donde ha impartido alguna que otra charla como la de introducción a Arduino en la ETSIIT.
Algunas de sus mayores aficiones son cacharrear y programar para crear distintos sistemas, juegos, prendas vestibles e incluso robots. A lo largo de las ediciones del campus en las que ha podido asistir ha aprendido las bases para poder realizar todos esos proyectos y ha puesto en práctica su creatividad para crearlos y ponerles nombres tan creativos como por ejemplo el guante total (un sistema vestible montado en un guante con el que podías tocar notas musicales) o el marciajuegos (una maquinita con la que podías jugar diferentes juegos).
Ines nos cuenta que un consejo que le sirvió mucho y que le gustaría difundir a todas las chicas que vayan a participar en el campus o las que estén interesadas en una ingeniería, es que no dejéis que nadie os diga que no debéis de estudiar uno u otro grado porque es muy difícil para una mujer (sobre todo si tenéis en mente estudiar una ingeniería) ¡Por qué no lo es!
Así mismo, afirma que en Seré Ingeniera aprendió muchas cosas… entre ellas que no hay que dejar las cosas para el último día que el proyecto puede funcionar un día y al siguiente dejar de funcionar, porque has cambiado algo en el programa o se ha soltado un cable… Pero dice que lo que mejor aprendió y más le impactó es en el modo que todas en el campus se unieron como una piña y a pesar de estar cada una con un proyecto distinto podían llegar a ayudarse unas a otras e incluso sacar todos los proyectos adelante.
Inés termina con esta frase tan reveladora: «Parami asistir al campus Seré Ingeniera y las monitoras que además eran todas ingenieras, me ayudó a darme cuenta que quería ser una de ellas».
Hace unos días os presentamos a la primera de las integrantes del equipo que formará parte del Campus Tecnológico para chicas: Seré ingeniera (si no sabéis aún quien es Ángela, aquí tenéis el enlace). Hoy le toca el turno a una de las nuevas incorporaciones al equipo de monitoras y se trata de:
Desde que era pequeñita tenia una gran curiosidad por la tecnología y le gustaba muchísimo jugar a videojuegos. Lo que ella no sabía por aquel entonces es que unos años más tarde esta curiosidad e inquietud le llevaría a la pasión que tiene actualmente por desarrollar sus propios proyectos.
Tal ha sido el interés que María ha desarrollado su propia aplicación Android para jugar a juegos de rol. Además también hace sus pinitos con el hardware y se ha creado un piano electrónico. Esos proyectos y otros muchos son un ejemplo de lo que hace en sus ratos libres.
Cuando estudió Bachillerato era la única chica de la especialidad tecnológica, y esto le hizo darse cuenta del gran problema que existe en el sector de las tecnologías de la información y comunicación (TIC). Este es un mundo en el que predomina claramente la presencia masculina, lo que ha creado estereotipos e ideas preconcebidas que no hacen ningún favor a las mujeres que lo estudian. Por esto, cuando entró en la ETSIIT, se involucró en la delegación de estudiantes. En concreto forma parte de la Comisión de Igualdad para luchar por esta y otras muchas causas que lo merecen.
Eso unido a la pasión que tiene por la tecnología, fue lo que le llevó al lugar donde está ahora. Estudiando ingeniería informática y trabajando en la Oficina de Software Libre. Pero aquí donde la veis, ¡Mari tiene grandes planes para su futuro!. Y es que, gracias al trabajo en la OSL y las campañas de reciclaje de equipos informáticos que realiza, ha descubierto que le encanta cacharrear con los componentes de los PC y montar ordenadores como si de crear un nuevo Frankenstein se tratara. Reciclando componentes de otros PC que ya no funcionaban correctamente.
Dada la especialidad que ha elegido en la carrera de ingeniería, la ingeniería del software, nos cuenta que le encanta todo lo que es el diseño de interfaces y experiencia de usuarios y en un futuro próximo piensa continuar su formación en este campo para dedicar su carrera a esto.
Aún nos quedan algunas integrantes más del equipo de monitoras de Seré Ingeniera de Granada que iremos desvelando en los siguientes post en las próximas semanas. Si todavía no te has apuntado al campus, estás a tiempo de hacerlo porque ya está abierta la preinscripción. Te dejo aquí el enlace al formulario de la sede de Granada y el de la sede de Ceuta y si quieres saber que cosas hacemos en el campus, te invito a que visites la sección de ¿Quieres participar?
Como ya os adelantamos hace unos días por redes sociales, ya tenemos completo el equipo de monitoras que estarán con vosotras durante la IX edición del campus Seré Ingeniera 2022. Cada semana iremos descubriendo los nombres y las inquietudes que tienen para que vayáis conociéndolas. En este post queremos presentaros a la primera de ellas.
Ángela comenta que, lo que más le motiva de su formación es poder crear proyectos electrónicos con aplicaciones informáticas. Ha realizado proyectos como: un comedero automático para sus gatos controlado por un App, una aplicación para hacer el sorteo del amigo invisible de forma automática por email, una página web privada en la que puede ver cómo está su casa cuando se va de viaje…
Aunque le gusta mucho la programación, también le entusiasman otros valores sociales y por eso trabaja como profesora. Imparte todas las asignaturas relativas a las TIC (informática, robótica, tecnología) en secundaria, bachillerato y FP.
Una de sus pasiones es estar siempre actualizada en las nuevas tecnologías y, al mismo tiempo, también le preocupa el sesgo de género en el uso y profesión de las nuevas tecnologías. Por este motivo, Ángela colabora en varios proyectos que tienen el objetivo de hacer el software más accesible haciendo hincapié en la paridad de género.
Algunos de estos proyectos son los que organiza la Oficina de Software Libre, como los campus “Seré Ingeniera” o “Infantil de Software Libre”; los talleres que organiza la Unidad de CulturaCientífica, por ejemplo la Feria de las Ingenierías, las charlas de la Mujer y la Niña en la Ciencia o la Noche Europea de l@s Investigador@s; o la diputación de Granada con los talleres sobre robótica, aplicaciones e impresión 3D para las nuevas generaciones.
También participa en conferencias y talleres organizados por el Parque de las Ciencias de Granada para dar formación al profesorado en las TIC y por último aporta su ayuda en la dirección y desarrollo de actividades formativas del Club de Robótica de Granada.
Quienes nos dedicamos al desarrollo de proyectos electrónicos con aplicaciones informáticas sabemos que nuestras creaciones siempre tienen pánico escénico. Esto ocurre cuando el proyecto funciona correctamente pero cuando se lo enseñas a alguien, al proyecto le entra una mezcla de miedo y vergüenza que hace que no funcione correctamente delante del público.
Por este motivo, siempre dejamos este último día para arreglar esos fallos de última hora que han surgido una vez nuestro proyecto se ha terminado y se lo hemos enseñado a nuestros amigos. Hoy vamos a reparar lo que nos quede y prepararnos para la exposición que tendrá lugar…¡¡Mañana!!
¡Buenos días! Empecemos con las soluciones a los mini-retos!! El archivo .ino donde se encuentra este código está en la sección Trabajo de Clase, en el apartado DÍA 4: Integración de componentes. Esta solución sería diseñando todos los miniretos en el mismo archivo, si los tenéis un poco diferentes, ¡no pasa nada! Es normal que vayamos haciendo ya los códigos diferentes.
void minireto_cuatro(){
pantalla.borrar();
pantalla.escribirFrase("Hola"); //Posición por defecto 0
for (int i = 0; i < nTonos; i++) {
tone(pinBuzzer, tonos[i]);
//realizamos una espera mientras suena el tono del tiempo determinado en la tabla tiempos para la posición i
delay(tiempos[i]); //Duranción del tono
noTone(pinBuzzer); //Apaga sonido
delay(50); //Pausa entre tonos
}
void minireto_nueve(){
String dia,mes;
dia = '0' + String(7);
mes = '0' + String(7);
pantalla.borrar();
pantalla.escribirFrase(dia+mes);
for (int i = 0; i <= 7; i++) {
// Se debe indicar: nMatriz, Fila y Columna. Utiliza la tabla proporcionada para entenderlo!
pantalla.setLed(1,i, 0);
Y ahora… ¡a conocer el último componente que nos queda! Vamos a usar un mando emisor de luz infrarroja y un sensor de luz infrarroja, a este conjunto también se le conoce como IR (infrared).
¿Cuántas cosas podéis nombrar que usen este tipo de señal? ¡En nuestro día a día usamos este tipo de comunicación varias veces! Esto nos va a permitir controlar nuestro proyecto a distancia. Hay que tener en cuenta que cada mando emite unos códigos diferentes según el dispositivo al que está dirigido. Pensad qué pasaría si queriendo encender la televisión se abre la puerta del garaje. Incluso no todos los mandos sirven para todas las teles. Por eso, cada mando emite unos valores que sólo su respectivo sensor conoce.
Lo primero que tenemos que hacer es conectar nuestro sensor y comprobar cuales son los valores que emite nuestro mando.
Para eso usaremos el siguiente código, el cual podéis encontrar en el apartado Código base de la sección DÍA 5: Mando y sensor IR:
Al igual que pasaba con la matriz de leds, el sensor infrarrojos necesita una librería para comunicarnos fácilmente con estos componentes. Para descargar la librería IRremote.h tenéis que seguir los siguientes pasos en la aplicación de Arduino:
Pestaña programa->incluir librería->administrar bibliotecas->buscar el nombre
El código es muy simple: primero indicamos el pin de Arduino al que vamos a conectar el sensor infrarrojos (y al que apuntaremos con el mando); en void setup() se indica el comando necesario para establecer comunicación con el sensor; por último en void loop() tenemos líneas que mostrarán información en el monitor serie. Cada vez que se pulse un botón, aparecerá el código asociado a él. ¡Que no se os olvide abrir el Monitor Serie!
Una forma simple de esquematizar los valores obtenidos es rellenar la siguiente tabla cambiando los valores que obtengáis, los nuestros son:
const int KEY_UP = 24;
const int KEY_LEFT = 8;
const int KEY_OK = 28;
const int KEY_RIGHT = 90;
const int KEY_DOWN = 82;
const int KEY_1 = 69;
const int KEY_2 = 70;
const int KEY_3 = 71;
const int KEY_4 = 68;
const int KEY_5 = 64;
const int KEY_6 = 67;
const int KEY_7 = 7;
const int KEY_8 = 21;
const int KEY_9 = 9;
const int KEY_0 = 25;
const int KEY_ASTERISK = 22;
const int KEY_POUND = 13;
Vamos a ver a continuación un ejemplo de programa para ver cómo funciona el mando IR con su sensor. Tras la imagen comentaremos qué hace este código.
Al principio definimos todas las variables asociadas a los pines y códigos que están asociados al sensor IR. En void setup() simplemente activamos la comunicación con Arduino y con el sensor. El código en void loop() se puede ordenar de la siguiente forma:
1. Se detecta si se ha emitido una señal desde el mando, y si ésta se ha entendido. En caso afirmativo su valor se guarda en la variable teclaPulsada.
2. Para seleccionar una u otra acción en función del botón pulsado del mando vamos a usar la función switch(). Esta función permite dar una serie de opciones (“case”), y para cada una de dichas opciones se le asignará una tarea. Por tanto, únicamente se ejecutarán las líneas de código asociadas al botón escogido. Cuando puede que ninguna de las opciones se cumpla (o si quieres una acción por defecto), se usa en vez de “case”, “default”.
3. Por último, reiniciamos el sensor IR para poder mandarle información nueva.
Y ahora… ¡a por los retos!
RETOS DIARIOS
Los retos para hoy son los siguientes:
Reto 1:
En este primer reto vamos a comprobar qué ocurre si apuntamos con otro mando, por ejemplo el de la televisión, al sensor IR que hemos empleado. Para ello, podéis usar el mismo código que hemos empleado para conocer los códigos que necesitábamos con el mando del proyecto. En este reto se entregaría la codificación que habéis obtenido con los dispositivos que tengáis por casa (captura del Monitor Serie, una tabla con los valores, ¡lo que veáis más cómodo!)
Reto 2:
Antes hemos hecho un código teniendo en cuenta qué ocurría si pulsábamos la tecla de “arriba” y “abajo”. Os proponemos que ampliéis esa idea al resto de teclas, ¿qué ocurre si pulso el número 1? En cada una de las teclas debéis añadir una funcionalidad.
Nota: podéis usar las 12 funciones generadas en el reto del día anterior para ello.
Hoy es un día muy importante, ¡vamos a acabar nuestro proyecto!
Pero antes vamos a resolver los retos. Tenéis la solución del segundo reto en Classroom, colocada en la sección DÍA 5: Mando y sensor IR.
RETO 1
La solución de esta reto no es ninguna concreta, a cada una os saldrán unos códigos diferentes. Preferimos ver qué resultados os han salido para ver que cosas más diferentes podemos obtener. ¿Nos los enseñáis?
RETO 2
Para este código, tened en cuenta que cada una habréis puesto funciones diferentes en teclas del mando diferentes. Tenedlo sólo como ejemplo y seguid usando vuestra configuración. Tampoco os lo adjuntamos completo, si no con unas cuantas teclas más, ¡para que os hagáis una idea!
Ya no te queda nada nuevo por conocer, simplemente vas a ver que eres capaz de crear un súper proyecto con todo el material que tienes.
El material básico que proponemos para el proyecto final consta de los siguientes componentes: Arduino uno, su cable de conexión, cables, un pulsador, el buzzer, la matriz de leds y los elementos IR. También puedes personalizarlo añadiendo el led RGB y el otro pulsador restante. El ejemplo que os vamos a poner es empleando todos los componentes salvo el segundo pulsador. Su función (activar la alarma) ahora la realizará la tecla “OK” del mando.
O si lo queremos con el led RGB
Para juntar TOOOOODOS los conocimientos que tenéis de estos días, hemos pensado que podéis unir las ideas del temporizador con las ideas que hemos hecho con el mando. La idea principal es ajustar el tiempo del temporizador mediante el mando, y una vez activada la alarma, que se muestre el contador disminuyendo en pantalla hasta que haga ¡BOOM!
Respecto al temporizador, hasta ahora sabemos como mostrarlo en pantalla y ver cómo disminuye. Nos falta saber escoger el tiempo mediante el mando IR
Por tanto, si la alarma la vamos a activar mediante el mando, ya sólo necesitamos un botón para desactivar la alarma. En caso de que no podamos o no nos apetezca usar el mando SÍ se puede usar el otro botón para activar el temporizador
Como complemento, no sólo nos vamos a centrar en el temporizador, sino que todos los botones los podéis a asociar a las teclas, tal y como hemos ido viendo en los retos. Esto puede hacer que se os ocurran cosas muy chulas para el proyecto final
NOTA IMPORTANTE: El proyecto final puede ser LO QUE QUERÁIS. Si no os apetece hacer el temporizador, con vuestras propias funciones pueden surgir cosas chulísimas. ¡Lo importante es la creatividad!
Nosotras, en esta clase vamos a explicar cómo unificar todo para añadir el temporizador, pero repetimos…¡Podéis hacer otras cosas!
¡Aquí va el vídeo de nuestra propuesta! Y el código lo tenéis en la sección DÍA 6: PROYECTAZO del Classroom (Trabajo de clase).
La idea sobre la que gira el código en void loop() es la misma que hemos ido viendo: comprobar si la alarma debe o no sonar en cada momento en función del temporizador y del pulsador, y al hacerlo que suene la secuencia de tonos prediseñada por nosotros. Con el mando vamos a incluir que si se pulsa la flecha de arriba o la de abajo se amplíe/disminuya el tiempo restante para la activación de la alarma (siempre y cuando esta esté desactivada). Si le damos a OK, la alarma se activará de la misma forma que cuando le dábamos con el pulsador.
La parte de definición de variables y el void setup() vais a ver que es una unión de todo lo que ya hemos visto. ¡Que no se os olvide incluir las librerías!
Las dos únicas líneas desconocidas son escribirIcono() y esperarYBorrar(). La primera de estas funciones se mostrará una flecha que va pasando por todos los leds, y posteriormente aparecerá un “Hola”. Con la segunda se borra esto último. Es decir, hemos pasado a formato función las acciones que ya hacíamos en códigos anteriores.
void escribirIcono(){
// Escribir un icono como una secuencia de bits y diciédole al método qué icono y en qué columna situarlo
pantalla.escribirBits(FLECHA_DER);
pantalla.escribirBits(FLECHA_DER, 8);
pantalla.escribirBits(FLECHA_DER, 16);
pantalla.escribirBits(FLECHA_DER, 24);
}
Ahora veamos nuestra propuesta de void loop(). Primero comprobamos si la alarma está o no activada. En función de eso se activará el temporizador y todas sus consecuencias (sonido del buzzer, mensaje en pantalla…). El mando nosotras lo vamos a usar para incrementar/decrementar el tiempo que queremos esperar para la activación de la alarma mediante las flechas superior e inferior. Si le damos a OK, la alarma se activará de la misma forma que cuando le dábamos con el pulsador.
El código para mostrar los segundos (mostrarMinutosSegundos()) es el mismo que ya vimos. Tened en cuenta que las variables min y seg se han inicializado a valor 0 para que las configuréis con el mando.
Con respecto al led RGB, este no realiza una labor esencial, pero se puede dejar conectado, por ejemplo, con la idea de un semáforo en mente, se puede añadir al temporizador y que se ilumine en función del tiempo que quede para finalizar la cuenta atrás:
//Cuando borremos la pantalla, también podemos apagar el led RGB con la función:
void apagarLeds(){
analogWrite(red,0);
analogWrite(green,0);
analogWrite(blue,0);
}
//La función asociada al semáforo se puede usar dentro del temporizador:
void lanzarTemporizador(){
while(minutos>0 || segundos>0){
mostrarMinutosSegundos();
if(segundos>0){
segundos--;
}else if(minutos>0){
segundos=59;
minutos--;
}
semaforoColor();
}
}
¡IDEA!
Habéis diseñado 12 funciones que se pueden asociar a 12 teclas, más las tres que necesitas (flecha arriba, flecha abajo, Ok) para ajustar el temporizador… ¿No sobran teclas? ¡Sí! Dos más. Os proponemos que si queréis uséis las teclas asociadas a las flechas laterales (-> y <-) para incrementar/disminuir minutos. Es la misma idea que la funcionalidad de las flecha de arriba y de abajo para ajustar los segundos, pero para minutos.
¡Y esto sería todo! Habéis conseguido implementar un temporizador que puede ser ajustado a distancia. ¡Enhorabuena! Ahora si queréis podéis personalizar el proyecto añadiendo más funcionalidades y, por supuesto, visualmente. ¿Qué diseño y/o uso quieres darle a tu proyecto? ¡¡Estamos deseando ver vuestros proyectos!!
Podéis aprovechar el día para resolver todos los problemas que se hayan podido producir en los últimos días respecto a la integración de componentes. Por otro lado, si alguien ya tiene todos los componentes funcionando proponemos GUARDAR la versión que funciona (¡sacad fotos!) y hacer una copia en la que probaremos a diseñar algún minijuego.
¡Buenos días! Resolvamos los retos de ayer, los podéis encontrar en el apartado DÍA 3: Pantalla de leds dentro de Classroom en Trabajo de Clase (Solución retos 1, 2 y 3 matrices de leds).
Reto 1: Encontrar las figuras ocultas
La figura que resultaba de rellenar las casillas de la matriz es la siguiente:
Reto 2: ¡Diseña tu propio dibujo de leds!
Para este reto, al ser totalmente personalizable, nuestra solución no tiene mucho sentido. No obstante, os adjuntamos cómo podría quedar el código si se usan funciones:
//RETO 2 : Diseñar un icono propio
mostrarDibujo();
Si tenéis dudas o queréis mostrar vuestros iconos en clase, ¡podemos echarle un vistazo!
Reto 3: Icono que se desplaza
Reto 4 (opcional)
Hoy vamos a seguir con la idea de la clase anterior, unificando los conocimientos aprendidos y usando la mayoría de los componentes que hemos usado hasta ahora. Tened a mano los dos pulsadores, el buzzer y la matriz de leds.
La idea es seguir complementando el temporizador. En este caso se va a mostrar la cuenta atrás de activación de la alarma mediante la pantalla diseñada con matrices leds. Cuando termine la cuenta atrás, el buzzer comenzará a sonar. Para pararlo, tendremos que pulsar el primer botón. Si queremos que vuelva a comenzar la cuenta atrás, se deberá pulsar el otro botón restante, y así tantas veces queramos.
Para ello, antes del bucle asociado a que el buzzer emita sonidos, añadiremos una función asociada a generar un temporizador-contador que muestre el tiempo que queda en pantalla para que la alarma suene. Ese tiempo será 10 segundos. Cuando pase dicho tiempo, se mostrará “BOOM” en pantalla y comenzará a sonar la alarma. La configuración del circuito es la siguiente:
Poco a poco vamos a diseñar el código. El primer paso es ir viendo qué variables son necesarias para inicializar los componentes (definición de pines y de variables que conozcamos):
Como veis, es unir las variables del código que ya tenemos hecho del buzzer, del pulsador y de las matriz de leds. Con respecto al void setup(), esta vez va a ser un poco más completo:
Al comenzar el programa, además de configurar los pines, se van a mostrar varias frases en la pantalla. Además, las dos funciones que hay asociadas a las interrupciones de los botones son las siguientes:
La función pararAlarma() como su nombre indica, la usaremos para controlar si queremos que la alarma continúe o no. Como cuando pulsamos el despertador por la mañana para que deje de sonar. La función activarAlarma() vendría a ser como el interruptor de la alarma, que dejamos por la noche activado para que por la mañana suene la alarma. Cuando pulsemos el botón asociado al pin pinActivarAlarma, según la interrupción la alarma se activará, y comenzará a funcionar el temporizador (que ahora después lo veremos).
Ahora vamos a analizar el void loop():
void loop() {
//Si la alarma no está OFF, es decir, la alarma está activa, lanzamos el temporizador
if (alarmaOFF == false) {
¡Qué pocas líneas! Eso es porque cada vez sabemos programar de forma más eficiente y compacta. Veamos qué significan:
1. Primero se comprueba si la alarma está activada o no. Se comprueba el valor de la variable alarmaOFF, que inicialmente la habíamos colocado como false. Ese valor cambiará cuando pulsemos el botón y se ejecute activarAlarma(). En el primer ciclo, directamente saltará la alarma sin pulsar ningún botón, al haber inicializado la variable con ese mismo valor
2. Cuando ya se haya pulsado, se cumplirá la condición y pasará a ejecutarse la siguiente línea: lanzarTemporizador(). El código asociado a esta función lo vamos a ir construyendo poco a poco (¡podéis considerarlo como un reto!), es más a priori os lo vamos a dar como plantilla para que lo rellenéis:
La idea es intentar mostrar en la pantalla una cuenta atrás del número de segundos de la alarma. Es decir, que si la alarma se pone en 10 segundos en nuestra pantalla aparezca 00:10 -> 00:09 -> 00:08 -> 00:07 -> 00:06 -> 00:05 … 00:00.
Para representar estos minutos y segundos os hemos proporcionado dos funciones mostrarMinutosSegundos() y separadorDosPuntos() que se explicaron brevemente ayer (están copiadas de nuevo aquí abajo).
La función mostrarMinutosSegundos() utiliza las dos variables declaradas (minutos y segundos) para representar sus valores en la pantalla. Es una función especial porque si los valores de minutos o segundos son más pequeños que dos cifras, los muestra siempre con dos cifras. Por ejemplo, si el número de minutos es 0 y de segundos es 7, le pone un 0 delante a ambas variables para poder mostrar 00 y 07.
La función separadorDosPuntos() dibuja » : » sobre la matriz 1 (minutos) para visualmente separar los dígitos de los minutos de los segundos.
Para resolver este reto os proponemos tres pasos:
a) Estableciendo la variable minutos a 0. Controlar los valores que tiene la variable segundos (siempre entre 59 y 0) desde la función que hace la cuenta atrás llamada lanzarTemporizador(). Es decir, en cada vuelta debes decrementar la variable segundos y llamar a la función mostrarMinutosSegundos. Por otro lado, como la pantalla funciona un poco lenta, el tiempo de espera no es 1000 ms sino algo menos porque la pantalla tarda en representar los números. Nosotras estamos utilizando 775ms, ¡pero podéis cronometrarlo para que sea más exacto! Puedes hacerlo con el bucle for de la función cuentaAtrasEnSegundos() o bien, lo que te recomendamos, hacerlo con el bucle while() que se muestra en la plantilla, que es la estructura para resolver la siguiente parte de este reto….
b) ¿Qué ocurre si ponemos más de 59 segundos? Por ejemplo 1 minuto 30 segundos. La secuencia sería algo como 01:30 -> … -> 01:01 -> 01:00 -> 00:59 -> 00:58 . ¡Fíjate qué ocurre cuando los segundos llegan a 0! Es necesario decrementar el número de minutos y entonces poner a 59 los segundos… ¡Intenta programar cómo controlarías los minutos cuando los segundos llegan a 0!
¡IDEAS!
Idea: Cuando finalice la cuenta atrás, antes de la melodía puedes mostrar por pantalla algún mensaje de alarma o explosión.
Idea 2: Alrededor del delay() puedes encender y apagar el led RGB del color que más te guste.
En nuestro ejemplo (y para hacer pruebas), el temporizador está planteado para durar 10 segundos. Dicho tiempo va a ir disminuyendo hasta que llegue el contador a 0. Como la idea es que se muestre en la pantalla el tiempo, podéis ver que usa la función “String()”, que permite que la pantalla entienda los números.
¡Sigamos con el código principal!
3. En nuestro diseño, cuando el temporizador finalice, en la pantalla aparecerá el mensaje: «BOOM»
4. Por último, se comprueba si hemos pulsado el botón para que pare la alarma o no. En caso de que no, el buzzer comenzará a sonar mediante la función sonarNota(), y los tonos se irán cambiando. Esto ya lo tenemos diseñado de días previos.
Un resumen de todo lo que hemos visto lo tenéis en el siguiente vídeo.
Y ahora…¡a por los retos! Aunque antes un pequeño recordatorio:
GRABAD Y SACAD FOTOS de todo lo que queráis mostrar en el vídeo final. ¡¡Ya tenemos casi el proyecto y hoy pueden salir cosas muy chulas!!
RETOS DIARIOS
Hoy tenemos un reto bastante completo. En vez de sólo una misión, ¡vamos a tener 12! Van a ser mini-retos que vais a implementar como funciones propias. Así os haréis una idea de cómo se pueden integrar los componentes que vamos viendo. La lista de mini-retos en la siguiente:
Encender el led durante 2 segundos de color amarillo y otros 3 segundos de color morado
Mostrar un corazón en la matriz de leds
Mostrar cuatro iconos diferentes cualesquiera en las matrices de leds, uno en cada matriz
Mostrar en la matriz led el mensaje: “Hola” mientras suena una melodía de cuatro frecuencias diferentes, durando cada una 500 ms
Diseñar un semáforo con el led RGB, mostrando primero el color verde, luego el amarillo y por último el rojo
Mostrar vuestro nombre por la matriz de leds
Mostrar en la matriz led la palabra “Azul” mientras el led está iluminado en color azul
Hacer que el led del Arduino parpadee 5 veces, después que el led RGB se ilumine de vuestro color favorito mientras se emite un sonido constante por el buzzer
Mostrar en la matriz de leds la fecha (XX/YY), siendo XX el día e YY el mes. Incluid ceros donde haga falta, así como una raya vertical | para separar ambas
Dibujar una cara sonriente en la matriz de leds y que se borre pasados 3 segundos
Iluminar el led de forma secuencial de color rojo, verde y azul, y a la misma vez que aparezca el nombre del color en la matriz de leds
Generar un contador que empiece en cero y vaya hasta 5, de forma que cada incremento ocurra cuando parpadee el led interno de Arduino, y el número por el que vaya se muestre en pantalla. Finalmente, al llegar a 5 comience a sonar el buzzer con el sonido que queráis.
¡Ánimo! Son muchos pero son cosas que ya hemos visto con vosotras. Manda sobre estos retos el vídeo que quieras por telegram a @F3l1c13n74 para publicarlo en redes sociales. Si tienes twitter o instagram añádenos tu usuario junto con el vídeo en el mensaje de telegram para que te mencionemos en la cuenta de SereIngeniera y de la OSLUGR. ¡Recuerda subir todas las tareas al Classroom!
¡Vamos a resolver los retos de ayer! Los códigos de las resoluciones están en el material Solución retos 1 y 2, y Solución reto 3 de la sección DÍA 2: 3, 2, 1… ¡¡YAAA!! de Trabajo de clase del Classroom. Aquí en el blog no os vamos a enseñar el código entero, sino las partes que debíais implementar.
RETO 1:[ ???? ] … ¡¡YA!!
RETO 2:El led parpadea con el temporizador
RETO 3:Reiniciar la alarma sin reiniciar nuestro Arduino
Hoy vamos a seguir conociendo componentes que se pueden unir a un Arduino. El componente del día es: ¡la matriz de leds!
Este componente es similar a una pantalla. Se denomina matriz porque está compuesta de minileds de color rojo repartidos en filas y columnas, los cuales hay que activar para mostrar el icono o mensaje que queramos.
Para su programación vamos a ver una de las técnicas más utilizadas en la programación hoy día que es la programación orientada a objetos, el uso de este paradigma nos permite representar objetos del mundo real como datos manipulables por un ordenador. Es decir, es una forma de programar “más cercana” a como definimos las cosas en el día a día. La ventaja, es que estos objetos tienen propiedades (atributos) y funcionalidad (métodos), lo que en la programación simplifica la abstracción del programa dándonos a entender que un objeto responde a los métodos que se le solicitan. Para definir estos objetos, primero es necesario definir en el código las clases, a partir de las cuales se pueden crear los objetos. Como ejemplo, podéis considerar como clase una receta de tableta de chocolate, los objetos serían la forma final que tiene esa tableta en función de la marca (Nestlé, Milka…). Lo mismo pasa en el mundo Pokemon, una clase sería la definición de Pikachu en la pokedex, pero los objetos serían cada uno de los pikachus que existen, los pikachus hembra su cola acaba en forma de corazón, mientras que los machos tiene forma más cuadrada. Estos conceptos son muuuuy complejos, así que no os preocupéis si no los entendéis del todo. Es más, se trata de contenido que se da en la asignatura Programación y Diseño Orientado a Objetos de 2º curso del Grado de Ingeniería Informática, para que os hagáis una idea de la dificultad de cosas que estáis aprendiendo.
Para programar las matrices hay que ser expertos en comunicaciones electrónicas a bajo nivel. ¡Pero no os preocupéis! En este campus no pretendemos reinventar la rueda por lo que las monitoras hemos creado unas librerías (programas que implementan funciones generales) para adaptar el lenguaje al campus. Igual que en días anteriores hemos usado funciones “prefabricadas” de Arduido (por ejemplo, pinMode()) y creadas por nosotros (por ejemplo, sonarNota()), estas librerías permiten usar funciones creadas por otros. Es decir, en estas librerías nos vamos a encontrar un tipo que define el objeto MatrizLed y un conjunto de funcionalidades que podemos solicitarle a nuestra Matriz de leds. ¡Va a ser muy fácil!
Normalmente las librerías se añaden en ficheros “.zip” pero esta vez vamos a proporcionaros los códigos para que podáis ver de qué se componen estas librerías y podáis bichear cómo implementan cada funcionalidad.
Se deben incluir los ficheros [MatrizLed.h] y [MatrizLed.cpp] en la misma carpeta donde se encuentra nuestro proyecto. Estos ficheros los tenéis en el Classroom juntos con las soluciones de los retos anteriores. Es decir, tendremos en una misma carpeta nuestro fichero <nombre_proyecto>.ino y otros dos ficheros, MatrizLed.h y MatrizLed.cpp. La ruta del .h sería por ejemplo /nombre_proyecto/MatrizLed.h. En el primer fichero (.h) encontraremos definidos los nombres de las funciones y los atributos de estos objetos, y en el segundo (.cpp) se implementa la funcionalidad. Estos dos ficheros los tenéis en Trabajo de clase -> DÍA 3: Pantalla de leds -> Código base matriz (donde también estará el código que vamos a ver a continuación)
Las matrices de leds que vamos a utilizar vienen conectadas internamente por lo que únicamente tenemos que conectar la primera de ellas a nuestro Arduino. Las conexiones se realizarán de la siguiente forma:
– DIN (Pin de datos) -> `Pin 12`
– CLK (Pin de frecuencia de reloj, clock) -> `Pin 11`
– CS (Pin de comunicación por el puerto serie) -> `Pin 7`
Y para comprender las posiciones de cada led en la matriz vamos a utilizar este diagrama:
Cada cuadrado de 8×8 representa cada una de las matrices leds que tenemos. En el diagrama podéis observar que cada posición (que viene a ser un led) está definida por tres coordenadas: el número de matriz, el número de columna y el número de fila. Un ejemplo de este tipo de codificación sería el juego de hundir la flota. Hay que tener cuidado ya que en vez de empezar por 1 y acabar en 8, el orden de las coordenadas va de 7 a 0 en cada matriz led. Lo mismo ocurre con el número de matriz, se empieza en 0 y la última estaría asociada al número 3. Por ejemplo, podéis ver cómo la casilla en color rojo tendría de coordenadas la matriz “1”, la fila “5” y la columna “0”.
En el siguiente enlace se pueden generar códigos para nuestros iconos de forma interactiva: [web para generar códigos binarios de Xantorohara] (https://xantorohara.github.io/led-matrix-editor/). Además, ¡es software libre!
Un ejemplo de esta web sería la imagen de abajo. En ella podéis ir seleccionando encima de la matriz las posiciones que queráis que se iluminen. Luego, le dais a “update” y así se generaría la variable asociada a ese dibujo. Para ver dicha variable en formato que entendamos (ahora después lo veremos con más detalle), activamos la opción “As byte arrays”.
Teniendo en cuenta todas estas cosas, el programa que vamos a hacer hoy nos va a permitir aprender a lanzar mensajes en las matrices leds. Siguiendo nuestro esquema habitual…
Lógica: Vamos a probar diferentes tipos de mensajes para ver cómo se muestran en las matrices leds.
Estructura: Primero vamos a definir todas las variables conocidas a priori que necesitemos, luego ajustaremos la configuración de Arduino y por último definiremos los diversos mensajes que queramos mostrar.
Materiales: la placa de Arduino uno, el cable para poder programarla, las cuatro matrices leds unidas y cables para poder conectar los componentes a los pines.
¡Comencemos a programar! En este código nos vamos a encontrar la introducción de las librerías o la forma de definir dibujos en la matriz. Ahora después lo comentaremos más en detalle.
BARRA_SONIDO y FLECHA_DER serían dos ejemplos de cómo se puede “dibujar” un elemento estático. Teniendo en cuenta que cada matriz led está compuesta por 8×8 minileds, se ponen a 1 las posiciones que queramos encender.
Dentro de la configuración hay que avisar que queremos que nuestra matriz de leds o pantalla se active, indicando la configuración que queramos. También podemos seleccionar el brillo que queramos en la pantalla y, en función de la matriz que se ha comprado, la última línea será necesaria o no. ¡Cuidado con eso! Si tenéis dudas podéis mostrarnos vuestras pantallas para comprobar qué modelo necesitáis. Un ejemplo de matriz de leds donde hay que descomentar el código sería la imagen inferior. En ella, podéis ver que los códigos laterales están en el mismo lado que pone “in” y “out”.
La imagen de la matriz en la que no hay que descomentar nada sería la siguiente. Como veis, sólo se puede leer el código lateral.
Dentro de void loop() podemos probar muchas cosas, aunque lo primero de todo es asegurarnos que la pantalla se inicialice vacía. Nos permite eliminar cualquier “residuo” que hubiera en la pantalla antes de conectar nuestro programa, por si algún led estuviera encendido sin tener que estarlo, para ello:
El icono FLECHA_DER, que hemos definido al principio, podemos desplazarlo a lo largo de las cuatro matrices:
Como hemos explicado antes, vamos de 8 en 8 ya que cada matriz led tiene 8 columnas, por eso, al indicar “16” estaremos saltando a la tercera. También podemos escribir palabras:
¡Incluso frases largas y números! Para poder leerse, estas frases irán desplazándose por la pantalla.
Por último, podemos usarlo como un reloj. Para ello primero debemos generar dos funciones propias (¡Recordad que se ponen después de void loop()!):
Ya definidas, sí podemos mostrar los dígitos en pantalla. Ahora dentro de void loop() añadimos:
Con pantalla.setLed(matriz, fila, columna) lo que hacemos es activar unas posiciones de leds concretas, que estarán iluminadas hasta que borremos lo que haya en pantalla. Un ejemplo suelto de eso sería el siguiente:
Con todo esto ya sabéis mostrar elementos en la pantalla. ¡Queda practicar!
RETOS DIARIOS
Los retos de hoy son los siguientes:
Reto 1:Encontrar las figuras ocultas
El primer reto del día va a consistir en que juguéis al “mapa del tesoro”. En la tabla inferior tenéis una tabla llena de coordenadas, las cuales indican posiciones en la matriz de led y el color con el que se activarían (físicamente se podría implementar con una matriz RGB, de la que no disponemos). Cada coordenada consta del color que se quiera colocar, la matriz, la fila y la columna. Con paciencia, podéis ir rellenando esas coordenadas de una en una en la plantilla que os adjuntamos más abajo (y que hemos usado para explicaros las conexiones). Así descubriréis qué iconos hay tras ellas. También os hemos puesto las mismas coordenadas pero desordenadas en las otras dos imágenes, para quien quiera plantearse el reto en un nivel un poco más difícil.
Reto 2:¡Diseña tu propio dibujo de leds!
Ahora vamos a hacer el proceso inverso, vosotras vais a escoger el dibujo. Podéis hacer hasta cuatro iconos diferentes para mostrar (como en el Reto 1). Tenéis que generar el código para poder mostrarlo en la pantalla de leds. Esta vez, en vez de la plantilla, podéis (¡os aconsejamos!) hacerlo en vuestra propia matriz de leds. Tened en cuenta que nosotras sólo disponemos del color rojo, así que mejor diseñarlo con él.
Ahora, vamos a intentar que el mismo icono estático del reto anterior (escoged sólo uno si habéis hecho varios) se mueva a lo largo de las cuatro matrices. Con moverse, nos referimos a que primero aparezca en la matriz de la izquierda, desaparezca, y pase a la siguiente, así hasta la última matriz. Es decir, el icono debe aparecer primero en la matriz 0, después en la matriz 1, después matriz 2 y por último matriz 3. Por tanto, debe realizar 4 acciones
Pista: echadle un vistazo a cómo hemos movido la flecha en el programa visto en clase.
Reto 4: Ampliación optativa del reto 3
Este último reto es totalmente optativo. Consiste en hacer que el icono se mueva en forma de scroll, en vez de apareciendo en cada matriz de forma secuencial.
Pista: podéis usar un bucle for() que vaya incrementando el valor de la columna de 0 a 31.
¡Ánimo! Cuando tengas estos retos manda un video funcionando por telegram a @F3l1c13n74 y ¡lo publicaremos en las redes sociales! Si tienes twitter o instagram añádenos tu usuario junto con el vídeo en el mensaje de telegram para que te mencionemos en la cuenta de SereIngeniera y de la OSLUGR. ¡Recuerda subir todas las tareas al Classroom!