Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Construcción de Squid Games Doll usando Arduino UNO

Componentes y suministros

Cátodo común difuso RGB
Ojos
× 2
Pantalla en serie de 7 segmentos SparkFun - Rojo
Temporizador
× 1
Registro de cambio de Texas Instruments:paralelo a serie
Pantalla de 7 segmentos de 4 dígitos
× 1
LCD alfanumérico, 16 x 2
Visualización del menú
× 1
Receptor de infrarrojos (genérico)
Para control remoto
× 1
Arduino UNO
Los cerebros
× 1
Micro-servo motor SG90
Girar la cabeza
× 1
Sensor de movimiento PIR (genérico)
Detección de movimiento
× 1
Sensor ultrasónico - HC-SR04 (genérico)
Detección de distancia para ganar o perder
× 1
DFRobot DFPlayer - Un mini reproductor MP3
Voz
× 1
Interruptor de botón, momentáneo
botones de menú y el botón de inicio
× 1

Herramientas y máquinas necesarias

Impresora 3D (genérica)

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

Construyó una muñeca de juegos de calamar completamente funcional. Ella juega el juego de luz roja, luz verde contigo. ¡Completa con cabeza giratoria, ojos de colores y habla! Utiliza detección de movimiento y ultrasonidos para determinar si ganas o pierdes. Pero no te preocupes, si pierdes, ella te preguntará si quieres volver a jugar.

Mire el video y déjeme saber lo que piensa.

¡Usé todos los pines del Arduino UNO! Lo que nunca había hecho antes, así que esto fue un logro para mí. ¡Este proyecto me tomó 3 semanas para construir con 1 semana dedicada completamente a la impresión! Me tomó 6 días imprimir esta muñeca. 1 semana para la construcción y otra semana para editar el video.

ELEGOO me envió un kit UNO gratis si les hago un video, por eso construí la muñeca. Era esto o construir una sala de escape. Estoy feliz de que eligieron este proyecto. Espero que la gente lo disfrute porque fue una construcción divertida que salió muy bien y asustó a un montón de gente. Pero lo más importante es que funciona.

Aquí están todas las partes que usaré para esta compilación.

1. Comience a imprimir

La impresión va a llevar mucho tiempo. Me tomó 6 días imprimir toda la muñeca. También utilicé filamentos de diferentes colores para poder reducir la cantidad de pintura.

Mezclé un modelo que encontré en thingiverse.com, ahuequé el centro y agregué orificios de acceso para la electrónica. También modifiqué la placa del pecho para montar el Servo y Ultra Sonic.

2. A nadie le gusta pintar

Hora de pintar. Usé pintura en aerosol genérica para esto. Pinté el interior de la cabeza de la muñeca (sin enmascarar los ojos) para que los LED de los ojos no hagan que toda la cara brille. Aunque este puede ser el efecto que busca. Solo quería que los ojos brillaran.

3. Los imanes atraen pero el pegamento se pega

Una forma de sujetar todas las extremidades de la muñeca es fundir imanes en el plástico. Esto es si quieres poder desarmarla. Si volviera a hacer este proyecto, probablemente solo le pegaría todas las extremidades. Como lo veo ahora, hay pocas ventajas de usar imanes, aparte de que puede caber en una caja más pequeña para guardarla si lo desea. Lo único que no debes colocar es la cabeza en este punto.

4. Agradable a la vista

Empiece por el paso más fácil, los ojos. Usé LED de tres colores para los ojos. Como sabe, puede mezclar y combinar colores RGB para obtener el color básico que desee. Me quedé con los colores primarios y secundarios para no tener que usar PWM en las señales. Pero puede hacerlo si lo está buscando.

El pin más largo es el suelo, que será el pin 2.

Conecte el LED como se muestra en la imagen usando resistencias de 220 ohmios para cada cable aparte del suelo.

Para el montaje, simplemente pegué los LED con pegamento caliente tan cerca del centro de los ojos como pude, pero en el reverso. Asegúrese de tener un cable lo suficientemente largo para pasar por el cuello y la parte inferior de su cuerpo.

5. Menú LCD

El siguiente componente más sencillo es la pantalla LCD de 16x2. Debe utilizar la pantalla LCD con un adaptador I2C. Le hará la vida mucho más fácil y reducirá el recuento de E / S de 6 a 2. Una vez que esté conectado, la pantalla LCD debería iniciarse con "¡Bienvenido a los juegos de calamar!" en la pantalla.

