Logo Rodrigo Barbosa

🤖 ROBÓTICA NO ENSINO FUNDAMENTAL I — 4º ANO

⚡ 2º BIMESTRE: O MERGULHO NO ANINHAMENTO PROFUNDO ⚡
APROVADO PELO MINISTÉRIO DO LOOP-DENTRO-DE-LOOP
Logo Gisele Nunes

🧙‍♂️ CARTA DE ABERTURA DO BIMESTRE

Leia com um apito na boca e um capacete de papelão na cabeça

"ATENÇÃO, PROFESSOR(A) QUE PENSA QUE SABE TUDO SOBRE ROBÓTICA!

Você acha que ensinar aninhamento é difícil? Que criança de 9 anos não entende loop dentro de loop? PREPARE-SE PARA LEVAR UM CHOQUE DE REALIDADE.

Enquanto você estava preocupado(a) em decorar a BNCC, seu aluno já estava aninhando desculpas para não fazer a lição de casa. Enquanto você tentava explicar o que é uma variável, ele já estava aninhando brinquedos, aninhando histórias, aninhando até os bloquinhos de montar. Aninhar código é só mais uma brincadeira para eles.

Este material não é para os fracos de espírito. É para professores que têm coragem de botar a mão na massa, que não têm medo de ver o micro:bit piscar, apitar e quem sabe quase explodir de tanta lógica aninhada.

Bem-vindo(a) ao Segundo Bimestre do 4º Ano: O Mergulho no Aninhamento Profundo.

Aqui, a gente não ensina robótica. A gente cria vício pedagógico.

Agora, respire fundo, tampe o nariz (porque o cheiro de algoritmo avançado vai invadir sua sala) e vamos nessa!

🤖 ASS: O Robô que vai dominar o mundo (e seu planejamento).

🤖 ROBÓTICA NO 4º ANO SEGUNDO BIMESTRE
Material Didático Completo Semanas 11 a 20

🎯 INTRODUÇÃO AO PROFESSOR — SEGUNDO ATO

Respire fundo. Você sobreviveu ao primeiro bimestre.

Respire fundo. Você sobreviveu ao primeiro bimestre. As crianças já sabem o que é um loop, uma variável e um evento. Agora, vamos pegar tudo isso e jogar no liquidificador do aninhamento.

Professor(a), tampe o nariz. Porque o cheiro de algoritmo avançado vai invadir sua sala.

No primeiro bimestre, ensinamos o micro:bit a piscar, contar e reagir. Agora, vamos ensiná-lo a pensar enquanto repete. É como ensinar uma criança a andar de bicicleta e, de repente, pedir para ela fazer malabarismo com bolinhas enquanto pedala. Parece loucura? É exatamente isso que o 4º ano vai adorar.

O que muda neste bimestre (e por que você vai amar):
Agora (2º Bimestre) Antes (1º Bimestre)
Loop dentro de loop (a boneca russa) Loop simples
SE, SENÃO SE, SENÃO (o cardápio de opções) SE ou SENÃO
Evento que dispara loop com SE dentro Evento isolado
Contar, acumular e decidir com base no total Contar até 10
"O que acontece se eu aninhar isso aqui?" "O que acontece?"

Aviso aos navegantes: Se você acha que criança de 9 anos não entende aninhamento, você está redondamente enganado. Eles aninham brinquedos, aninham histórias, aninham desculpas para não fazer lição. Aninhar código é só mais uma brincadeira. E nós vamos transformar isso em vício pedagógico.

📋 ESTRUTURA GERAL DO ANO LETIVO (RELEMBRANDO)

4 bimestres • 10 semanas cada
Conceito-Chave Bimestre Semanas Tema Central
Sequências, variáveis, eventos simples 1 a 10 Conhecendo o micro:bit
Condicionais aninhadas e loops avançados 11 a 20 Aninhando decisões
Acelerômetro, botões e multitarefa 21 a 30 Eventos concorrentes
Robô que resolve um problema real 31 a 40 Projeto autoral

🗺️ MAPEAMENTO BIMESTRE — HABILIDADES BNCC E RCP-PR

2º Bimestre • Semanas 11 a 20
RCP-PR Semana Título da Aula Habilidades BNCC (Matemática) Habilidades BNCC (LP) Habilidades BNCC (Outras)
Autoria: Ordenar algoritmos 11 "Desembaralhe o aninhamento" EF04MA01, EF04MA21 EF04LP11 Competência Geral 5
Autoria: Múltiplas condições 12 "SENÃO SE a terceira via" EF04MA01, EF04MA03 EF04LP11 Competência Geral 4
Autoria: Repetições aninhadas 13 "Loop dentro de loop" EF04MA16, EF04MA21 Competência Geral 5
Autoria: Variáveis e operações 14 "Contadores e acumuladores" EF04MA01, EF04MA03 Competência Geral 5
Autoria: Eventos e aninhamento 15 "Eventos com aninhamento" EF04MA21 EF04CI01, EF04GE09
Autoria: Depuração avançada 16 "Caça ao bug nível 2" EF04MA21 EF04LP11 Competência Geral 5
Autoria: Projeto integrado 17 "Robô contador de passos" EF04MA01, EF04MA03 EF04CI01
Autoria: Projeto lúdico 18 "Jogo da memória" EF04MA21 Competência Geral 5
Autoria: Projeto com sensores 19 "Semáforo com sensor" EF04MA03 EF04CI01, EF04GE09
Autoria e Apresentação 20 "Feira de robôs" EF04MA01, EF04MA21 EF04LP11 Competência Geral 5
Detalhamento das Habilidades BNCC:
Como será trabalhada Código Descrição da Habilidade
Contadores, acumuladores e variáveis numéricas nos loops EF04MA01 Ler, escrever e ordenar números naturais até a ordem de dezenas de milhar
Acumuladores que somam passos e tomam decisões EF04MA03 Resolver e elaborar problemas com números naturais envolvendo adição e subtração
Matriz de LEDs com coordenadas (x, y) nos loops aninhados EF04MA16 Descrever a posição de objetos usando coordenadas
Algoritmos com repetições aninhadas e reconhecimento de padrões EF04MA21 Compreender padrões e regularidades
Manual do robô, diário de bordo e explicação de fluxogramas EF04LP11 Planejar e produzir textos instrucionais
Acelerômetro como sensor de passos e movimento EF04CI01 Relação entre movimento e energia
Robô navegando com decisões em cada passo EF04GE09 Representar trajetos
Detalhamento RCP-PR (Referencial Curricular do Paraná):
Como será trabalhado Eixo RCP-PR
Resolução de problemas com lógica, algoritmos e aninhamento Pensamento Computacional
Uso do micro:bit, programação por blocos e hardware Mundo Digital
Segurança, ética e uso consciente da tecnologia Cultura Digital
Criação de sistemas simples com múltiplas condições e aninhamento Autoria

📅 BIMESTRE — PLANO SINTÉTICO

Semanas 11 a 20
Atividade Principal Semana Título da Aula Conceito
Jogo de cartões com código bagunçado 11 "Desembaralhe o aninhamento" Ordem de execução em aninhamentos
Robô cardápio com 3 opções 12 "SENÃO SE a terceira via" Múltiplas condições
Grade de LEDs com dois loops 13 "Loop dentro de loop" Aninhamento de repetições
Soma de passos com meta 14 "Contadores e acumuladores" Variáveis dentro de aninhamentos
Dança do chacoalhão 15 "Eventos com aninhamento" Eventos que disparam loops com SE
3 bugs em aninhamentos 16 "Caça ao bug nível 2" Depuração avançada
Pedômetro com meta e comemoração 17 "Robô contador de passos" Projeto integrado
Genius com micro:bit 18 "Jogo da memória" Aninhamento e eventos
Semáforo que detecta "carros" 19 "Semáforo com sensor" Aninhamento e simulação
Mostra de projetos do bimestre 20 "Feira de robôs" Revisão e apresentação

📚 PLANOS DE AULA DETALHADOS — 2º BIMESTRE

Semanas 11 a 20

🎯 Objetivos Operacionais
  • Cognitivos: Revisar os conceitos de loop, condicional e aninhamento; compreender que a ordem das instruções altera o resultado.
  • Procedimentais: Desembaralhar códigos bagunçados e reordená-los corretamente no MakeCode.
  • Atitudinais: Perceber que a ordem das instruções faz toda a diferença e que errar é parte do processo.
📖 Conteúdo Programático

Revisão de estruturas: REPITA, SE, SENÃO. Ordem de execução em aninhamentos. Jogo do "desembaralhe o código" (unplugged e digital).

📜 Habilidades BNCC e RCP-PR

EF04MA01, EF04MA21, EF04LP11, Competência Geral 5, RCP-PR: Autoria — Ordenar algoritmos

🧰 Materiais
Computador com MakeCode (1 por dupla) 1 micro:bit por dupla Cabo USB (1 por dupla) Cartões com linhas de código bagunçadas Suporte de pilhas (opcional)
🔧 Explicação Detalhada da Montagem do Hardware

Nesta semana, o foco é a lógica. O hardware será usado apenas para testar os códigos desembaralhados.

  1. Conecte o micro:bit ao computador usando o cabo USB.
  2. Abra o MakeCode no navegador (makecode.microbit.org).
  3. Crie um novo projeto.
  4. Após programar (ver código abaixo), clique em "Baixar" e transfira o arquivo .hex para o micro:bit.
  5. Observe o resultado na matriz de LEDs.
💻 Código a ser desenvolvido

Código Bagunçado 1 (Corrigir a ordem):

// VERSÃO BAGUNÇADA — FORA DE ORDEM
// O que o robô deveria fazer? Piscar um ícone feliz 5 vezes.
// Mas a ordem está errada!

pausar 100 ms
limpar tela
mostrar ícone feliz
repetir 5 vezes

Ordem correta:

// VERSÃO CORRIGIDA
// O loop deve envolver as ações que se repetem!

repetir 5 vezes          // O loop começa aqui
    mostrar ícone feliz  // Mostra o ícone
    pausar 100 ms        // Espera um pouquinho
    limpar tela          // Limpa a tela
// Fim do loop — volta para o início e repete mais 4 vezes

Explicação didática: "O `repetir 5 vezes` é como um abraço gigante que envolve tudo que deve ser repetido. Tudo que está DENTRO do abraço vai acontecer 5 vezes. Tudo que está FORA acontece só uma vez. Se o `limpar tela` estiver fora do abraço, a tela só vai limpar no final!"

Código Bagunçado 2 (Aninhamento errado):

// VERSÃO BAGUNÇADA
// O programador queria que, a cada repetição, o robô verificasse se o botão A foi pressionado.
// Mas o SE está fora do loop!

se botão A for pressionado
repetir 10 vezes
    mostrar número contador

Correção:

// VERSÃO CORRIGIDA
// O SE deve estar DENTRO do loop para verificar a cada repetição!

repetir 10 vezes
    se botão A for pressionado então
        mostrar número contador
    senão
        mostrar ícone triste
    // Fim do SE
// Fim do loop — volta e verifica de novo

Explicação didática: "Imagine que você está numa roda gigante que dá 10 voltas. Se você só olhar para fora ANTES de entrar na roda gigante, vai ver a mesma coisa sempre. Mas se você olhar para fora A CADA VOLTA, vai ver coisas diferentes! O SE dentro do loop faz exatamente isso: verifica a condição a cada repetição."

