Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Compilação de boneca Squid Games usando Arduino UNO

Componentes e suprimentos

Cátodo comum difuso RGB
Olhos
× 2
Exibição serial de 7 segmentos SparkFun - vermelho
Temporizador
× 1
Texas Instruments Shift Register - paralelo ao serial
Display de 4 dígitos e 7 segmentos
× 1
LCD alfanumérico, 16 x 2
Exibição do menu
× 1
Receptor IR (genérico)
Para controle remoto
× 1
Arduino UNO
Os cérebros
× 1
Micro servo motor SG90
Gire a cabeça
× 1
Sensor de movimento PIR (genérico)
Detecção de movimento
× 1
Sensor ultrassônico - HC-SR04 (genérico)
Detecção de distância para ganhar ou perder
× 1
DFRobot DFPlayer - Um Mini MP3 Player
Voz
× 1
Botão de pressão, momentâneo
botões de menu e o botão Iniciar
× 1

Ferramentas e máquinas necessárias

Impressora 3D (genérica)

Aplicativos e serviços online

Arduino IDE

Sobre este projeto


Construiu uma boneca de jogos de lula totalmente funcional. Ela joga o jogo da luz vermelha-luz verde com você. Completo com cabeça giratória, olhos coloridos e ela fala! Ela usa ultrassônica e detecção de movimento para determinar se você ganha ou perde. Mas não se preocupe, se você perder ela só pergunta se você quer jogar de novo.

Assista ao vídeo e me diga o que você achou.

Usei todos os pinos do Arduino UNO! O que eu nunca fiz antes, então essa foi uma conquista para mim. Este projeto me levou 3 semanas para construir com 1 semana inteiramente dedicada à impressão! Levei 6 dias para imprimir esta boneca. 1 semana para a construção e outra semana para editar o vídeo.

A ELEGOO me enviou um kit UNO grátis se eu fizesse um vídeo para eles, então é por isso que construí a boneca. Era isso ou construir uma sala de fuga. Estou feliz por eles escolherem este projeto. Espero que as pessoas gostem porque foi uma construção divertida que ficou muito bonita e assustou um monte de gente. Mas o mais importante é que funciona.

Aqui estão todas as peças que usarei para esta construção.

1. Comece a imprimir

A impressão vai demorar muito. Levei 6 dias para imprimir a boneca inteira. Também usei filamentos de cores diferentes para reduzir a quantidade de pintura.

Remixei um modelo que encontrei em thingiverse.com, esvaziei o centro e adicionei orifícios de acesso para a parte eletrônica. Também modifiquei a placa do peito para que o Servo e o Ultra Sonic fossem montados.

2. Ninguém gosta de pintar

É hora de pintar. Usei tinta spray genérica para isso. Pintei o interior da cabeça da boneca (mascarado os olhos) para que os LEDs dos olhos não façam todo o rosto brilhar. Embora este possa ser o efeito que você está procurando. Eu queria apenas os olhos brilhando.



3. Ímãs atraem, mas cola em bastões

Uma maneira de prender todos os membros da boneca é derreter os ímãs no plástico. Isso se você quiser ser capaz de desmontá-la. Se eu fizesse este projeto novamente, provavelmente apenas colaria todos os membros nela. Pelo que vejo agora, há pouca vantagem em usar ímãs, além de que ela pode caber em uma caixa menor para armazenamento, se quiser. A única coisa que você não deve prender é a cabeça neste ponto.

4. Fácil para os olhos

Comece com a etapa mais fácil, os olhos. Usei LEDs tricolores para os olhos. Como você sabe, você pode misturar e combinar cores RGB para obter a cor básica que desejar. Eu mantive as cores primárias e secundárias, então não tive que fazer o PWM dos sinais. Mas você pode, se estiver procurando por isso.

O pino mais longo é o aterramento, que será o pino 2.

Conecte o LED conforme ilustrado usando resistores de 220 ohm para cada cabo além do aterramento.

Para a montagem, simplesmente colei os LEDs com cola quente o mais próximo possível do centro dos olhos, mas no verso. Certifique-se de usar um fio longo o suficiente para passar pelo pescoço e na parte inferior do corpo.

5. Menu LCD

O próximo componente mais fácil é a tela LCD 16x2. Você deve usar a tela LCD com um adaptador I2C. Isso tornará sua vida muito mais fácil e reduzirá a contagem de E / S de 6 para 2. Uma vez conectado, o LCD deve iniciar com "Bem-vindo aos jogos de lula!" no display.

Para a montagem, imprimi um círculo de 1 mm de espessura. Eu faço isso fino para que eu possa moldá-lo nas costas das bonecas com uma pistola de ar quente. Isso é muito mais fácil do que descobrir os contornos das costas (pelo menos para mim). Instalei inserções rosqueadas para a tela com porcas no lado reverso para prender a tela e o suporte da tela ao corpo.