Para el montaje, imprimí un círculo de 1 mm de grosor. Lo hago delgado para poder moldearlo en la parte posterior de las muñecas con una pistola de calor. Esto es mucho más fácil que averiguar los contornos de su espalda (al menos para mí). Instalé inserciones roscadas para la pantalla con tuercas en el reverso para asegurar la pantalla y el soporte de la pantalla al cuerpo.

6. Solo las cabezas de los búhos giran 180 grados

El servo fue difícil por una razón principal, no uso la biblioteca de servos. Sé que suena extraño, pero tuve que usar el timer1 para la actualización de la pantalla de 4 dígitos y la biblioteca de servos también usa esto. Afortunadamente, el servo es de 0 grados o de 180 grados y no hay un punto intermedio que lo haga mucho más fácil.

El temporizador 1 está configurado para intervalos de 5 ms, 2000 Hz. El período del servo es de 20 ms. A 0 grados, el pin solo necesita estar alto durante 2 conteos y bajo el resto del período. Para 180 grados, el pin debe estar alto durante 4 recuentos y bajo el resto del tiempo.

Hay un buen soporte en la placa del pecho para el servo. Puede atornillarlo en su lugar o pegarlo en su lugar. Usé epoxi para asegurar el servo a la placa del cofre porque también agregará fuerza a la placa del cofre y, con suerte, evitará que se dañe.

7. Suena como un murciélago

A continuación instalaremos el módulo de distancia ultrasónico. Tengo esta actualización cada 250 ms. También tiene una buena ubicación de montaje en la placa del pecho. Solo hay 2 cables para este módulo.

Usé epoxi para montar el ultrasónico en la placa del pecho.

8. Sin condiciones

El sensor de infrarrojos para el control remoto solo es necesario si desea controlar el juego. Pensé que sería divertido, pero en realidad no utilizo este modo, el juego automático es bastante divertido.

Elegí montar el sensor de infrarrojos dentro de un clip en el cabello de la muñeca. Obviamente, puede optar por colocarlo en otro lugar. Estaba tratando de ocultarlo, pero tal vez haya un lugar mejor porque el IR no siempre ve el control remoto cuando gira la cabeza y el sensor está en el otro lado.

9. De vez en cuando

A continuación, configuraremos la pantalla del temporizador. Esto es mucho trabajo para una pantalla de 4 dígitos. Incluiré el diagrama de conexión de ELEGOO. El juego dura solo 5 minutos, por lo que también eliminé el uso del dígito más significativo. Pero puede decidir conservarlo si tiene el pin IO disponible. Para actualizar la pantalla, debe alternar el LED muy rápidamente porque solo puede tener un dígito activo a la vez. Es por eso que parecen parpadear cuando se ven a través de una cámara. Usé una frecuencia de actualización de 2 ms que es lo suficientemente rápida como para que no puedas ver el parpadeo. A los 5ms puedo empezar a verlo parpadear cuando miro la pantalla en su visión periférica. Además, necesitará el registro de desplazamiento 74HC595.

Montar la pantalla lo que no es divertido. Decidí que era mejor integrar la pantalla en su cinturón. La muñeca original de Squid Games no tiene cinturón, por supuesto, pero hubo que hacer sacrificios para mostrarle esta pantalla. Si también elige esta ruta, enmascare un cuadrado del mismo tamaño que la pantalla y luego recórtelo con una Dremel. Luego utilicé masilla epoxi para agregar una transición gradual a la pantalla. Pero esto no era necesario, solo pensé que se veía mejor de esta manera.

Monté el 74HC595 en el protector del prototipo, de lo contrario, tendrás cables por todos lados. Una solución alternativa es utilizar una pantalla de temporizador diferente que tenga una comunicación más conveniente con menos pines.

10. Te vi moverse