⏱️ Detalhamento Minuto a Minuto
0-5min
"Hoje o robô está bagunceiro! Ele embaralhou tudo! Vamos ser detetives do código?" — Abertura explosiva
5-10min
Desafio 1 — cartões — Distribua os cartões do Código 1 bagunçado. Em duplas, ordenem as linhas em 2 minutos.
10-15min
Correção coletiva — Projete a solução e discuta: "Por que a ordem certa é aquela? O que aconteceria se...?"
15-20min
Desafio 2 — aninhamento — Cartões com o Código 2 bagunçado. Ordenar em duplas.
20-25min
Discussão — "O que acontece se o SE estiver fora do loop? E se o loop estiver dentro do SE?"
25-35min
Programação no MakeCode — Cada dupla programa os dois códigos corrigidos e testa no micro:bit.
35-40min
Desafio extra — Criar seu próprio código bagunçado (com 1 erro de aninhamento) e trocar com outra dupla.
40-45min
Depuração em dupla — Corrigir o código bagunçado do colega.
45-50min
Diário do robô — Escrever no caderno: "A importância da ordem dos comandos — o que aprendi hoje."
♿ Orientações para Adaptações e Inclusão
  • TEA: Usar cartões coloridos (azul para loop, vermelho para SE, verde para ações) para facilitar a identificação visual.
  • TDAH: Desafios cronometrados (2 minutos para cada desembaralhamento) mantêm o foco.
  • Deficiência visual: Cartões em relevo ou com letras grandes; descrever os códigos verbalmente.
  • Deficiência auditiva: Instruções escritas na lousa e uso da simulação visual do MakeCode.
  • Deficiência física: Utilizar a simulação do MakeCode caso o manuseio do mouse seja difícil; oferecer apoio de um colega.
  • Altas habilidades: Criar um código com 3 níveis de aninhamento bagunçado (loop dentro de SE dentro de loop).
📊 Critérios Operacionais de Avaliação "com pontuação"
Descrição Critério Pontuação
Ordenou corretamente as linhas Desembaralhar o código 1 0-3
Ordenou corretamente com aninhamento Desembaralhar o código 2 0-3
Criatividade do bug e correção correta Criar e corrigir código próprio 0-4
Total 0-10

🎯 Objetivos Operacionais
  • Cognitivos: Compreender a estrutura `SENÃO SE` para múltiplas condições.
  • Procedimentais: Criar um programa que responda de 3 maneiras diferentes com base em uma variável.
  • Atitudinais: Desenvolver o raciocínio de decisões múltiplas e perceber que a vida não é só "sim ou não".
📖 Conteúdo Programático

Estrutura condicional múltipla: SE, SENÃO SE, SENÃO. Usando variáveis para decidir entre várias opções. Exemplo: mostrar ícone diferente para números 1, 2, 3.

📜 Habilidades BNCC e RCP-PR

EF04MA01, EF04MA03, EF04LP11, Competência Geral 4, RCP-PR: Autoria — Múltiplas condições

🧰 Materiais
Computador com MakeCode (1 por dupla) 1 micro:bit por dupla Cabo USB Cartões com números (para sorteio) Suporte de pilhas (opcional)
🔧 Explicação Detalhada da Montagem do Hardware
  1. Conecte o micro:bit ao computador via cabo USB.
  2. Abra o MakeCode.
  3. Programe conforme o código abaixo.
  4. Transfira o arquivo .hex para o micro:bit.
  5. Teste apertando o botão A várias vezes e observando a matriz de LEDs.
💻 Código a ser desenvolvido

Programa "O Robô Cardápio"

// ============================================================
// PROGRAMA: O ROBÔ CARDÁPIO
// ============================================================
// OBJETIVO: O robô mostra um ícone diferente para cada opção (1, 2, 3).
// AO APERTAR O BOTÃO A: avança para a próxima opção.
// ============================================================

// ============================================================
// COMENTÁRIO DIDÁTICO SOBRE O FLUXO GERAL DO PROGRAMA:
// ============================================================
// 1. Quando o Micro:bit liga, a variável "opcao" começa com o valor 0.
// 2. A tela fica limpa (pois nada foi programado para o início ainda).
// 3. Cada vez que o usuário aperta o botão A, o código soma +1 à "opcao".
// 4. O programa verifica o novo valor da "opcao" e desenha o ícone correspondente:
//    - Se for 1 -> desenha um rosto FELIZ.
//    - Se for 2 -> desenha um rosto TRISTE.
//    - Se for 3 -> desenha um rosto SURPRESO.
// 5. Se o valor for maior que 3 (ou seja, 4, 5, 6...), o programa "reseta" a
//    opção para 0, apaga a tela e mostra o número 0, avisando que o ciclo reiniciou.
// ============================================================

// DECLARAÇÃO DE VARIÁVEIS
// ------------------------------------------------------------
// "let opcao = 0" -> Cria um espaço na memória do Micro:bit chamado "opcao"
// (que significa "opção") e guarda o número 0 dentro dele.
// 
// POR QUE COMEÇAR EM 0? 
// Porque no nosso cardápio digital, o 0 representa o "estado inicial"
// (nenhuma opção selecionada ainda). Quando apertarmos o botão,
// somaremos 1 para chegar na primeira opção válida (opção 1).
// ------------------------------------------------------------
let opcao = 0

// ============================================================
// EVENTO: BOTÃO A PRESSIONADO
// ============================================================
// Aqui estamos dizendo ao Micro:bit: "Preste atenção! Se o usuário
// apertar o botão A (o da esquerda), execute todo o bloco de código
// que está dentro destas chaves { ... } imediatamente."
// 
// Esse tipo de estrutura é chamada de "função de retorno de chamada"
// (callback), pois o Micro:bit "chama de volta" esta função toda vez
// que o evento (apertar o botão) acontece.
// ============================================================
input.onButtonPressed(Button.A, function () {
    
    // ============================================================
    // PASSO 1: ATUALIZAR A VARIÁVEL "opcao"
    // ============================================================
    // "opcao = opcao + 1" é uma instrução matemática que faz o seguinte:
    // 1. Pega o valor ATUAL guardado em "opcao" (ex: 0).
    // 2. Soma 1 a esse valor (ex: 0 + 1 = 1).
    // 3. Guarda o NOVO resultado (1) de volta na variável "opcao".
    // 
    // NA PRÁTICA: Se já apertamos o botão algumas vezes, esse comando
    // faz a "opcao" andar para frente: 0 -> 1 -> 2 -> 3 -> 4 -> 5 ...
    // ============================================================
    opcao = opcao + 1

    // ============================================================
    // PASSO 2: ESTRUTURA CONDICIONAL MÚLTIPLA (SE / SENÃO SE / SENÃO)
    // ============================================================
    // Esta é uma "árvore de decisões". O Micro:bit vai testar as 
    // condições em ordem, de cima para baixo, e executará SOMENTE O 
    // PRIMEIRO bloco cuja condição for verdadeira.
    //
    // PENSE ASSIM: É como um fiscal de prova verificando sua resposta:
    // - "Sua opção é 1?" Se SIM, mostre feliz. Se NÃO, vá para a próxima pergunta.
    // - "Sua opção é 2?" Se SIM, mostre triste. Se NÃO, vá para a próxima.
    // - "Sua opção é 3?" Se SIM, mostre surpreso. Se NÃO, vá para a última saída.
    // - "Nenhuma das anteriores?" (opção 0, 4, 5, ...) Então: RESETE TUDO!
    // ============================================================

    // ------------------------------------
    // TESTE 1: Será que "opcao" é igual a 1?
    // ------------------------------------
    // Se o usuário apertou o botão A pela PRIMEIRA vez, "opcao" saiu de 0 para 1.
    // A condição "opcao == 1" é VERDADEIRA, então entramos neste bloco.
    // A função "basic.showIcon(IconNames.Happy)" desenha um rosto sorridente 
    // (😊) na matriz de LEDs 5x5 do Micro:bit.
    if (opcao == 1) {
        basic.showIcon(IconNames.Happy)      // Opção 1: FELIZ 😊
    } 
    // ------------------------------------
    // TESTE 2: Será que "opcao" é igual a 2?
    // ------------------------------------
    // Se o teste 1 foi FALSO (ou seja, "opcao" NÃO é 1), o código pula para este 
    // "else if". Se o usuário apertou o botão A pela SEGUNDA vez, "opcao" agora 
    // vale 2. A condição "opcao == 2" é VERDADEIRA, e desenhamos o rosto triste (😢).
    // 
    // OBS: O "else if" só é testado se o "if" anterior falhou.
    else if (opcao == 2) {
        basic.showIcon(IconNames.Sad)        // Opção 2: TRISTE 😢
    } 
    // ------------------------------------
    // TESTE 3: Será que "opcao" é igual a 3?
    // ------------------------------------
    // Se os dois testes anteriores falharam, chegamos aqui. Se o botão foi 
    // apertado pela TERCEIRA vez, "opcao" virou 3. A condição é VERDADEIRA,
    // e mostramos o rosto surpreso (😮) - a última opção válida do nosso cardápio.
    else if (opcao == 3) {
        basic.showIcon(IconNames.Surprised)  // Opção 3: SURPRESO 😮
    } 
    // ------------------------------------
    // BLOCO "SENÃO" (else) - O CORINGA
    // ------------------------------------
    // Se TODAS as condições acima forem FALSAS, o programa cai neste "else" 
    // final. Quando isso acontece? 
    // Resposta: Quando "opcao" NÃO é 1, NÃO é 2 e NÃO é 3.
    // 
    // Isso ocorrerá quando "opcao" valer 0 (estado inicial, se algo der errado)
    // ou quando valer 4, 5, 6, ... (ou seja, após apertarmos o botão pela 
    // QUARTA vez ou mais).
    // 
    // Ao invés de mostrar um ícone que não existe, este bloco é responsável
    // por "reiniciar o cardápio":
    // 1. "opcao = 0" -> Reseta a variável para o ponto de partida (zero).
    // 2. "basic.clearScreen()" -> Apaga todos os LEDs da tela (limpa o ícone).
    // 3. "basic.showNumber(0)" -> Mostra o número 0 na tela para avisar 
    //    visualmente que o ciclo foi reiniciado e estamos prontos para 
    //    começar de novo (da opção 1).
    // 
    // PRONTO! Agora, ao apertar o botão A novamente, o ciclo recomeça:
    // opcao 1 -> opcao 2 -> opcao 3 -> RESET (0) -> opcao 1 ... e assim por diante.
    else {
        opcao = 0                // Volta a variável para o início (zero).
        basic.clearScreen()      // Limpa os LEDs para evitar sobreposição de imagens.
        basic.showNumber(0)      // Mostra "0" para indicar que o sistema reiniciou.
    }
    // ============================================================
    // FIM DA ESTRUTURA CONDICIONAL
    // ============================================================

})
// ============================================================
// FIM DO PROGRAMA
// ============================================================
// PARA EXPERIMENTAR NA PRÁTICA:
// 1. Baixe este código para o seu Micro:bit.
// 2. Observe a tela (deve estar limpa ou mostrando o 0, se você reiniciou).
// 3. Aperte o botão A uma vez -> aparece o rosto feliz.
// 4. Aperte novamente -> rosto triste.
// 5. Aperte novamente -> rosto surpreso.
// 6. Aperte novamente -> a tela se apaga e mostra o número 0.
// 7. Repita a partir do passo 3! 
// 
// DESAFIO DIDÁTICO: E se quiséssemos 5 opções? Bastaria adicionar mais 
// "else if" (opcao == 4, opcao == 5) e ajustar o reset para acontecer 
// quando opcao > 5. Tente modificar isso depois de entender o fluxo!
// ============================================================
Analogia Linha O que faz
É como um prato que começa vazio let opcao = 0 Cria uma "caixinha" chamada opção que começa vazia (0)
É como adicionar uma bola de sorvete opcao = opcao + 1 A cada aperto, coloca +1 no prato
"Se você pedir pizza..." if (opcao == 1) "Se for 1..."
"Se não for pizza, mas for hambúrguer..." else if (opcao == 2) "Senão, se for 2..."
"Se não for nem pizza nem hambúrguer, mas for salada..." else if (opcao == 3) "Senão, se for 3..."
"Se não for nenhuma das opções acima..." else "Senão..."

