🧙♂️ CARTA DE ABERTURA DO BIMESTRE
"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. 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)
| Conceito-Chave | Bimestre | Semanas | Tema Central |
|---|---|---|---|
| Sequências, variáveis, eventos simples | 1º | 1 a 10 | Conhecendo o micro:bit |
| Condicionais aninhadas e loops avançados | 2º | 11 a 20 | Aninhando decisões |
| Acelerômetro, botões e multitarefa | 3º | 21 a 30 | Eventos concorrentes |
| Robô que resolve um problema real | 4º | 31 a 40 | Projeto autoral |
🗺️ MAPEAMENTO BIMESTRE — HABILIDADES BNCC E RCP-PR
| 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
| 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
🎯 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
🔧 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.
- Conecte o micro:bit ao computador usando o cabo USB.
- Abra o MakeCode no navegador (makecode.microbit.org).
- Crie um novo projeto.
- Após programar (ver código abaixo), clique em "Baixar" e transfira o arquivo .hex para o micro:bit.
- 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
♿ 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
🔧 Explicação Detalhada da Montagem do Hardware
- Conecte o micro:bit ao computador via cabo USB.
- Abra o MakeCode.
- Programe conforme o código abaixo.
- Transfira o arquivo .hex para o micro:bit.
- 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
opcao = opcao - 1
♿ 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
🔧 Explicação Detalhada da Montagem do Hardware
- Conecte o micro:bit ao computador via cabo USB.
- Abra o MakeCode.
- Programe usando dois loops aninhados para acender LEDs específicos.
- Transfira o arquivo .hex para o micro:bit.
- 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
♿ 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
🔧 Explicação Detalhada da Montagem do Hardware
- Conecte o micro:bit ao computador via cabo USB.
- Abra o MakeCode.
- Programe conforme o código abaixo.
- Transfira o arquivo .hex para o micro:bit.
- 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 |
| 1 + 2 = 3 | 2º | 2 | 3 |
| 3 + 3 = 6 | 3º | 3 | 6 |
| 6 + 4 = 10 | 4º | 4 | 10 |
| 10 + 5 = 15 | 5º | 5 | 15 |
| 15 + 6 = 21 → META ATINGIDA! 🎉 | 6º | 6 | 21 |
⏱️ Detalhamento Minuto a Minuto
♿ 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
🔧 Explicação Detalhada da Montagem do Hardware
- Conecte o micro:bit ao computador via cabo USB.
- Abra o MakeCode.
- Programe conforme o código abaixo.
- Transfira o arquivo .hex para o micro:bit.
- Desconecte o USB e conecte o suporte de pilhas.
- 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
♿ 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
🔧 Explicação Detalhada da Montagem do Hardware
- Conecte o micro:bit ao computador via cabo USB.
- Carregue o programa com bug.
- Identifique o bug.
- Corrija o código.
- 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
♿ 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
🔧 Explicação Detalhada da Montagem do Hardware
- Conecte o micro:bit ao computador via cabo USB.
- Programe conforme o código abaixo.
- Transfira o arquivo .hex para o micro:bit.
- Desconecte o USB e conecte o suporte de pilhas.
- Coloque no bolso ou amarre no tênis (com cuidado!) e ande.
- 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
♿ 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
🔧 Explicação Detalhada da Montagem do Hardware
- Conecte o micro:bit ao computador via cabo USB.
- Programe conforme o código abaixo.
- Transfira o arquivo .hex para o micro:bit.
- 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
♿ 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
🔧 Explicação Detalhada da Montagem do Hardware
- Conecte o micro:bit ao computador via cabo USB.
- Programe conforme o código abaixo.
- Transfira o arquivo .hex para o micro:bit.
- 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
♿ 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
🔧 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
♿ 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
| 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!"
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.