El detector de movimiento es un pequeño extraño. Esta cosa usa infrarrojos para detectar movimiento. Una cosa que aprendí es que este sensor necesita tiempo para calentarse. Al inicio, necesita 1 minuto para calentarse. Es por eso que hay un tiempo de inicio de 1 minuto para la muñeca. Otra molestia con este módulo es que lo más rápido que puede actualizar una detección de movimiento es de unos 5 segundos. La última molestia es lo sensible que es este sensor. Incluso con la sensibilidad al mínimo, todavía puede ver los movimientos más pequeños y, a veces, movimientos de los que ni siquiera sé de qué está hablando. Para ayudar a prevenir estos "falsos positivos", monté el sensor dentro de una caja de protección para caballos. La caja tiene un pequeño orificio (7 mm) para que el detector de movimiento mire hacia afuera. Como beneficio adicional, esto evita que tengas que montar este sensor gigante en el exterior de la muñeca. El sensor de movimiento solo tiene un cable binario para retroalimentación, movimiento o no.

Para montar el sensor, imprimí la cejilla del caballo y la pegué en el interior de la muñeca. Luego hice un agujero en el cuerpo. Usé un inserto roscado en la caja de la persiana para asegurar el sensor de movimiento.

11. No aprietes mis botones

Finalmente, estamos en los botones. Si tiene los pines de E / S adicionales, es más fácil conectar cada uno de ellos a una entrada digital. Pero no tuve este lujo para la ONU. En su lugar, tuve que usar una entrada analógica para leer los valores de la resistencia y determinar qué botón se estaba presionando. Los valores que utilicé fueron 1K, 2K y 5K. Luego tuve una resistencia de 220 ohmios para bajar la entrada analógica. De lo contrario, flotará y se presionarán botones al azar.

Monté los botones en la misma placa de montaje que la pantalla LCD. Esto no fue fácil, pero no tenía una mejor manera. Soldar los cables en estos botones y luego hacer que pasen a través de pequeños orificios perforados en el plástico pondrá a prueba a sus pacientes.

12. ¿Puedes oírme ahora?

El último paso y probablemente el más importante es el módulo de sonido. Esto usará el puerto serie en el UNO, por lo que debe agregar resistencias de 1K Ohm a los pines Tx y Rx; de lo contrario, no podrá programar el UNO después de que se realice esta conexión. Además, deberá utilizar el pin "ocupado" para que UNO sepa que ya se está reproduciendo un sonido. Esto es muy importante si tiene MP3 reproducidos de forma consecutiva.

Monté el módulo del reproductor MP3 en el protector prototipo. Este protector hace que el montaje de componentes como este sea muy conveniente porque luego simplemente se conecta al UNO. Este módulo necesitará un altavoz de 8 ohmios y tiene una salida de 3 W. El altavoz estaba pegado a la base de la muñeca. Hice pequeños orificios debajo del altavoz para que el sonido saliera mejor.

13. Monte el UNO

Instale el UNO en la plataforma y conecte el protector del prototipo al UNO. Asegúrese de haber etiquetado todos los cables, si no, probablemente no sepa a dónde van ninguno de ellos ahora. Con un poco de negociación, puede obtener el UNO montado dentro de la muñeca con todos los cables conectados.

Usé inserciones roscadas para montar la plataforma en la parte inferior de la muñeca.

14. Prueba de corrección de prueba

Aquí es cuando puedes ponerte tu sombrero de depuración. Puedo decirles que el software está funcionando en GitHub, así que al menos eso es una cosa menos que depurar. Pero continúe de todos modos si tiene dudas y envíeme las actualizaciones que encuentre.

15. Juguemos

Es hora de ponerla a prueba y jugar un juego. Así es como se programa el juego.

Al iniciar, gira la cabeza hacia adelante.

El sensor de movimiento tarda un minuto completo en iniciarse. Entonces hay un temporizador cuando comienza. A mitad de camino, se ríe y gira la cabeza. Then announces when she is ready.

Depending on if you have the game set to remote she says different things. In Auto mode she asks you to press the play button. In my case, this is the far right button. In remote mode she will ask you to press the power button when you are ready. Then press the play button to toggle to red light or green light.

So when you are ready, press the go button and she will give you 10 seconds to get in place. Usually someone else nearby will press this button.

Then the game begins. She will start with Green light. For green light you have to get within 50cm to trigger a win. If you are within 100cm she will say indicate that you are getting closer. Green light is only using the sonar.

For red light the motion sensor and the distance sensor is being used. If you move enough for the motion sensor to trip or if you move more than 10cm forward, you will loose the game. You will also loose the game if time runs out. She will remind you that time is almost out at 5 seconds left.