Analogia principal: "É como um cardápio: você pode escolher 1 (pizza 🍕), 2 (hambúrguer 🍔) ou 3 (salada 🥗). Se escolher 4, o robô fica confuso e começa de novo!"

⏱️ Detalhamento Minuto a Minuto
0-5min
Jogo do cardápio humano — Professor diz um número (1, 2, 3) e alunos fazem uma ação (pular, dançar, parar). "E se eu disser 4?"
5-10min
Explicação do SENÃO SE — "Se não for a primeira opção, testa a segunda. Se não for, testa a terceira. É tipo uma escada de decisões!"
10-20min
Programação guiada — Construir o programa do cardápio juntos, linha por linha. Explicar cada bloco.
20-25min
Teste — Apertar A várias vezes e ver as opções mudando na matriz de LEDs.
25-30min
Desafio dos ícones — Trocar os ícones por outros: estrela, X, check, coração.
30-35min
Desafio do botão B — Fazer o botão B diminuir a opção (voltar). opcao = opcao - 1
35-40min
Desafio do número — Em vez de ícones, mostrar o número da opção na tela.
40-45min
Criação livre — Cada dupla cria seu próprio "cardápio" com 4 opções (usando números de 1 a 4).
45-50min
Diário do robô — Registrar a estrutura SENÃO SE no caderno com um exemplo.
♿ Orientações para Adaptações e Inclusão
  • TEA: Usar cores para cada opção (1=verde, 2=amarelo, 3=vermelho) e associar a imagens.
  • TDAH: Desafios de 5 minutos para cada etapa; manter o ritmo acelerado.
  • Deficiência visual: Descrever os ícones em voz alta; usar feedback sonoro (bip diferente para cada opção com music.playTone).
  • Deficiência auditiva: Instruções escritas na lousa; usar a simulação visual do MakeCode.
  • Deficiência física: Utilizar a simulação com clique do mouse caso o botão físico seja difícil.
  • Altas habilidades: Criar um cardápio com 5 opções usando números e ícones personalizados.
📊 Critérios Operacionais de Avaliação "com pontuação"
Descrição Critério Pontuação
Funcionou para 3 opções com ícones Programa do cardápio 0-4
Implementou a volta corretamente Desafio do botão B 0-3
Criatividade e execução do cardápio próprio Criação livre 0-3
Total 0-10

🎯 Objetivos Operacionais
  • Cognitivos: Compreender o aninhamento de estruturas de repetição (loop dentro de loop).
  • Procedimentais: Criar um programa que desenha uma grade 5×5 usando dois loops aninhados.
  • Atitudinais: Perceber que loops aninhados podem gerar padrões complexos com poucas linhas e que isso é mágico.
📖 Conteúdo Programático

Loop dentro de loop: como funciona a execução (o loop interno termina antes do externo avançar). Exemplo: desenhar uma linha de 5 LEDs usando um loop, e repetir 5 linhas com outro loop. Aplicação: matriz de LEDs com coordenadas (x, y).

📜 Habilidades BNCC e RCP-PR

EF04MA16, EF04MA21, Competência Geral 5, RCP-PR: Autoria — Repetições aninhadas

🧰 Materiais
Computador com MakeCode (1 por dupla) 1 micro:bit por dupla Cabo USB Papel quadriculado para planejar os padrões Suporte de pilhas (opcional)
🔧 Explicação Detalhada da Montagem do Hardware
  1. Conecte o micro:bit ao computador via cabo USB.
  2. Abra o MakeCode.
  3. Programe usando dois loops aninhados para acender LEDs específicos.
  4. Transfira o arquivo .hex para o micro:bit.
  5. Observe o padrão na matriz de LEDs 5×5.
💻 Código a ser desenvolvido

Programa "Grade de LEDs — A Diagonal Mágica"

// ============================================================
// PROGRAMA: GRADE DE LEDS — A DIAGONAL MÁGICA
// ============================================================
// OBJETIVO: Usar dois loops aninhados para acender a diagonal
// principal da matriz 5×5 de LEDs.
// ============================================================

// ============================================================
// FUNDAMENTAÇÃO TEÓRICA (COORDENADAS DA MATRIZ):
// ============================================================
// O micro:bit possui uma grade de 5 colunas (eixo Y) por 5 linhas (eixo X).
// As coordenadas vão de (0, 0) até (4, 4), onde:
//   - O PRIMEIRO número (x) representa a LINHA (vertical, de cima para baixo).
//   - O SEGUNDO número (y) representa a COLUNA (horizontal, da esquerda para a direita).
//
// A "diagonal principal" acontece quando o número da linha é exatamente
// igual ao número da coluna, ou seja: (0,0), (1,1), (2,2), (3,3) e (4,4).
// Visualizando a matriz, esses pontos formam uma reta inclinada que sai
// do canto superior esquerdo e vai até o canto inferior direito.
// ============================================================

// ============================================================
// LOOP EXTERNO: PERCORRE AS LINHAS (eixo X / vertical)
// ============================================================
// A variável 'x' começa em 0 (linha do topo) e vai até 4 (linha de baixo).
// A cada iteração deste loop, nós "descemos" uma linha na tela.
for (let x = 0; x <= 4; x++) {

    // ============================================================
    // LOOP INTERNO: PERCORRE AS COLUNAS (eixo Y / horizontal)
    // ============================================================
    // A variável 'y' começa em 0 (coluna da esquerda) e vai até 4 (coluna da direita).
    // Atenção: Para CADA linha (x), este loop interno percorre TODAS as 5 colunas (y).
    // Ou seja, para x=0, vamos testar y=0, 1, 2, 3 e 4.
    // Depois, para x=1, vamos testar y=0, 1, 2, 3 e 4... e assim por diante.
    // No total, esta dupla estrutura vai "visitar" todos os 25 LEDs (5x5).
    for (let y = 0; y <= 4; y++) {

        // ============================================================
        // DECISÃO: ESTE LED PERTENCE À DIAGONAL?
        // ============================================================
        // Aqui está o "coração" da lógica! Verificamos se a linha (x) é
        // exatamente igual à coluna (y).
        //
        // Se forem IGUAIS (ex: x=2 e y=2), significa que este LED está
        // perfeitamente alinhado na diagonal principal, então acendemos ele.
        //
        // Se forem DIFERENTES (ex: x=2 e y=4), significa que o LED está
        // fora da diagonal. Para garantir que a tela mostre APENAS a diagonal
        // (sem "fantasmas" de execuções anteriores), nós OBRIGATORIAMENTE
        // apagamos este LED.
        //
        // Obs: Poderíamos simplesmente limpar a tela no início, mas esta
        // técnica de "apagar tudo que não é a diagonal" é excelente para
        // aprendizado, pois mostra claramente a tomada de decisão para cada
        // pixel da matriz!
        if (x == y) {
            led.plot(x, y)      // Acende o LED na posição (x, y) - ENTRANDO NA DIAGONAL
        } else {
            led.unplot(x, y)    // Apaga o LED na posição (x, y) - FORA DA DIAGONAL
        }

        // ============================================================
        // PAUSA DIDÁTICA (EFEITO DE "VARREDURA")
        // ============================================================
        // Este comando insere um pequeno atraso de 50 milissegundos
        // (equivalente a 0,05 segundos) a CADA LED processado.
        // Isso desacelera a execução do programa, permitindo que nossos olhos
        // humanos acompanhem o caminho percorrido pelos loops.
        // Você verá um "traço" ou "varredura" percorrendo linha por linha,
        // da esquerda para a direita, de cima para baixo, e a diagonal
        // permanecerá acesa enquanto o restante pisca e apaga.
        // Dica: Mude este valor para 500 (meio segundo) para ver o efeito
        // ficar bem mais lento, ou para 0 para ver o resultado instantâneo!
        basic.pause(50)
    }
}

// ============================================================
// RESUMO DA EXECUÇÃO (PASSO A PASSO):
// ============================================================
// 1º linha (x=0): y=0 (acende), y=1 (apaga), y=2 (apaga), y=3 (apaga), y=4 (apaga).
// 2º linha (x=1): y=0 (apaga), y=1 (acende), y=2 (apaga), y=3 (apaga), y=4 (apaga).
// 3º linha (x=2): y=0 (apaga), y=1 (apaga), y=2 (acende), y=3 (apaga), y=4 (apaga).
// 4º linha (x=3): y=0 (apaga), y=1 (apaga), y=2 (apaga), y=3 (acende), y=4 (apaga).
// 5º linha (x=4): y=0 (apaga), y=1 (apaga), y=2 (apaga), y=3 (apaga), y=4 (acende).
//
// Ao final destas 25 iterações (5 linhas x 5 colunas), apenas os 5 LEDs
// da diagonal principal permanecerão acesos, formando uma linda reta
// inclinada na tela do micro:bit!
// ============================================================
Analogia Parte do código O que faz
É como um professor que vai de mesa em mesa for (let x = 0; x <= 4; x++) Loop externo: "Vá para a linha 0, depois 1, depois 2..."
É como o professor que, em cada mesa, pergunta para cada aluno for (let y = 0; y <= 4; y++) Loop interno: "Percorra todas as colunas desta linha"
"Se o número da mesa for igual ao número do aluno..." if (x == y) "Se a linha for igual à coluna..."
Acende a luz daquele aluno led.plot(x, y) Acende o LED na posição (x, y)
Apaga a luz daquele aluno led.unplot(x, y) Apaga o LED na posição (x, y)

Analogia principal: "É como se o robô fosse uma formiga andando em uma grade 5×5. O primeiro loop diz 'vá para a linha 1'. O segundo loop diz 'ande por todas as colunas dessa linha, uma por uma'. Depois volta para o primeiro loop, que diz 'vá para a linha 2', e o segundo loop repete tudo de novo. A formiga visita TODAS as 25 posições!"

Visualização da Diagonal:

(0,0) ★ (0,1) · (0,2) · (0,3) · (0,4) ·
(1,0) · (1,1) ★ (1,2) · (1,3) · (1,4) ·
(2,0) · (2,1) · (2,2) ★ (2,3) · (2,4) ·
(3,0) · (3,1) · (3,2) · (3,3) ★ (3,4) ·
(4,0) · (4,1) · (4,2) · (4,3) · (4,4) ★