6. Somente cabeças de coruja giram 180 graus

O servo era difícil por um motivo principal, eu não uso a biblioteca servo. Eu sei que parece estranho, mas eu tive que usar o timer1 para a atualização do display de 4 dígitos e a biblioteca servo também usa isso. Felizmente, o servo tem 0 graus ou 180 graus e não há meio-termo para tornar isso muito mais fácil.

Timer1 é configurado para intervalos de.5ms, 2.000 Hz. O período do servo é de 20ms. A 0 graus, o pino só precisa estar alto por 2 contagens e baixo no restante do período. Para 180 graus, o pino precisa estar alto por 4 contagens e baixo no restante do tempo.

Há uma boa montagem na placa do peito para o servo. Você pode aparafusar ou colar no lugar. Usei epóxi para prender o servo à placa torácica, pois isso também aumentará a resistência da placa torácica e, espero, evite danos.

7. Parece um morcego

Em seguida, instalaremos o módulo de distância ultrassônica. Tenho essa atualização a cada 250ms. Ele também tem um bom local de montagem na placa torácica. Existem apenas 2 fios para este módulo.

Usei epóxi para montar o ultra-sônico na placa do tórax.

8. Sem amarras

O sensor IR para o controle remoto só é necessário se você quiser controlar o jogo. Achei que seria divertido, mas não use esse modo, o jogo automático é divertido o suficiente.

Optei por montar o sensor IR dentro de uma presilha no cabelo da boneca. Obviamente, você pode escolher colocá-lo em outro lugar. Eu estava tentando esconder, mas talvez haja um lugar melhor porque o IR nem sempre vê o controle remoto quando ela vira a cabeça e o sensor está do outro lado.

9. Tempo a tempo

Em seguida, configuraremos a exibição do cronômetro. Isso é muito trabalhoso para um display de 4 dígitos. Vou incluir o diagrama de conexão da ELEGOO. O jogo dura apenas 5 minutos, então também removi o uso do dígito mais significativo. Mas você pode decidir mantê-lo se tiver o pino IO disponível. Para atualizar o display, você deve alternar o LED muito rapidamente, porque você só pode ter um dígito ativo por vez. É por isso que eles parecem piscar quando vistos pela câmera. Usei uma taxa de atualização de 2 ms, que é rápida o suficiente para que você não veja a oscilação. Aos 5 ms, posso começar a ver tremeluzir ao olhar para o visor com a sua visão periférica. Além disso, você precisará do registrador de deslocamento 74HC595.

Montar o display não é divertido. Decidi que era melhor integrar o visor em seu cinto. A boneca original em Squid Games não tem um cinto, é claro, mas sacrifícios tiveram que ser feitos para conseguir essa exibição nela. Se você escolher esta rota também, mascare um quadrado do mesmo tamanho da tela e recorte com uma Dremel. Em seguida, usei massa epóxi para adicionar uma transição gradual à tela. Mas isso não era necessário, eu apenas pensei que parecia melhor assim.

Montei o 74HC595 na blindagem do protótipo, caso contrário, você terá fios espalhados por todo o lugar. Uma solução alternativa é usar um display de cronômetro diferente que tenha uma comunicação mais conveniente com menos pinos.

10. Eu vi você se mover

O detector de movimento é um cara estranho. Essa coisa usa infravermelho para detectar movimento. Uma coisa que aprendi é que esse sensor precisa de tempo para aquecer. Na inicialização, ele precisa de 1 minuto para aquecer. É por isso que há um tempo de inicialização de 1 minuto para a boneca. Outro aborrecimento com este módulo é que o mais rápido que pode atualizar uma detecção de movimento é cerca de 5 segundos. O último aborrecimento é a sensibilidade desse sensor. Mesmo com a sensibilidade no mínimo, ele ainda consegue ver os menores movimentos e às vezes movimentos que eu nem sei do que está falando. Para ajudar a prevenir esses "falsos positivos", montei o sensor dentro de uma caixa para blindagem de cavalos. A caixa tem um pequeno orifício (7 mm) para o detector de movimento olhar. Como um bônus, isso evita que você tenha que montar este sensor gigante na parte externa da boneca. O sensor de movimento possui apenas um fio binário para feedback, movimento ou não.

Para montar o sensor, imprimi a cortina de cavalo e colei no interior da boneca. Em seguida, fiz um furo no corpo. Usei a inserção roscada na caixa da máscara para proteger o sensor de movimento.

11. Não aperte meus botões