The last cool feature is that she will also speak in the Korean voice for the red light. This is a menu feature. Press the far left button to toggle the menu item, and the center button to toggle the item options.

16. Watch Video

This video took me a long time to edit. I have probably 30 hours in just editing. But it was fun making it. I think it came out good and is funny but want you to see for yourself. Please let me know what you think and if you have any questions.

https://youtu.be/jd_4a4x3uCw

Thank You!

Code

  • Squid Game Doll Sketch
Squid Game Doll SketchC/C++
This will control all of the sensor and the game logic.
/// CodeMakesItGo Dec 2021#include #include #include #include #include #include #include /*-----( Analog Pins )-----*/#define BUTTONS_IN A0#define SONAR_TRIG_PIN A1#define SONAR_ECHO_PIN A2#define MOTION_IN A3/*-----( Digital Pins )-----*/#define LED_BLUE 13#define LED_GREEN 12#define LED_RED 11#define SEGMENT_DATA 10 // DS#define SEGMENT_CLOCK 9 // SHCP#define SEGMENT_LATCH 8 // STCP#define SEGMENT_1_OUT 7#define SEGMENT_2_OUT 6#define SEGMENT_3_OUT 5#define IR_DIGITAL_IN 4 // IR Remote#define SERVO_OUT 3#define DFPLAYER_BUSY_IN 2/*-----( Configuration )-----*/#define TIMER_FREQUENCY 2000#define TIMER_MATCH (int)(((16E+6) / (TIMER_FREQUENCY * 64.0)) - 1)#define TIMER_2MS ((TIMER_FREQUENCY / 1000) * 2)#define VOLUME 30 // 0-30#define BETTER_HURRY_S 5 // play clip at 5 seconds left#define WIN_PROXIMITY_CM 50 // cm distance for w inner#define CLOSE_PROXIMITY_CM 100 // cm distance for close to winning#define GREEN_LIGHT_MS 3000 // 3 seconds on for green light#define RED_LIGHT_MS 5000 // 5 seconds on for green light#define WAIT_FOR_STOP_MOTION_MS 5000 // 5 seconds to wait for motion detection to stop/*-----( Global Variables )-----*/static unsigned int timer_1000ms =0;static unsigned int timer_2ms =0;static unsigned char digit =0; // digit for 4 segment displaystatic int countDown =60; // Start 1 minute countdown on startupstatic const int sonarVariance =10; // detect movement if greater than thisstatic bool gameInPlay =false;static bool faceTree =false;static bool remotePlay =false;// 0 , 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, NULLconst unsigned char numbers[] ={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00};const char *MenuItems[] ={"Language", "Play Time", "Play Type"};typedef enum{ LANGUAGE, PLAYTIME, PLAYTYPE, MENUITEM_COUNT} MenuItemTypes;const char *Languages[] ={"English", "Korean"};typedef enum{ ENGLISH, KOREAN, LANUAGE_COUNT} LanguageTypes;static int language =0;const char *PlayTime[] ={"300", "240", "180", "120", "60", "30", "15"};typedef enum{ PT300, PT240, PT180, PT120, PT60, PT30, PT15, PLAYTIME_COUNT} PlayTimeTypes;const int playTimes[] ={300, 240, 180, 120, 60, 30, 15};static int playTime =0;const char *PlayType[] ={"Auto", "Remote"};typedef enum{ AUTO, REMOTE, PLAYTYPE_COUNT} PlayTypeTypes;static int playType =0;typedef enum{ BLACK, RED, GREEN, BLUE, WHITE, YELLOW, PURPLE} EyeColors;EyeColors eyeColor =BLACK;typedef enum{ WARMUP, WAIT, READY, GREENLIGHT, REDLIGHT, WIN, LOSE} GameStates;static GameStates gameState =WARMUP;/*-----( Class Objects )-----*/FireTimer task_50ms;FireTimer task_250ms;DFPlayerMini_Fast dfPlayer;SR04 sonar =SR04(SONAR_ECHO_PIN, SONAR_TRIG_PIN);IRrecv irRecv(IR_DIGITAL_IN);decode_results irResults;LiquidCrystal_I2C lcdDisplay(0x27, 16, 2); // 16x2 LCD display/*-----( Functions )-----*/void translateIR() // takes action based on IR code received{ switch (irResults.value) { case 0xFFA25D:Serial.println("POWER"); if (gameState ==WAIT) { gameInPlay =true; } break; case 0xFFE21D:Serial.println("FUNC/STOP"); descanso; case 0xFF629D:Serial.println("VOL+"); descanso; case 0xFF22DD:Serial.println("FAST BACK"); descanso; case 0xFF02FD:Serial.println("PAUSE"); remotePlay =!remotePlay; descanso; case 0xFFC23D:Serial.println("FAST FORWARD"); descanso; case 0xFFE01F:Serial.println("DOWN"); descanso; case 0xFFA857:Serial.println("VOL-"); descanso; case 0xFF906F:Serial.println("UP"); descanso; case 0xFF9867:Serial.println("EQ"); descanso; case 0xFFB04F:Serial.println("ST/REPT"); descanso; case 0xFF6897:Serial.println("0"); descanso; case 0xFF30CF:Serial.println("1"); descanso; case 0xFF18E7:Serial.println("2"); descanso; case 0xFF7A85:Serial.println("3"); descanso; case 0xFF10EF:Serial.println("4"); descanso; case 0xFF38C7:Serial.println("5"); descanso; case 0xFF5AA5:Serial.println("6"); descanso; case 0xFF42BD:Serial.println("7"); descanso; case 0xFF4AB5:Serial.println("8"); descanso; case 0xFF52AD:Serial.println("9"); descanso; case 0xFFFFFFFF:Serial.println(" REPEAT"); descanso; default:Serial.println(" other button "); }}bool isPlayingSound(){ return (digitalRead(DFPLAYER_BUSY_IN) ==LOW);}void updateTimeDisplay(unsigned char digit, unsigned char num){ digitalWrite(SEGMENT_LATCH, LOW); shiftOut(SEGMENT_DATA, SEGMENT_CLOCK, MSBFIRST, numbers[num]); // Active LOW digitalWrite(SEGMENT_1_OUT, digit ==1 ? LOW :HIGH); digitalWrite(SEGMENT_2_OUT, digit ==2 ? LOW :HIGH); digitalWrite(SEGMENT_3_OUT, digit ==3 ? LOW :HIGH); digitalWrite(SEGMENT_LATCH, HIGH);}void updateServoPosition(){ static int servoPulseCount =0; static bool lastPosition =false; // Only get new value at start of period if (servoPulseCount ==0) lastPosition =faceTree; if (!lastPosition) // 180 degrees { digitalWrite(SERVO_OUT, servoPulseCount <5 ? HIGH :LOW); } else // 0 degrees { digitalWrite(SERVO_OUT, servoPulseCount <1 ? HIGH :LOW); } servoPulseCount =(servoPulseCount + 1) % 40; // 20ms period}void updateMenuDisplay(const int button){ static int menuItem =0; static int menuOption =0; switch (button) { case 1:menuItem =(menuItem + 1) % MENUITEM_COUNT; if (menuItem ==LANGUAGE) { menuOption =language; } else if (menuItem ==PLAYTIME) { menuOption =playTime; } else if (menuItem ==PLAYTYPE) { menuOption =playType; } else { menuOption =0; } break; case 2:if (menuItem ==LANGUAGE) { menuOption =(menuOption + 1) % LANUAGE_COUNT; language =menuOption; } else if (menuItem ==PLAYTIME) { menuOption =(menuOption + 1) % PLAYTIME_COUNT; playTime =menuOption; } else if (menuItem ==PLAYTYPE) { menuOption =(menuOption + 1) % PLAYTYPE_COUNT; playType =menuOption; } else { menuOption =0; } break; case 3:if (gameState ==WAIT) { gameInPlay =true; } if (gameState ==GREENLIGHT || gameState ==REDLIGHT) { gameInPlay =false; } default:break; } if (menuOption !=-1) { lcdDisplay.clear(); lcdDisplay.setCursor(0, 0); lcdDisplay.print(MenuItems[menuItem]); lcdDisplay.setCursor(0, 1); if (menuItem ==LANGUAGE) { lcdDisplay.print(Languages[menuOption]); } else if (menuItem ==PLAYTIME) { lcdDisplay.print(PlayTime[menuOption]); } else if (menuItem ==PLAYTYPE) { lcdDisplay.print(PlayType[menuOption]); } else { lcdDisplay.print("unknown option"); } } else { menuItem =0; menuOption =0; }}void handleButtons(){ static int buttonPressed =0; int value =analogRead(BUTTONS_IN); if (value <600) // buttons released { if (buttonPressed !=0) updateMenuDisplay(buttonPressed); buttonPressed =0; return; } else if (value <700) { Serial.println("button 1"); buttonPressed =1; } else if (value <900) { Serial.println("button 2"); buttonPressed =2; } else if (value <1000) { Serial.println("button 3"); buttonPressed =3; } else { Serial.println(value); buttonPressed =0; }}static int lastSonarValue =0;void handleSonar(){ int value =sonar.Distance(); if (value> lastSonarValue + sonarVariance || value  30000 || sequence ==0) { internalTimer =millis(); if(playType ==AUTO) { // press the go button when you are ready Serial.println("Press the go button when you are ready"); dfPlayer.playFolder(1, 5); } else { Serial.println("Press the power button on the remote when you are ready"); dfPlayer.playFolder(1, 6); } // eyes are blue eyeColor =BLUE; // facing players faceTree =false; gameInPlay =false; sequence++; } } else if (gameState ==READY) { currentTimer =millis(); if (sequence ==0) { // get in position, game will start in 10 seconds Serial.println("Get in position."); dfPlayer.playFolder(1, 7); countDown =10; // eyes are green eyeColor =WHITE; // facing players faceTree =false; sequence++; internalTimer =millis(); } else if (sequence ==1) { if (playType ==REMOTE) { if (remotePlay) sequence++; } else sequence++; } else if (sequence ==2) { // at 0 seconds, here we go! if (countDown ==0) { countDown =playTimes[playTime]; Serial.print("play time set to "); Serial.println(countDown); Serial.println("Here we go!"); dfPlayer.playFolder(1, 8); gameState =GREENLIGHT; sequence =0; } } } else if (gameState ==GREENLIGHT) { currentTimer =millis(); if (sequence ==0) { // eyes are green eyeColor =GREEN; // play green light Serial.println("Green Light!"); dfPlayer.playFolder(1, 9); sequence++; } else if(sequence ==1) { // play motor sound dfPlayer.playFolder(1, 19); // facing tree faceTree =true; sequence++; internalTimer =millis(); } else if (sequence ==2) { // wait 3 seconds or until remote // switch to red light if (playType ==AUTO &¤tTimer - internalTimer> GREEN_LIGHT_MS) { sequence =0; gameState =REDLIGHT; } else if (playType ==REMOTE &&remotePlay ==false) { sequence =0; gameState =REDLIGHT; } else { // look for winner button or distance if (gameInPlay ==false || lastSonarValue  WAIT_FOR_STOP_MOTION_MS) { internalTimer =millis(); sequence++; Serial.println("Done settling"); } Serial.println("Waiting to settle"); } else if (sequence ==3) { // back to green after 5 seconds if (playType ==AUTO &¤tTimer - internalTimer> RED_LIGHT_MS) { sequence =0; gameState =GREENLIGHT; } else if (playType ==REMOTE &&remotePlay ==true) { sequence =0; gameState =GREENLIGHT; } else { // can't push the button while red light // detect movement // detect distance change if (gameInPlay ==false || lastMotion ==1 || lastSonarValue  
Project files
All of the files for this buildhttps://github.com/CodeMakesItGo/SquidGamesDoll

Schematics

This is how I connected all of the components to the UNO.
The project repo
All of the files for this build are stored here. https://github.com/CodeMakesItGo/SquidGamesDoll

Proceso de manufactura

  1. Hacer Monitor Ambilight usando Arduino
  2. Juego Arduino Pong - Pantalla OLED
  3. Sistema de robótica de detección humana con Arduino Uno
  4. Voltímetro de bricolaje con Arduino y un teléfono inteligente
  5. Monitor de frecuencia cardíaca con IoT
  6. WebServerBlink usando Arduino Uno WiFi
  7. Calculadora UNO simple
  8. Sonda usando arduino y visualización en procesamiento IDE
  9. Persistencia de la visión
  10. Plataforma de entrenamiento Arduino
  11. Cree la aplicación Fridgeye con una pantalla Nextion