⏱️ Detalhamento Minuto a Minuto
0-5min
Desenho no papel — Em uma grade 5×5, marcar a diagonal. "Como faríamos isso com repetições?"
5-10min
Explicação do loop aninhado — Mostrar o funcionamento com uma demonstração: para cada x, percorre todos os y.
10-20min
Programação guiada — Construir o programa da diagonal juntos, linha por linha.
20-25min
Teste — Ver a diagonal acendendo e apagando na matriz de LEDs.
25-30min
Desafio do X — Em vez da diagonal, fazer um X (x==y OU x+y==4).
30-35min
Desafio do quadrado — Fazer um quadrado apenas nas bordas (x==0 OU x==4 OU y==0 OU y==4).
35-40min
Criação de padrão próprio — Cada dupla cria um padrão com loops aninhados (coração, seta, letra).
40-45min
Apresentação — Mostrar os padrões criados para a turma.
45-50min
Diário do robô — Explicar como funciona um loop dentro de outro com desenho.
♿ Orientações para Adaptações e Inclusão
  • TEA: Usar papel quadriculado com cores para guiar o padrão (azul para x, vermelho para y).
  • TDAH: Dividir em etapas: "primeiro faça a linha, depois repita a linha 5 vezes."
  • Deficiência visual: Descrever o padrão verbalmente; usar a simulação em alto contraste.
  • Deficiência auditiva: Instruções escritas passo a passo na lousa.
  • Deficiência física: Utilizar a simulação do MakeCode com clique do mouse.
  • Altas habilidades: Criar um padrão animado que se move com loops aninhados (ex: uma cobrinha que anda).
📊 Critérios Operacionais de Avaliação "com pontuação"
Descrição Critério Pontuação
Funcionou com dois loops aninhados Programa da diagonal 0-4
Implementou corretamente o padrão Desafio do X ou quadrado 0-3
Criatividade e execução do padrão Padrão próprio 0-3
Total 0-10

🎯 Objetivos Operacionais
  • Cognitivos: Diferenciar contador (incremento simples) de acumulador (soma de valores).
  • Procedimentais: Criar um programa que soma números em um loop e toma decisões com base no total.
  • Atitudinais: Desenvolver raciocínio aritmético aplicado à programação e descobrir que matemática pode ser divertida.
📖 Conteúdo Programático

Contador: conta quantas vezes algo aconteceu. Acumulador: soma valores ao longo do tempo. Aninhamento: dentro do loop, somar e decidir.

📜 Habilidades BNCC e RCP-PR

EF04MA01, EF04MA03, Competência Geral 5, RCP-PR: Autoria — Variáveis e operações

🧰 Materiais
Computador com MakeCode (1 por dupla) 1 micro:bit por dupla Cabo USB Suporte de pilhas (opcional)
🔧 Explicação Detalhada da Montagem do Hardware
  1. Conecte o micro:bit ao computador via cabo USB.
  2. Abra o MakeCode.
  3. Programe conforme o código abaixo.
  4. Transfira o arquivo .hex para o micro:bit.
  5. Teste apertando o botão A várias vezes e observando os números na matriz.
💻 Código a ser desenvolvido

Programa "Soma de Passos — O Cofrinho Inteligente"

// ================================================================
// PROGRAMA: SOMA DE PASSOS — O COFRINHO INTELIGENTE (MICRO:BIT)
// ================================================================
// FUNCIONAMENTO GERAL:
// Este programa simula um cofrinho digital. Cada vez que você aperta
// o botão A, é como se colocasse uma moeda de valor 1 no cofre.
// O robô mostra na tela o total acumulado. Se o total ultrapassar 20,
// ele comemora (ícone feliz) e zera tudo, como se você tivesse
// "quebrado" o cofre para gastar o dinheiro.
// O botão B serve para resetar manualmente a qualquer momento.
// 
// CONCEITOS ENSINADOS:
// - Variáveis (guardam números)
// - Eventos (o que fazer quando um botão é pressionado)
// - Operações aritméticas (incremento, soma, comparação)
// - Estrutura condicional (if/else)
// - Interface com o usuário (display, ícones, pausas)
// ================================================================

// ================================================================
// 1. DECLARAÇÃO DAS VARIÁVEIS GLOBAIS (ESTADO DO PROGRAMA)
// ================================================================

let contador = 0    // "Quantas vezes o botão A foi apertado?"
                    // Isso é útil para estatísticas, mas não é usado
                    // na lógica principal de soma (apenas para zerar junto).

let acumulador = 0  // "Quanto dinheiro eu tenho no total?"
                    // Esta é a variável mais importante: ela guarda a
                    // soma acumulada das moedas (cada aperto = +1).

// ================================================================
// 2. EVENTO: BOTÃO A PRESSIONADO (COLOCAR MOEDA)
// ================================================================
// Quando o usuário aperta o botão A, o micro:bit executa esta função.
// É o coração do programa.

input.onButtonPressed(Button.A, function () {

    // --- PASSO 1: Contar o aperto (apenas para registro) ---
    // Incrementa o contador de apertos em 1.
    // O operador '=' atribui o novo valor à variável.
    contador = contador + 1

    // --- PASSO 2: Acumular o valor da moeda (A LÓGICA PRINCIPAL) ---
    // CORREÇÃO IMPORTANTE (veja o comentário abaixo):
    // Antes, o código errado era: acumulador = acumulador + contador
    // Isso criava uma "soma triangular" (1, 3, 6, 10, 15...), porque
    // a cada aperto ele somava o número total de apertos já feitos.
    // Exemplo: 1º aperto soma 1, 2º soma 2 (total 3), 3º soma 3 (total 6)...
    // Agora, com "acumulador = acumulador + 1", cada aperto adiciona
    // exatamente 1, formando uma progressão linear (1, 2, 3, 4, 5...).
    // Isso é o correto para um cofrinho onde cada moeda vale 1.
    acumulador = acumulador + 1

    // --- PASSO 3: Mostrar o total na tela ---
    // A função basic.showNumber() exibe o valor no display de LEDs.
    // Aqui mostramos o total atualizado imediatamente após somar.
    basic.showNumber(acumulador)

    // --- PASSO 4: Verificar se o total ultrapassou o limite de 20 ---
    // Esta é a condição de "estourar o cofre".
    if (acumulador > 20) {   // Se o total for maior que 20...

        // --- AÇÃO: COMEMORAR E RESETAR ---
        // Exibe um ícone feliz (rosto sorridente) para celebrar.
        basic.showIcon(IconNames.Happy)

        // Dá uma pequena pausa de 500 milissegundos (0,5 segundos)
        // para que o usuário veja a comemoração antes do reset.
        basic.pause(500)

        // Mostra o número 0 na tela, indicando que o cofre foi zerado.
        basic.showNumber(0)

        // Zera o total de dinheiro (acumulador) e também a contagem
        // de apertos, para começar uma nova rodada do zero.
        acumulador = 0
        contador = 0
    }

    // OBSERVAÇÃO: Se o total NÃO ultrapassar 20, o programa simplesmente
    // termina a função e o display continua mostrando o último valor.
    // O robô fica aguardando o próximo aperto.
})

// ================================================================
// 3. EVENTO: BOTÃO B PRESSIONADO (RESET MANUAL FORÇADO)
// ================================================================
// Este botão dá ao usuário o poder de limpar o cofre quando quiser,
// sem precisar esperar chegar a 20. É útil para reiniciar o jogo
// ou corrigir um erro.

input.onButtonPressed(Button.B, function () {

    // Zera as duas variáveis imediatamente.
    acumulador = 0
    contador = 0

    // Mostra o número 0 no display para confirmar o reset.
    basic.showNumber(0)

    // Pausa curta para dar tempo de ler o zero.
    basic.pause(500)

    // Exibe a palavra "ZERADO!" na tela (rolagem de caracteres).
    // Isso dá um feedback claro ao usuário de que o reset ocorreu.
    basic.showString("ZERADO!")

    // Após mostrar a mensagem, o programa fica em espera até o
    // próximo evento (aperto de botão A ou B).
})

// ================================================================
// 4. COMO O PROGRAMA COMEÇA?
// ================================================================
// Quando o micro:bit é ligado, ele executa as variáveis (iniciando
// com 0) e fica em "modo de espera" (idle). Nada é mostrado na tela
// até que um botão seja pressionado. Isso acontece porque não há
// um bloco "on start" com uma mensagem inicial.
// 
// DICA DE MELHORIA: Poderíamos adicionar um bloco "on start" para
// mostrar "0" ou um ícone de início, mas o funcionamento básico
// já está completo.
// ================================================================
Analogia Conceito O que faz
"Quantas moedas eu coloquei no cofrinho?" contador Conta quantas vezes algo aconteceu
"Quanto dinheiro eu tenho no total?" acumulador Soma os valores ao longo do tempo
"Coloco mais uma moeda" contador = contador + 1 Incrementa o contador
"Adiciono o valor da moeda ao total que já tinha" acumulador = acumulador + contador Soma o novo valor ao total
"Será que já enchi o cofrinho?" if (acumulador > 20) Verifica se passou da meta

Analogia principal: "É como se você tivesse um cofrinho. Cada vez que aperta o botão, você coloca uma moeda. O contador é quantas moedas você colocou. O acumulador é o valor total guardado. Se juntar mais de 20 reais, o robô fica feliz e esvazia o cofrinho!"

Simulação numérica:

Cálculo Aperto Contador Acumulador
0 + 1 = 1 1 1
1 + 2 = 3 2 3
3 + 3 = 6 3 6
6 + 4 = 10 4 10
10 + 5 = 15 5 15
15 + 6 = 21 → META ATINGIDA! 🎉 6 21
⏱️ Detalhamento Minuto a Minuto
0-5min
Desafio mental — "Se eu apertar 3 vezes, o total é 1+2+3=6. Se apertar 4, é 10. Qual a lógica?"
5-10min
Explicação — Diferença entre contador e acumulador com exemplos do dia a dia.
10-20min
Programação guiada — Construir o programa juntos, linha por linha.
20-25min
Teste — Apertar várias vezes e ver o total na tela.
25-30min
Desafio da meta — Mudar a meta de 20 para 50 (ou qualquer número que quiserem).
30-35min
Desafio do botão B — Botão B zera tudo e mostra "ZERADO".
35-40min
Desafio da média — Fazer o robô mostrar a média (acumulador / contador).
40-45min
Depuração — Ajudar quem está com dificuldade.
45-50min
Diário do robô — Registrar a diferença entre contador e acumulador com exemplos.
♿ Orientações para Adaptações e Inclusão
  • TEA: Usar objetos físicos (botões ou moedas de brinquedo) para representar contador/acumulador.
  • TDAH: Desafios com números pequenos (meta 5) para ver resultado rápido.
  • Deficiência visual: Descrever os números em voz alta; usar feedback sonoro com music.playTone.
  • Deficiência auditiva: Instruções escritas na lousa.
  • Deficiência física: Utilizar a simulação do MakeCode com clique do mouse.
  • Altas habilidades: Criar um acumulador que calcula o fatorial (1×2×3×4×...).
📊 Critérios Operacionais de Avaliação "com pontuação"
Descrição Critério Pontuação
Funcionou contador e acumulador Programa da soma 0-4
Mudou a condição corretamente Desafio da meta 0-3
Implementou a divisão corretamente Desafio da média 0-3
Total 0-10

🎯 Objetivos Operacionais
  • Cognitivos: Compreender que eventos podem disparar loops com condicionais dentro.
  • Procedimentais: Criar um programa onde o acelerômetro dispara um loop que toma decisões.
  • Atitudinais: Perceber a diferença entre evento simples e evento com comportamento complexo e se divertir com isso.
📖 Conteúdo Programático

Eventos que disparam estruturas aninhadas. Exemplo: ao chacoalhar, o micro:bit entra em um loop que verifica a inclinação. Combinação de gestos e lógica.

📜 Habilidades BNCC e RCP-PR