Finalmente, chegamos aos botões. Se você tiver pinos de E / S extras, será mais fácil conectar cada um deles a uma entrada digital. Mas não tive esse luxo para a ONU. Em vez disso, tive que usar uma entrada analógica para ler os valores do resistor e determinar qual botão estava sendo pressionado. Os valores que usei foram 1K, 2K e 5K. Então eu tinha um resistor de 220 Ohm para diminuir a entrada analógica. Caso contrário, ele irá flutuar e será pressionado aleatoriamente no botão.

Montei os botões na mesma placa de montagem do LCD. Isso não foi fácil, mas eu não tinha um jeito melhor. Soldar os fios nesses botões e fazê-los passar por pequenos orifícios feitos no plástico testará seus pacientes.

12. Você pode me ouvir agora?

O último passo e provavelmente o mais importante é o módulo de som. Isso usará a porta serial no UNO, então você deve adicionar resistores de 1K Ohm aos pinos Tx e Rx, caso contrário, você será impedido de programar o UNO depois que esta conexão for feita. Além disso, você precisará usar o pino "ocupado" para que o UNO saiba que um som já está tocando. Isso é muito importante se você tiver MP3s reproduzidos consecutivamente.

Montei o módulo do MP3 player na blindagem do protótipo. Esta blindagem torna a montagem de componentes como este muito conveniente, pois, em seguida, basta se conectar ao UNO. Este módulo precisará de um alto-falante de 8 ohms e tem uma saída de 3W. O alto-falante estava colado na base da boneca. Eu fiz pequenos furos sob o alto-falante para que o som saísse melhor.

13. Monte o UNO

Instale o UNO na plataforma e conecte a proteção do protótipo ao UNO. Certifique-se de ter etiquetado todos os fios, se não, você provavelmente não sabe para onde nenhum deles vai agora. Com um pouco de negociação, você pode colocar o UNO montado dentro do boneco com todos os fios conectados.

Usei encaixes rosqueados para montar a plataforma na parte inferior da boneca.

14. Teste de correção de teste

É aí que você começa a colocar seu chapéu de depuração. Posso dizer que o software está funcionando no GitHub, então pelo menos isso é uma coisa a menos para depurar. Mas se você tiver dúvidas, vá em frente e envie-me as atualizações que encontrar.

15. vamos jogar

É hora de testá-la e jogar um jogo. Aqui está como o jogo é programado.

Na inicialização, ela vira a cabeça para a frente.

O sensor de movimento leva um minuto inteiro para inicializar. Portanto, há um cronômetro quando ele começa. No meio do caminho, ela ri e vira a cabeça. Em seguida, anuncia quando ela está pronta.

Dependendo se você configurou o jogo para remoto, ela diz coisas diferentes. No modo Auto, ela pede que você pressione o botão play. No meu caso, este é o botão da extrema direita. No modo remoto, ela pedirá que você pressione o botão liga / desliga quando estiver pronto. Em seguida, pressione o botão play para alternar para luz vermelha ou luz verde.

Quando estiver pronto, pressione o botão ir e ela lhe dará 10 segundos para entrar no lugar. 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

Obrigada!


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"); pausa; case 0xFF629D:Serial.println("VOL+"); pausa; case 0xFF22DD:Serial.println("FAST BACK"); pausa; case 0xFF02FD:Serial.println("PAUSE"); remotePlay =!remotePlay; pausa; case 0xFFC23D:Serial.println("FAST FORWARD"); pausa; case 0xFFE01F:Serial.println("DOWN"); pausa; case 0xFFA857:Serial.println("VOL-"); pausa; case 0xFF906F:Serial.println("UP"); pausa; case 0xFF9867:Serial.println("EQ"); pausa; case 0xFFB04F:Serial.println("ST/REPT"); pausa; case 0xFF6897:Serial.println("0"); pausa; case 0xFF30CF:Serial.println("1"); pausa; case 0xFF18E7:Serial.println("2"); pausa; case 0xFF7A85:Serial.println("3"); pausa; case 0xFF10EF:Serial.println("4"); pausa; case 0xFF38C7:Serial.println("5"); pausa; case 0xFF5AA5:Serial.println("6"); pausa; case 0xFF42BD:Serial.println("7"); pausa; case 0xFF4AB5:Serial.println("8"); pausa; case 0xFF52AD:Serial.println("9"); pausa; case 0xFFFFFFFF:Serial.println(" REPEAT"); pausa; 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; Retorna; } 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

Processo de manufatura

  1. Faça Monitor Ambilight usando Arduino
  2. Jogo Arduino Pong - Tela OLED
  3. Sistema de detecção de humanos usando Arduino Uno
  4. Faça você mesmo voltímetro usando Arduino e Smartphone
  5. Monitor de freqüência cardíaca usando IoT
  6. WebServerBlink usando Arduino Uno WiFi
  7. Calculadora UNO simples
  8. Sonar usando arduino e exibição no IDE de processamento
  9. Persistência da visão
  10. Plataforma de treinamento Arduino