EF04MA21, EF04CI01, EF04GE09, RCP-PR: Autoria — Eventos e aninhamento

🧰 Materiais
Computador com MakeCode (1 por dupla) 1 micro:bit por dupla Cabo USB Suporte de pilhas (para testes com movimento)
🔧 Explicação Detalhada da Montagem do Hardware
  1. Conecte o micro:bit ao computador via cabo USB.
  2. Abra o MakeCode.
  3. Programe conforme o código abaixo.
  4. Transfira o arquivo .hex para o micro:bit.
  5. Desconecte o USB e conecte o suporte de pilhas.
  6. Chacoalhe o micro:bit e observe a reação.
💻 Código a ser desenvolvido

Programa "Dança do Chacoalhão — O DJ Robótico"

// ============================================================
// PROGRAMA: DANÇA DO CHACOALHÃO — O DJ ROBÓTICO
// ============================================================
// OBJETIVO: Quando o robô for chacoalhado, ele entra em um loop
// que verifica a inclinação 10 vezes e mostra setas.
// ============================================================

/*
 * COMENTÁRIOS DIDÁTICOS GERAIS:
 * ---------------------------------
 * Este programa é escrito em JavaScript para o micro:bit, utilizando a plataforma MakeCode.
 * O micro:bit possui um acelerômetro que mede a aceleração em três eixos (X, Y, Z) e também
 * permite detectar gestos como "chacoalhar" (shake). Além disso, podemos medir a rotação
 * (inclinação) em torno dos eixos Pitch (inclinação para frente/trás) e Roll (inclinação lateral).
 *
 * O programa reage ao gesto de chacoalhar (shake) e, a partir daí, executa uma sequência de
 * verificações da inclinação (Pitch) para exibir setas ou um ícone feliz, formando uma
 * "dança" interativa. Ao final, mostra a palavra "FIM!".
 *
 * Estrutura do código:
 * 1. Função de callback associada ao evento de chacoalhar (input.onGesture).
 * 2. Dentro da função, um loop for que repete 10 vezes:
 *    a. Lê a rotação no eixo Pitch.
 *    b. Se a inclinação for menor que -10 graus, mostra seta para esquerda.
 *    c. Se a inclinação for maior que 10 graus, mostra seta para direita.
 *    d. Caso contrário (inclinação entre -10 e 10), mostra ícone feliz.
 *    e. Aguarda 200 milissegundos (pausa) entre cada iteração.
 * 3. Após o loop, exibe a string "FIM!" na matriz de LEDs.
 */

// ============================================================
// Bloco de código que é executado quando o micro:bit detecta
// o gesto de "chacoalhar" (shake). Esse gesto é reconhecido
// pelo acelerômetro quando o dispositivo é agitado rapidamente.
// ============================================================
input.onGesture(Gesture.Shake, function () {
    // ============================================================
    // Loop que se repete 10 vezes. A variável 'i' é o contador,
    // mas não é usada dentro do loop, servindo apenas para controlar
    // o número de repetições (10 ciclos de verificação e exibição).
    // ============================================================
    for (let i = 0; i < 10; i++) {
        // ============================================================
        // Lê a rotação atual no eixo Pitch (inclinação para frente/trás).
        // O método input.rotation() retorna o ângulo em graus.
        // Rotation.Pitch: eixo que vai de -180° a 180°, onde:
        //   - Valores negativos indicam que a parte frontal do micro:bit
        //     está inclinada para baixo (ponta para frente).
        //   - Valores positivos indicam que a parte traseira está inclinada
        //     para baixo (ponta para cima).
        //   - Próximo de 0° significa horizontal.
        // Usamos os limites de -10° e +10° para criar uma zona morta
        // (dead zone) que evita mudanças muito sensíveis com pequenas
        // inclinações.
        // ============================================================
        if (input.rotation(Rotation.Pitch) < -10) {
            // Se a inclinação for menor que -10° (frente para baixo),
            // exibe uma seta apontando para a esquerda (West).
            // ArrowNames.West corresponde à seta ◄ na matriz de LEDs.
            basic.showArrow(ArrowNames.West)  // Seta para esquerda ◄
        } else if (input.rotation(Rotation.Pitch) > 10) {
            // Se a inclinação for maior que +10° (traseira para baixo),
            // exibe uma seta apontando para a direita (East).
            // ArrowNames.East corresponde à seta ► na matriz de LEDs.
            basic.showArrow(ArrowNames.East)  // Seta para direita ►
        } else {
            // Se a inclinação estiver entre -10° e +10° (ou seja,
            // aproximadamente horizontal), exibe um ícone feliz (smiley).
            // IconNames.Happy é um rosto sorridente.
            basic.showIcon(IconNames.Happy)   // Mostra feliz 😊
        }
        // ============================================================
        // Pausa de 200 milissegundos (0,2 segundos) entre cada iteração
        // do loop. Isso dá tempo para o usuário ver o símbolo exibido
        // e também permite que o micro:bit faça novas leituras do
        // acelerômetro sem pressa, tornando a "dança" mais suave.
        // ============================================================
        basic.pause(200)
    }
    // ============================================================
    // Após as 10 repetições, exibe a mensagem "FIM!" na matriz de LEDs,
    // indicando que a sequência terminou. A função showString() rola
    // os caracteres na tela.
    // ============================================================
    basic.showString("FIM!")
})

// ============================================================
// FIM DO PROGRAMA
// ============================================================
Analogia Parte do código O que faz
"Quando o DJ começar a tocar..." input.onGesture(Gesture.Shake, function () "Quando chacoalhar..."
"A música tem 10 batidas" for (let i = 0; i < 10; i++) Repete 10 vezes
"Se o robô pender para a esquerda..." if (input.rotation(Rotation.Pitch) < -10) "Se inclinar para esquerda..."
"Mostra ◄" basic.showArrow(ArrowNames.West) Mostra seta para esquerda
"Pausa entre uma batida e outra" basic.pause(200) Espera 200 milissegundos

Analogia principal: "É como se o robô fosse um DJ. Quando você chacoalha (evento), ele começa a tocar uma música (loop) e, a cada batida (repetição), ele decide qual luz acender (SE). No final da música, ele mostra 'FIM'."

⏱️ Detalhamento Minuto a Minuto
0-5min
Demonstração — Professor chacoalha o micro:bit e mostra a reação. "Uau! Como ele fez isso?"
5-10min
Explicação — "O evento é o gatilho. Dentro dele, pode ter loop, SE, tudo!"
10-20min
Programação guiada — Construir o programa juntos, linha por linha.
20-25min
Teste com bateria — Desconectar USB, usar bateria e chacoalhar.
25-30min
Desafio da contagem — Fazer o loop contar de 0 a 10 enquanto mostra os números.
30-35min
Desafio do botão — Em vez de chacoalhar, usar o botão A como gatilho.
35-40min
Criação própria — Cada dupla cria um evento com aninhamento (ex: ao chacoalhar, mostrar padrão).
40-45min
Apresentação — Mostrar os eventos criados para a turma.
45-50min
Diário do robô — Registrar evento com aninhamento no caderno.
♿ Orientações para Adaptações e Inclusão
  • TEA: Usar um "mapa de gatilhos" com símbolos para cada gesto.
  • TDAH: Dividir em etapas: primeiro o evento, depois o loop, depois o SE.
  • Deficiência física: Usar botões em vez de gestos (botão A como gatilho).
  • Deficiência visual: Feedback sonoro para cada decisão com music.playTone.
  • Deficiência auditiva: Instruções escritas na lousa.
  • Altas habilidades: Adicionar um som diferente para cada inclinação.
📊 Critérios Operacionais de Avaliação "com pontuação"
Descrição Critério Pontuação
Evento com loop e SE funcionou Programa do chacoalhão 0-4
Adaptou para botão corretamente Desafio do botão 0-3
Criatividade e execução Criação própria 0-3
Total 0-10

🎯 Objetivos Operacionais
  • Cognitivos: Identificar bugs específicos de aninhamento (condição invertida, loop sem saída, aninhamento fora de ordem).
  • Procedimentais: Depurar programas com bugs propositais.
  • Atitudinais: Desenvolver paciência e método na depuração e aprender que errar é parte do processo.
📖 Conteúdo Programático

Bugs comuns em aninhamentos: condição invertida (SE > quando deveria ser <), loop infinito por falta de incremento, aninhamento fora de ordem (SE fora do loop). Estratégias de depuração: teste de mesa, isolamento de partes.

📜 Habilidades BNCC e RCP-PR

EF04MA21, EF04LP11, Competência Geral 5, RCP-PR: Autoria — Depuração avançada

🧰 Materiais
Computador com MakeCode (1 por dupla) 1 micro:bit por dupla Cabo USB Programas com bugs (preparados pelo professor)
🔧 Explicação Detalhada da Montagem do Hardware
  1. Conecte o micro:bit ao computador via cabo USB.
  2. Carregue o programa com bug.
  3. Identifique o bug.
  4. Corrija o código.
  5. Teste a correção no micro:bit.
💻 Código a ser desenvolvido

Bug 1 — Loop Infinito por Falta de Incremento

let i = 0
while (i < 10) {
    basic.showNumber(i)
    // FALTA ALGO AQUI! O que será?
}
// CORREÇÃO: Adicionar "i = i + 1" dentro do loop.

Bug 2 — Condição Invertida

let contador = 3
if (contador > 5) {
    basic.showIcon(IconNames.Happy)
} else {
    basic.showIcon(IconNames.Sad)
}
// CORREÇÃO: Trocar ">" por "<".

Bug 3 — IF fora do Loop

for (let contador = 0; contador < 5; contador++) {
    basic.showNumber(contador)
}
// O IF deveria estar DENTRO do loop!
if (contador == 5) {
    basic.showIcon(IconNames.Happy)
}
// CORREÇÃO: Mover o IF para DENTRO do loop.
Como corrigir Bug O que acontece
Adicionar o incremento dentro do loop Loop infinito O robô trava e não para nunca
Inverter o sinal ( > vira < ) Condição invertida O robô faz o oposto do que deveria
Mover o SE para dentro do loop SE fora do loop O robô só verifica uma vez
⏱️ Detalhamento Minuto a Minuto
0-5min
Introdução — "Hoje os bugs estão mais espertos. Eles se escondem dentro de aninhamentos!"
5-10min
Bug 1 — Loop infinito — Distribuir o código. Alunos identificam e corrigem.
10-15min
Discussão — "Por que o robô travou? O que faltou?"
15-20min
Bug 2 — Condição — Distribuir. Corrigir.
20-25min
Discussão — "Inverter o sinal muda tudo!"
25-30min
Bug 3 — Aninhamento — Distribuir. Corrigir.
30-35min
Discussão — "Onde o SE deveria estar?"
35-40min
Desafio: crie seu bug — Cada dupla cria um bug e troca com outra.
40-45min
Correção em dupla — Corrigir o bug do colega.
45-50min
Diário do robô — Listar os 3 tipos de bug e como corrigi-los.
♿ Orientações para Adaptações e Inclusão
  • TEA: Usar um checklist visual de depuração com símbolos.
  • TDAH: Corrigir um bug por vez (micro-desafio).
  • Deficiência visual: Descrever os erros verbalmente; usar letras grandes.
  • Deficiência auditiva: Instruções escritas na lousa.
  • Deficiência física: Utilizar a simulação do MakeCode.
  • Altas habilidades: Criar um bug com 2 erros simultâneos.
📊 Critérios Operacionais de Avaliação "com pontuação"
Descrição Critério Pontuação
Loop infinito corrigido Correção do Bug 1 0-3
Condição corrigida Correção do Bug 2 0-3
Aninhamento corrigido Correção do Bug 3 0-4
Total 0-10

🎯 Objetivos Operacionais
  • Cognitivos: Integrar acelerômetro, contador e condicionais.
  • Procedimentais: Construir um pedômetro que conta passos (chacoalhadas) e avisa quando bater a meta.
  • Atitudinais: Trabalhar em equipe, celebrar as metas e... andar pela sala!
📖 Conteúdo Programático

Acelerômetro como sensor de passos (detecta chacoalhar). Contador de passos com meta. Condicional para avisar ao atingir a meta.

📜 Habilidades BNCC e RCP-PR

EF04MA01, EF04MA03, EF04CI01, RCP-PR: Autoria — Projeto integrado

🧰 Materiais
Computador com MakeCode (1 por grupo) 1 micro:bit por grupo Cabo USB Suporte de pilhas (para testar o pedômetro andando)
🔧 Explicação Detalhada da Montagem do Hardware
  1. Conecte o micro:bit ao computador via cabo USB.
  2. Programe conforme o código abaixo.
  3. Transfira o arquivo .hex para o micro:bit.
  4. Desconecte o USB e conecte o suporte de pilhas.
  5. Coloque no bolso ou amarre no tênis (com cuidado!) e ande.
  6. Observe a contagem de passos.
💻 Código a ser desenvolvido

Programa "Pedômetro Inteligente — O Personal Trainer Robótico"

// ============================================================
// PEDÔMETRO INTELIGENTE (para placa micro:bit)
// ============================================================
// OBJETIVO: Contar chacoalhadas (simulando passos) e disparar 
// um alerta (visual + sonoro) quando o usuário bater a meta.
// ============================================================

// ------------------------------------------------------------
// 1. DECLARAÇÃO DAS VARIÁVEIS GLOBAIS (ESTADO DO PROGRAMA)
// ------------------------------------------------------------

// 'passos' armazena a contagem atual. Começa em zero.
// IMPORTANTE: Esta variável é global, pois será acessada e 
// modificada por diferentes blocos de eventos (chacoalhada e botões).
let passos = 0

// 'meta' define o número de passos necessários para vencer.
// Começa em 10, mas o usuário pode aumentar com o botão A.
let meta = 10

// ------------------------------------------------------------
// 2. EVENTO PRINCIPAL: DETECÇÃO DE CHACOALHADA (ACELERÔMETRO)
// ------------------------------------------------------------

// 'onGesture(Gesture.Shake, ...)' é uma função de callback.
// Ela é executada AUTOMATICAMENTE sempre que o micro:bit detectar
// um movimento brusco (como uma pisada ou chacoalhada).
// A lógica interna é baseada nos dados do acelerômetro.
input.onGesture(Gesture.Shake, function () {

    // Passo 1: INCREMENTAR O CONTADOR
    // Cada chacoalhada soma +1 à variável 'passos'.
    // Isso é equivalente a: passos = passos + 1
    passos = passos + 1

    // Passo 2: FEEDBACK VISUAL IMEDIATO
    // Exibe o número atualizado na matriz de LEDs (5x5) para o usuário
    // ver o progresso em tempo real.
    basic.showNumber(passos)

    // Passo 3: VERIFICAR SE A META FOI ATINGIDA OU ULTRAPASSADA
    // Estrutura condicional que compara o valor atual com a meta.
    if (passos >= meta) {

        // ---- SUB-ROTINA DE COMEMORAÇÃO (VITÓRIA) ----

        // Feedback Visual: Mostra um ícone de rosto feliz na tela.
        // O ícone é pré-definido pela biblioteca 'IconNames'.
        basic.showIcon(IconNames.Happy)

        // Feedback Sonoro: Toca uma nota musical.
        // 'playTone(frequência, duração)' - 523 Hz é a nota Dó central (C5).
        // A duração de 200 milissegundos gera um "bip" curto e alegre.
        music.playTone(523, 200)

        // Pausa de 1 segundo (1000 ms) para dar tempo do usuário
        // processar a comemoração (ver o ícone e ouvir o som).
        basic.pause(1000)

        // Limpa a tela de LEDs para deixar o display pronto para
        // a próxima contagem, evitando poluição visual.
        basic.clearScreen()

        // Passo 4: REINICIAR A CONTAGEM (NOVO CICLO)
        // Após a comemoração, zeramos a variável 'passos' para que
        // o usuário possa começar a contar novamente do zero.
        // A 'meta' permanece a mesma (a não ser que o usuário a altere).
        passos = 0
    }
})

// ------------------------------------------------------------
// 3. EVENTO DO BOTÃO A: AJUSTAR A META PARA CIMA
// ------------------------------------------------------------

// Quando o botão A for pressionado, esta função é executada.
// Permite ao usuário aumentar a dificuldade sem precisar
// reiniciar o programa ou conectar no computador.
input.onButtonPressed(Button.A, function () {

    // Aumenta a meta em 5 passos.
    // Exemplo: se era 10, vira 15; se era 15, vira 20.
    meta = meta + 5

    // Mostra a NOVA meta na tela para o usuário confirmar o valor.
    basic.showNumber(meta)

    // Pequena pausa de 500 ms (meio segundo) para o usuário
    // conseguir ler o valor da nova meta.
    basic.pause(500)

    // Após mostrar a meta, a tela volta a mostrar a contagem ATUAL
    // de passos ('passos'). Isso evita que o usuário perca o
    // número de passos que já deu enquanto ajustava a meta.
    basic.showNumber(passos)
})

// ------------------------------------------------------------
// 4. EVENTO DO BOTÃO B: REINICIAR A CONTAGEM FORÇADAMENTE
// ------------------------------------------------------------

// Quando o botão B for pressionado, esta função é executada.
// Útil se o usuário quiser começar uma nova série de passos
// sem precisar chacoalhar até zerar (já que zerar só ocorre
// ao bater a meta).
input.onButtonPressed(Button.B, function () {

    // Zera a variável de passos manualmente.
    passos = 0

    // Mostra o número 0 na matriz de LEDs para confirmar
    // visualmente que o reset foi realizado com sucesso.
    basic.showNumber(0)
})
Analogia Parte do código O que faz
"Ainda não dei nenhum passo" let passos = 0 Começa a contagem em 0
"Quero dar 10 passos hoje" let meta = 10 Define a meta em 10 passos
"O robô sente o movimento" input.onGesture(Gesture.Shake, ...) Detecta quando você anda
"Dei mais um passo!" passos = passos + 1 Conta mais um passo
"Será que já cheguei?" if (passos >= meta) Verifica se bateu a meta
"Quero andar mais 5 passos" meta = meta + 5 Aumenta a meta

Analogia principal: "É como um personal trainer robótico. Ele conta seus passos, define metas e comemora quando você chega lá! Se você quiser andar mais, aperta A para aumentar a meta. Se quiser recomeçar, aperta B."

⏱️ Detalhamento Minuto a Minuto
0-5min
Apresentação do desafio — "Quem aqui gosta de andar? Vamos construir um robô que conta seus passos!"
5-10min
Planejamento — Definir a lógica: chacoalhar conta, meta avisa.
10-20min
Programação guiada — Construir o programa juntos, linha por linha.
20-25min
Teste em mesa — Chacoalhar o micro:bit e ver a contagem.
25-30min
Teste com bateria — Colocar no bolso e andar pela sala.
30-35min
Desafio da meta — Mudar a meta usando o botão A.
35-40min
Desafio do som — Adicionar um som (bip) ao atingir a meta.
40-45min
Competição — Quem atinge a meta primeiro (andar 10 passos)?
45-50min
Diário do robô — Registrar o projeto e como funciona.
♿ Orientações para Adaptações e Inclusão
  • TEA: Oferecer um "mapa do pedômetro" com etapas visuais.
  • TDAH: Meta baixa (5 passos) para ver resultado rápido.
  • Deficiência física: Usar botões em vez de chacoalhar (botão A conta passo).
  • Deficiência visual: Feedback sonoro para cada passo com music.playTone.
  • Deficiência auditiva: Instruções escritas na lousa.
  • Altas habilidades: Adicionar cálculo de calorias (fictício) baseado nos passos.
📊 Critérios Operacionais de Avaliação "com pontuação"
Descrição Critério Pontuação
Conta passos e avisa na meta Programa do pedômetro 0-4
Ajusta a meta corretamente Desafio do botão A 0-3
Funcionou ao andar com bateria Teste prático 0-3
Total 0-10

🎯 Objetivos Operacionais
  • Cognitivos: Compreender sequências, eventos e condicionais em um jogo.
  • Procedimentais: Criar um jogo onde o micro:bit mostra uma sequência de LEDs e o jogador deve repetir.
  • Atitudinais: Desenvolver memória, atenção e trabalho em equipe e se divertir muito!
📖 Conteúdo Programático

Sequências aleatórias com números. Comparação entre sequência gerada e sequência do jogador. Loop e condicionais para verificar acertos/erros.

📜 Habilidades BNCC e RCP-PR

EF04MA21, Competência Geral 5, RCP-PR: Autoria — Projeto lúdico

🧰 Materiais
Computador com MakeCode (1 por grupo) 1 micro:bit por grupo Cabo USB Papel para anotar a sequência (opcional)
🔧 Explicação Detalhada da Montagem do Hardware
  1. Conecte o micro:bit ao computador via cabo USB.
  2. Programe conforme o código abaixo.
  3. Transfira o arquivo .hex para o micro:bit.
  4. Teste o jogo.
💻 Código a ser desenvolvido

Programa "Genius — O Jogo da Memória" (Versão Simplificada para o 4º ano)

// ============================================================
// PROGRAMA: GENIUS — O JOGO DA MEMÓRIA
// ============================================================
// OBJETIVO: O robô mostra uma sequência de números (0 a 3).
// O jogador deve repetir a sequência usando os botões.
// ============================================================

// ------------------- VARIÁVEIS GLOBAIS ------------------------
// `sequencia` armazena a lista de números que o jogador deve memorizar
let sequencia: number[] = []

// `nivel` controla o comprimento da sequência (começa em 1 e aumenta a cada acerto)
let nivel = 1

// `tentativa` indica quantos números da sequência o jogador já acertou na rodada atual
let tentativa = 0

// -------------------------------------------------------------
// FUNÇÃO: gerarSequencia()
// -------------------------------------------------------------
// Cria uma nova sequência aleatória com tamanho igual ao `nivel`.
// Cada número é sorteado entre 0 e 3 (inclusive) usando Math.randomRange.
// A sequência é armazenada no vetor global `sequencia`.
function gerarSequencia() {
    sequencia = []                        // Limpa a sequência anterior
    for (let i = 0; i < nivel; i++) {     // Repete `nivel` vezes
        let numero = Math.randomRange(0, 3)  // Sorteia 0, 1, 2 ou 3
        sequencia.push(numero)            // Adiciona ao final do vetor
    }
}

// -------------------------------------------------------------
// FUNÇÃO: mostrarSequencia()
// -------------------------------------------------------------
// Exibe a sequência atual no display do Micro:bit, um número por vez,
// usando ícones diferentes para cada número (facilita a memorização).
// Depois de mostrar toda a sequência, exibe "SUA VEZ!" para o jogador.
function mostrarSequencia() {
    // Percorre todos os elementos da sequência
    for (let i = 0; i < sequencia.length; i++) {
        let numero = sequencia[i]          // Pega o número atual

        // Mostra o número em formato digital (0, 1, 2 ou 3)
        basic.showNumber(numero)
        basic.pause(500)                   // Pausa 500 ms para o jogador ver

        // Mostra um ícone correspondente ao número (reforço visual)
        if (numero == 0) {
            basic.showIcon(IconNames.Square)      // Quadrado
        } else if (numero == 1) {
            basic.showIcon(IconNames.Heart)       // Coração
        } else if (numero == 2) {
            basic.showIcon(IconNames.Diamond)     // Losango
        } else {
            basic.showIcon(IconNames.Chessboard)  // Tabuleiro (para o 3)
        }
        basic.pause(500)                   // Pausa para visualizar o ícone
    }

    // Limpa a tela e avisa que é a vez do jogador
    basic.clearScreen()
    basic.showString("SUA VEZ!")
}

// -------------------------------------------------------------
// FUNÇÃO: verificarTentativa(valor: number)
// -------------------------------------------------------------
// Esta função é chamada quando o jogador faz uma jogada (botão ou gesto).
// Recebe o valor escolhido (0 a 3) e compara com o próximo número da sequência.
// - Se acertar: avança o índice `tentativa`.
//   - Se completou a sequência inteira: mostra feliz, aumenta o nível,
//     reinicia o índice e gera/mostra uma nova sequência.
// - Se errar: mostra ícone de "não", pausa, reinicia a tentativa e
//   mostra a sequência novamente (para o jogador tentar de novo).
function verificarTentativa(valor: number) {
    // Compara o valor escolhido com o próximo número esperado
    if (valor == sequencia[tentativa]) {
        // Acertou! Avança para o próximo número
        tentativa = tentativa + 1

        // Verifica se já acertou todos os números da sequência
        if (tentativa == sequencia.length) {
            // Sequência completa com sucesso!
            basic.showIcon(IconNames.Happy)   // Mostra carinha feliz
            basic.pause(500)

            // Prepara a próxima rodada: aumenta nível, reinicia tentativa,
            // gera nova sequência e a mostra.
            nivel = nivel + 1
            tentativa = 0
            gerarSequencia()
            mostrarSequencia()
        }
        // Se não completou a sequência, apenas aguarda a próxima jogada
    } else {
        // Errou! Mostra sinal de erro e reinicia a tentativa atual.
        basic.showIcon(IconNames.No)          // Ícone de "não" (X)
        basic.pause(1000)                     // Pausa para o jogador perceber

        // Reinicia o índice de tentativa para 0 (recomeça a sequência)
        tentativa = 0

        // Mostra a sequência novamente para o jogador tentar mais uma vez
        mostrarSequencia()
    }
}

// -------------------------------------------------------------
// CONFIGURAÇÃO DOS EVENTOS (entradas do jogador)
// -------------------------------------------------------------
// Associamos cada botão/gesto a um valor numérico:
// - Botão A -> 0
// - Botão B -> 1
// - Botão A+B -> 2
// - Agitar (shake) -> 3
// Isso permite que o jogador "digite" os números usando o Micro:bit.

input.onButtonPressed(Button.A, function () {
    verificarTentativa(0)
})

input.onButtonPressed(Button.B, function () {
    verificarTentativa(1)
})

input.onButtonPressed(Button.AB, function () {
    verificarTentativa(2)
})

input.onGesture(Gesture.Shake, function () {
    verificarTentativa(3)
})

// -------------------------------------------------------------
// INICIALIZAÇÃO DO JOGO
// -------------------------------------------------------------
// Quando o programa inicia, gera a primeira sequência (nível 1)
// e a mostra para o jogador começar a jogar.
gerarSequencia()
mostrarSequencia()

// ============================================================
// FIM DO PROGRAMA
// ============================================================
Analogia Parte do código O que faz
"É uma fila de números" let sequencia: number[] = [] Cria uma lista vazia para guardar os números
"O robô escolhe um número aleatório" Math.randomRange(0, 3) Sorteia um número entre 0 e 3
"Coloca o número na fila" sequencia.push(numero) Adiciona o número à lista
"O robô mostra os números" mostrarSequencia() Mostra a sequência na tela
"O robô confere se você acertou" verificarTentativa(valor) Verifica se o jogador acertou

Analogia principal: "É como o jogo Genius que você conhece! O robô mostra uma sequência de luzes (números). Você tem que repetir na mesma ordem. Se acertar, o robô fica feliz e aumenta o nível. Se errar, o robô mostra 'X' e você tenta de novo!"

⏱️ Detalhamento Minuto a Minuto
0-5min
Apresentação do Genius — Mostrar o jogo original e como funciona.
5-10min
Planejamento — "Como o robô vai mostrar a sequência? Como o jogador vai responder?"
10-20min
Programação guiada — Construir a versão simplificada juntos.
20-25min
Teste — Jogar o jogo.
25-30min
Desafio do nível — Aumentar o nível a cada rodada.
30-35min
Desafio dos erros — Se errar, mostrar "X" e recomeçar.
35-40min
Competição — Quem chega ao nível mais alto?
40-45min
Depuração — Ajustar bugs.
45-50min
Diário do robô — Registrar a lógica do jogo.
♿ Orientações para Adaptações e Inclusão
  • TEA: Sequências curtas (2 ou 3 números) e pausas mais longas.
  • TDAH: Jogar em dupla para ajudar.
  • Deficiência visual: Usar sons para representar os números com music.playTone.
  • Deficiência auditiva: Usar a matriz para mostrar os números.
  • Deficiência física: Usar apenas botões (A e B) em vez de gestos.
  • Altas habilidades: Adicionar mais opções (4 botões/gestos) e níveis mais altos.
📊 Critérios Operacionais de Avaliação "com pontuação"
Descrição Critério Pontuação
Gera e mostra sequência Programa do Genius 0-4
Jogador pode responder com botões Sistema de resposta 0-3
Aumenta a dificuldade corretamente Sistema de níveis 0-3
Total 0-10

🎯 Objetivos Operacionais
  • Cognitivos: Integrar sensor (botão como simulador de detector) com semáforo.
  • Procedimentais: Criar um semáforo que alterna e reage a "carros" (botão pressionado).
  • Atitudinais: Entender sistemas de controle em tempo real e se sentir um engenheiro de trânsito.
📖 Conteúdo Programático

Semáforo com temporizador (verde, amarelo, vermelho). Detector de "carros" via botão. Aninhamento: dentro do loop do semáforo, verificar se o botão foi pressionado.

📜 Habilidades BNCC e RCP-PR

EF04MA03, EF04CI01, EF04GE09, RCP-PR: Autoria — Projeto com sensores

🧰 Materiais
Computador com MakeCode (1 por grupo) 1 micro:bit por grupo Cabo USB Suporte de pilhas (opcional)
🔧 Explicação Detalhada da Montagem do Hardware
  1. Conecte o micro:bit ao computador via cabo USB.
  2. Programe conforme o código abaixo.
  3. Transfira o arquivo .hex para o micro:bit.
  4. Teste o semáforo.
💻 Código a ser desenvolvido

Programa "Semáforo com Detector de Carros"

// ============================================================
// PROGRAMA: SEMÁFORO COM DETECTOR DE CARROS
// ============================================================
// OBJETIVO: Simular um semáforo que detecta "carros" esperando
// e acelera a mudança para verde.
// ============================================================
// 
// EXPLICAÇÃO RESUMIDA DE FUNCIONAMENTO:
// O programa é uma Máquina de Estados (Verde -> Amarelo -> Vermelho -> Verde).
// Um cronômetro (basic.pause) define o tempo de cada estado.
// O botão A simula a chegada de um carro. Se um carro estiver esperando
// quando o semáforo estiver Vermelho, o programa ABORTA o tempo do vermelho
// e volta imediatamente para o Verde por 2 segundos, reiniciando o ciclo.
// ============================================================

// --- VARIÁVEIS GLOBAIS ---
// cor: 0 = Verde, 1 = Amarelo, 2 = Vermelho.
// Começamos no Verde para o trânsito fluir imediatamente.
let cor = 0

// carroEsperando: flag (bandeira) que indica se um motorista apertou o botão.
// Inicia como falso (nenhum carro aguardando).
let carroEsperando = false

// --- EVENTO DO BOTÃO A (INTERRUPÇÃO) ---
// Quando o botão A for pressionado, este código é executado IMEDIATAMENTE,
// mesmo enquanto o semáforo estiver em pausa (basic.pause).
input.onButtonPressed(Button.A, function () {
    // Marca que há um carro aguardando passagem.
    carroEsperando = true
    
    // Mostra um símbolo de "Sim" (check) para dar feedback visual ao usuário
    // de que o botão foi pressionado com sucesso.
    basic.showIcon(IconNames.Yes)
    
    // Pequena pausa de 300ms para o usuário conseguir ver o ícone "Yes"
    // antes do ícone do semáforo ser restaurado pelo loop principal.
    basic.pause(300)
})

// --- LOOP PRINCIPAL (FOREVER) ---
// Este bloco executa repetidamente enquanto o Micro:bit estiver ligado.
// Ele controla a lógica de mudança de cores do semáforo.
basic.forever(function () {
    
    // ---------------------------------------------
    // 1ª CONDIÇÃO: PRIORIDADE PARA O CARRO ESPERANDO
    // ---------------------------------------------
    // Se existe um carro esperando (flag == true) E a cor atual é Vermelho (2):
    if (carroEsperando == true && cor == 2) {
        // O semáforo muda IMEDIATAMENTE para Verde, sem esperar os 3 segundos
        // do vermelho. Isso simula o detector de carros ativando a troca rápida.
        cor = 0
        
        // Reseta a flag, pois o carro já foi "atendido" (vai passar agora).
        carroEsperando = false
        
        // Atualiza a matriz de LEDs para mostrar a cor Verde.
        mostrarVerde()
        
        // Permanece verde por apenas 2 segundos (tempo reduzido, pois o carro
        // já estava esperando, mas precisamos dar tempo dele atravessar).
        basic.pause(2000)
        
    // ---------------------------------------------
    // 2ª CONDIÇÃO: SEMÁFORO VERDE (ESTADO NORMAL)
    // ---------------------------------------------
    // Se a cor atual é Verde (e não há carro prioritário no vermelho):
    } else if (cor == 0) {
        // Mostra a seta para cima (representando o verde "siga").
        mostrarVerde()
        
        // Fica verde por 3 segundos (tempo padrão de fluxo livre).
        basic.pause(3000)
        
        // Após o tempo, transiciona para a próxima cor do ciclo: Amarelo (1).
        cor = 1
        
    // ---------------------------------------------
    // 3ª CONDIÇÃO: SEMÁFORO AMARELO (ATENÇÃO)
    // ---------------------------------------------
    } else if (cor == 1) {
        // Mostra um quadrado pequeno (representando o amarelo "atenção").
        mostrarAmarelo()
        
        // Fica amarelo por 1 segundo (tempo curto de aviso).
        basic.pause(1000)
        
        // Transiciona para a próxima cor: Vermelho (2).
        cor = 2
        
    // ---------------------------------------------
    // 4ª CONDIÇÃO: SEMÁFORO VERMELHO (PARE)
    // ---------------------------------------------
    } else {
        // Mostra o símbolo "Não" (X) representando o vermelho "pare".
        mostrarVermelho()
        
        // Fica vermelho por 3 segundos.
        // ATENÇÃO: Se alguém apertar o botão A durante esta pausa de 3s,
        // a variável 'carroEsperando' será alterada, mas o código SÓ vai
        // verificar isso quando esta pausa terminar e o loop recomeçar.
        basic.pause(3000)
        
        // Após esperar os 3 segundos (ou ser interrompido pela lógica
        // de prioridade no próximo ciclo), volta para o Verde (0).
        cor = 0
    }
    // Fim do loop: ele volta automaticamente para o início do 'forever'.
})

// --- FUNÇÕES AUXILIARES DE EXIBIÇÃO ---
// (Separamos em funções para deixar o código mais organizado e legível)

// Representa o Verde com uma seta apontando para o Norte (para cima),
// simbolizando que o motorista pode "seguir em frente".
function mostrarVerde() {
    basic.showArrow(ArrowNames.North)
}

// Representa o Amarelo com um quadrado pequeno no centro da tela,
// simbolizando o "atenção, pare se for seguro".
function mostrarAmarelo() {
    basic.showIcon(IconNames.SmallSquare)
}

// Representa o Vermelho com um grande "X" (símbolo de proibido),
// simbolizando que o motorista deve "parar obrigatoriamente".
function mostrarVermelho() {
    basic.showIcon(IconNames.No)
}
Analogia Parte do código O que faz
"O semáforo começa verde" let cor = 0 Começa no verde
"Não tem ninguém na faixa" let carroEsperando = false Nenhum carro esperando
"Um carro chegou no farol" input.onButtonPressed(Button.A, ...) Botão A = carro chegou
"Se tem carro esperando no vermelho..." if (carroEsperando && cor == 2) Se tem carro E está vermelho...
"Libera o carro!" cor = 0 Muda para verde

Analogia principal: "É como se o robô fosse um guarda de trânsito que vê um carro parado e decide liberar mais rápido. O botão A é o 'sensor' que detecta o carro. Quando o semáforo está vermelho e alguém aperta A, ele acelera e volta para o verde!"

⏱️ Detalhamento Minuto a Minuto
0-5min
Revisão do semáforo — Lembrar o semáforo do bimestre passado.
5-10min
Apresentação do sensor — "E se o semáforo pudesse 'ver' os carros?"
10-20min
Programação guiada — Construir o novo semáforo juntos.
20-25min
Teste — Deixar rodar e apertar A no vermelho.
25-30min
Desafio do pedestre — Adicionar botão B para pedestre (mostra "PARE" por 5s).
30-35min
Desafio do tempo — Mudar os tempos de espera.
35-40min
Criação de cenário — Desenhar um cruzamento no papel e simular.
40-45min
Apresentação — Cada grupo mostra seu semáforo.
45-50min
Diário do robô — Registrar a integração de sensor.
♿ Orientações para Adaptações e Inclusão
  • TEA: Usar cores fortes nos LEDs e no papel.
  • TDAH: Focar na lógica do carro esperando.
  • Deficiência visual: Feedback sonoro para cada mudança de cor com music.playTone.
  • Deficiência auditiva: Instruções escritas na lousa.
  • Deficiência física: Utilizar a simulação do MakeCode.
  • Altas habilidades: Adicionar um sensor de luminosidade real (se disponível) ou mais botões.
📊 Critérios Operacionais de Avaliação "com pontuação"
Descrição Critério Pontuação
Funciona e reage ao botão Semáforo com detector 0-4
Botão B implementado Desafio do pedestre 0-3
Clareza e criatividade Apresentação 0-3
Total 0-10

🎯 Objetivos Operacionais
  • Cognitivos: Revisar todos os conceitos do bimestre.
  • Procedimentais: Apresentar um projeto autoral (escolhido pelo grupo) com aninhamento.
  • Atitudinais: Celebrar as conquistas e compartilhar aprendizados.
📖 Conteúdo Programático

Revisão: loop, SE, SENÃO SE, aninhamento, eventos, contadores, acumuladores. Apresentação de projetos. Autoavaliação e avaliação dos pares.

📜 Habilidades BNCC e RCP-PR

EF04MA01, EF04MA21, EF04LP11, Competência Geral 5, RCP-PR: Autoria e apresentação

🧰 Materiais
Computador com MakeCode (1 por grupo) 1 micro:bit por grupo Cabo USB Cartolina para pôster do projeto Suporte de pilhas (para demonstrações)
🔧 Explicação Detalhada da Montagem do Hardware

Cada grupo escolhe um dos projetos do bimestre para apresentar ou cria um novo. Devem ter o código pronto e o hardware funcionando.

💻 Código a ser desenvolvido

Cada grupo apresenta seu código e explica o aninhamento utilizado.

⏱️ Detalhamento Minuto a Minuto
0-5min
Abertura — "Hoje é dia de mostrar o que aprendemos!"
5-15min
Preparação — Grupos organizam seus pôsteres e testam os robôs.
15-35min
Apresentações — Cada grupo (4-5 min) mostra seu projeto, explica o código e demonstra.
35-40min
Votação — Votação para "Robô mais criativo", "Código mais limpo", "Bug mais divertido".
40-45min
Autoavaliação — Cada aluno preenche uma ficha de autoavaliação.
45-50min
Encerramento — Entrega de certificados ("Mestre do Aninhamento") e celebração.
♿ Orientações para Adaptações e Inclusão
  • TEA: Oferecer um roteiro para apresentação.
  • TDAH: Grupos com tarefas definidas.
  • Deficiência visual: Apresentar o projeto com descrição verbal.
  • Deficiência auditiva: Apresentar com apoio visual e escrito.
  • Deficiência física: Garantir que todos possam participar da demonstração.
  • Altas habilidades: Projeto com múltiplos aninhamentos (3 níveis).
📊 Critérios Operacionais de Avaliação "com pontuação"
Descrição Critério Pontuação
O robô executou o programa corretamente Projeto funcionando 0-4
Mostrou onde está o aninhamento e explicou Explicação do aninhamento 0-3
Originalidade e apresentação do pôster Criatividade e capricho 0-3
Total 0-10
♿ ORIENTAÇÕES PARA ADAPTAÇÕES E INCLUSÃO (EXEMPLOS PRÁTICOS)
📌 Transtorno do Espectro Autista (TEA)
Exemplo Prático Estratégia
Usar cartões coloridos (azul para loop, vermelho para SE) Organização visual
Manter a mesma sequência de atividades toda semana Estrutura previsível
Oferecer um "mapa do pedômetro" com etapas ilustradas Mapas e roteiros
Permitir pausas quando necessário Pausas sensoriais
📌 Transtorno de Déficit de Atenção e Hiperatividade (TDAH)
Exemplo Prático Estratégia
"Você tem 2 minutos para desembaralhar este código!" Desafios cronometrados
"Primeiro faça a linha, depois repita a linha 5 vezes" Divisão em etapas
Meta de 5 passos em vez de 10 para ver resultado rápido Metas curtas
O robô mostra resultado na hora Feedback imediato
📌 Deficiência Visual
Exemplo Prático Estratégia
Descrever os ícones e padrões em voz alta Descrição verbal
Usar music.playTone para cada ação Feedback sonoro
Cartões e instruções com fonte ampliada Letras grandes
Cartões em relevo para identificação tátil Relevo
📌 Deficiência Auditiva
Exemplo Prático Estratégia
Escrever todos os comandos na lousa Instruções escritas
Usar a simulação do MakeCode com animações Simulação visual
Fluxogramas e diagramas na parede Apoio visual
Intérprete ou professor com conhecimento básico Libras
📌 Deficiência Física
Exemplo Prático Estratégia
Usar a simulação do MakeCode em vez do hardware físico Simulação
Substituir chacoalhar por botão A Botões em vez de gestos
Trabalho em dupla com divisão de tarefas Apoio de colegas
Oferecer mouse com botões maiores Mouse adaptado
📌 Altas Habilidades/Superdotação
Exemplo Prático Estratégia
Criar códigos com 3 níveis de aninhamento Desafios extras
Permitir criar projetos próprios com múltiplos aninhamentos Projetos autorais
Aluno ajuda colegas com dificuldade Mentoria
Adicionar funcionalidades extras (sons, animações) Aprofundamento

📊 RUBRICA DE AVALIAÇÃO — 2º BIMESTRE

Critérios de avaliação
Precisa Melhorar (0-4) Critério Excelente (9-10) Bom (7-8) Satisfatório (5-6)
Não identifica aninhamentos Compreensão de aninhamento Identifica e cria aninhamentos com 3 níveis Identifica e cria aninhamentos com 2 níveis Identifica aninhamentos simples
Não consegue programar Programação no MakeCode Programa com autonomia e criatividade Programa com pouca ajuda Programa com ajuda constante
Não identifica bugs Depuração Encontra e corrige bugs complexos Encontra e corrige bugs simples Identifica bugs mas não corrige
Não colabora Trabalho em equipe Colabora e lidera Colabora bem Colabora com incentivo
Não consegue explicar Apresentação Explica com clareza e criatividade Explica com clareza Explica com ajuda

🏆 CERTIFICADO DE CONCLUSÃO - 4º ANO

"MESTRE DO ANINHAMENTO"

🤖 CERTIFICADO ROBÔMESTRES

Certificamos que

[NOME DO ALUNO]

concluiu com êxito o 4º ANO - ROBÓTICA EDUCACIONAL
Dominando os conceitos de:
🔁 LOOP DENTRO DE LOOP (aninhamento de repetições)
📋 CONDICIONAIS MÚLTIPLAS (SE, SENÃO SE, SENÃO)
📦 CONTADORES E ACUMULADORES (variáveis em aninhamentos)
🐛 DEPURAÇÃO AVANÇADA (caça aos bugs em aninhamentos)
🤖 PROJETOS INTEGRADOS (com micro:bit)


RobôMestres do Paraná • 2026

"O aninhamento não é mais um mistério — é uma superpotência!"

🔧 Ass: Robô Zé 4.0

Visualização ao selecionar aluno

Cadastro de Alunos

📋 Lista de Programadores 0
📚 REFERÊNCIAS BIBLIOGRÁFICAS (ABNT)

BRASIL. Ministério da Educação. Base Nacional Comum Curricular (BNCC). Brasília: MEC, 2018.

BRASIL. Ministério da Educação. Resolução CNE/CEB nº 1/2022 — Institui a BNCC-Computação como complemento à Base Nacional Comum Curricular. Brasília: MEC, 2022.

BRASIL. Ministério da Educação. Resolução CNE/CEB nº 2/2025 — Diretrizes Operacionais Nacionais sobre o uso de dispositivos digitais em espaços escolares e integração curricular de Educação Digital e Midiática. Brasília: MEC, 2025.

BRENNAN, K.; RESNICK, M. New frameworks for studying and assessing the development of computational thinking. In: Annual American Educational Research Association Meeting, 2012, Vancouver. Proceedings... Vancouver: AERA, 2012.

PARANÁ. Secretaria de Estado da Educação. Referencial Curricular do Paraná: Ensino Fundamental Anos Iniciais. Curitiba: SEED/PR, 2018.

PARANÁ. Secretaria de Estado da Educação. Currículo da Rede Estadual Paranaense (CREP). Curitiba: SEED/PR.

RESNICK, M. Lifelong Kindergarten: Cultivating Creativity through Projects, Passion, Peers, and Play. Cambridge: MIT Press, 2017.

UNDIME. O que é preciso saber sobre a implementação da BNCC Computação e integração curricular de educação digital e midiática. Brasília: Undime, 2025.