🔥 MANUAL DO GUERREIRO MAKECODE: A TRILHA DO CAOS ELETRÔNICO
⚠️ AVISO AOS NAVEGANTES (EDIÇÃO EXTREMA)
Se você chegou até aqui achando que programar é arrastar bloquinhos coloridos como se estivesse montando um quebra-cabeça de bebê, PARE IMEDIATAMENTE.
Este não é um manual para crianças que brincam de programar. Este é um manual para guerreiros do teclado, para aqueles que têm coragem de encarar o código puro, sangrento e sem açúcar. Aqui não tem blocos. Aqui tem JavaScript. A linguagem que move a internet, que faz robôs andarem e que, nas mãos certas, pode até fazer um micro:bit cantar "Baby Shark" (não que você vá fazer isso, mas o poder está em suas mãos).
E se você está pensando "mas eu nunca programei na vida", respire fundo. Sabe qual é o segredo? Todo mestre da gambiarra digital começou exatamente onde você está agora: encarando uma tela em branco com um piscar de olhos confuso e uma vontade incontrolável de xingar o computador. A diferença é que eles persistiram. Eles aprenderam a ler as mensagens de erro, a rir das próprias falhas e a transformar café em código funcional.
Bem-vindo ao clube, Padawan. Seu treinamento começa agora. E vai doer. Vai ser divertido. E no final, você vai olhar para trás e rir do seu eu passado que tinha medo de um ponto e vírgula.
🤖 Let's get dangerous.
PARTE 1: O QUE DIABOS É A BNCC E O RCP-PR?
📚 BNCC: A Bíblia da Educação (Ou "O Livro de Regras do Jogo da Vida")
A BNCC é o documento que define o que todo estudante brasileiro tem o direito de aprender em cada etapa da Educação Básica. Ela não é uma lista de conteúdos decorados (tipo "decoreba para a prova"), mas sim um mapa das competências e habilidades que formam um cidadão preparado para o século XXI. É o que separa um mero "apertador de botões" de um criador de soluções.
Pense na BNCC como o Roteiro de um Filme de Herói. Ela não te diz exatamente como salvar o mundo, mas te dá as ferramentas e o treinamento básico para que você possa, quando chegar a hora, criar sua própria aventura épica.
Para a área de Ciências da Natureza, a BNCC organiza o aprendizado em três unidades temáticas que se repetem ao longo de todo o Ensino Fundamental, como se fossem os três atos de uma peça:
| Unidade Temática | O que aborda | Analogia para Programadores |
|---|---|---|
| Matéria e Energia | Propriedades dos materiais, fontes e transformações de energia. | Entender de onde vem a energia para o seu código rodar e como ela se transforma em luz, som e movimento. É a física do seu programa. |
| Vida e Evolução | Seres vivos, ecossistemas, saúde e corpo humano. | Seu código precisa estar "vivo" e interagir com o ambiente. É a biologia do seu sistema, como ele reage a estímulos. |
| Terra e Universo | Astronomia, geologia, clima e sustentabilidade. | Onde seu código se encaixa no mundo? Ele pode monitorar o clima, ajudar na sustentabilidade ou até simular um sistema solar? |
No Ensino Médio, a BNCC estabelece competências específicas para a área de Ciências da Natureza e suas Tecnologias, que incluem a capacidade de analisar, representar e prever fenômenos naturais e tecnológicos. É aqui que você para de ser um mero usuário e se torna um engenheiro do caos digital.
📍 RCP-PR: A Versão Paranaense (Ou "A Receita de Bolo com Ingredientes Locais")
O RCP-PR é a versão paranaense da BNCC. Ele pega a Base Nacional e adapta à realidade do estado do Paraná, acrescentando especificidades locais e contextualizando os objetivos de aprendizagem. Imagine que a BNCC é a receita de bolo base, e o RCP-PR adiciona um toque de pinhão e um pé de moleque no final.
Na prática, os códigos da BNCC (como EF07CI04) ganham um sufixo no Paraná (ex:
PR.EF07CI04.s.7.27), mas o conteúdo da habilidade é o mesmo. É como um código de barras: o número
é diferente, mas o produto é o mesmo.
🎯 Por que isso importa para o micro:bit? (Ou "Por que você não está só brincando de robô")
Porque programar um micro:bit não é só "brincar de robô". É uma oportunidade de desenvolver habilidades previstas na BNCC e no RCP-PR que vão te fazer um ser humano mais completo e um profissional mais desejado. Você não está só aprendendo a programar; está aprendendo a pensar, a resolver problemas e a criar o futuro.
| Código BNCC/RCP | O que a habilidade diz | Como o micro:bit ajuda (O Mindset do Guerreiro) |
|---|---|---|
EF07CI04 |
Avaliar o papel do equilíbrio termodinâmico para a manutenção da vida e funcionamento de máquinas. | Você não está só piscando um LED; você está controlando a energia. Ao programar sensores, você entende como sistemas convertem energia, como o calor da sua mão pode ser lido pelo termômetro do micro:bit. |
EF08CI03 |
Classificar equipamentos elétricos pela transformação de energia (térmica, luminosa, sonora, mecânica). | Você está se tornando um mestre da energia. O micro:bit converte energia elétrica em luz (LEDs), em movimento (acelerômetro) e em som (alto-falante). Você decide o que fazer com ela. |
EF09CI03 |
Identificar modelos que descrevem a estrutura da matéria. | Programar é criar modelos. Seu código é um modelo do que você quer que o mundo faça. A lógica de programação modela sistemas complexos de forma simplificada. |
EM13CNT101 |
Analisar e representar transformações e conservações em sistemas. | O código não é só uma receita; é uma representação da realidade. O comportamento do seu sistema micro:bit é uma previsão do que você programou. |
EM13CNT102 |
Construir protótipos de sistemas considerando variáveis e tecnologias digitais. | Cada projeto com micro:bit é um protótipo funcional. Você não está só imaginando; você está construindo. É o sonho de todo inventor. |
EM13CNT303 |
Interpretar textos de divulgação científica em diferentes mídias. | Você vai documentar e comunicar seus projetos. Ser um cientista não é só fazer, é também mostrar e explicar o que fez. |
Resumo da ópera: você não está só aprendendo a programar; está construindo habilidades que a BNCC e o RCP-PR consideram essenciais para sua formação. E de quebra, ainda vai se divertir pra caramba e ter o poder de criar coisas que vão deixar seus amigos de boca aberta.
😎 Bônus: A Irreverência do Conhecimento
Sabe qual é a parte mais legal? Você pode usar esse conhecimento para questionar o sistema. A BNCC e o RCP-PR te dão as bases, mas quem decide COMO usar é você. Com o micro:bit, você pode criar um sensor de poluição para protestar contra a indústria local, um jogo para ensinar seus colegas sobre o sistema solar ou um dispositivo de segurança para sua bicicleta. A rebeldia está em criar, não em apenas consumir.
Seja o arquiteto do seu próprio caos, não um mero espectador.
PARTE 2: A PRIMEIRA INFILTRAÇÃO
📝 Passo 1: Acesse o Site Oficial
Abra seu navegador (Chrome, Edge, Firefox... todos servem, até o Internet Explorer se você gostar de sofrer) e digite:
https://makecode.microbit.org/
Pressione Enter. Você vai ver uma tela cheia de projetos, tutoriais e botões coloridos. Ignore tudo. Você não está aqui para brincar. Você está aqui para dominar.
🔑 Passo 2: Clique em "Entrar" (ou "Sign In")
No canto superior direito da tela, tem um botão. Pode estar escrito "Entrar", "Sign In" ou mostrar um ícone de pessoa. Clique nele. Você não vai se arrepender. (Se arrepender, pode fechar o navegador e voltar para a sua vida de blocos coloridos. Brincadeira. )
📧 Passo 3: Escolha Como Quer Entrar
O MakeCode oferece várias opções de login:
| Opção | O que você precisa | Nota do Guerreiro |
|---|---|---|
| Microsoft | Conta Microsoft (Outlook, Hotmail, Xbox, etc.) | A opção mais universal. Se você tem Xbox, já está no caminho. |
| Conta Gmail | Para os guerreiros do Google. | |
| Clever | Conta da escola (se usar esse sistema) | Para os guerreiros da educação. |
Se você não tem nenhuma dessas contas, crie uma conta Microsoft. É grátis e leva 2 minutos. Se você levar mais que 2 minutos, está perdendo tempo precioso de código.
🛠️ Passo 4: Faça o Login
Digite seu e-mail e senha. Se for a primeira vez, o sistema vai pedir algumas permissões básicas. Autorize tudo. O MakeCode não vai roubar seus dados; ele só quer saber quem você é para salvar seus projetos e, quem sabe, te julgar pelos nomes criativos que você dá aos seus arquivos.
✅ Passo 5: Confirme que Está Logado
Depois de logar, o canto superior direito vai mostrar seu nome ou foto. Se apareceu, missão cumprida. Você agora tem uma conta oficial no MakeCode. Parabéns! Você deu o primeiro passo para se tornar um programador de verdade. 🎉
PARTE 3: O LABORATÓRIO DO CAOS
🚀 Criando Seu Primeiro Projeto (Sério)
- Na tela inicial, clique em "Novo Projeto".
- Dê um nome foda para seu projeto. Nada de "teste" ou "projeto1". Use algo como:
"dominio_mundial""projeto_secreto_do_apocalipse""nao_me_acha""primeiro_codigo_de_um_deus"
- Clique em "Criar".
💀 Ativando o Modo JavaScript: O Fim dos Blocos
Você está olhando para uma tela cheia de bloquinhos coloridos. É bonito, é fofo, é limitado. Destrua essa interface.
No canto superior direito, você vai ver um botão que diz "Blocos" ou "Blocks". Clique nele e selecione "JavaScript".
🎯 Dica de Ninja: O MakeCode permite que você alterne entre Blocos e JavaScript a qualquer momento. Mas você não vai fazer isso. Você vai ficar no JavaScript. Você é um programador de verdade agora. Se você voltar para os blocos, o espírito do Dennis Ritchie vai te assombrar.
🖥️ A Interface: O Que É Cada Coisa (E Como Usar a Seu Favor)
| Área | O que faz | A Visão do Guerreiro |
|---|---|---|
| Simulador (esquerda) | Um micro:bit virtual que roda seu código em tempo real. Teste sem precisar de hardware! | Seu campo de treinamento virtual. Onde você pode testar suas ideias mais loucas sem quebrar nada de verdade. Use-o para cometer erros. Muitos erros. |
| Editor de Código (direita) | É aqui que você digita seu JavaScript. A casa da mágica. | Onde a alquimia acontece. É o seu quadro branco, seu caderno de anotações e sua arma principal. Trate-o com respeito. |
| Botão Download (roxo) | Transforma seu código em um arquivo .hex que o micro:bit entende. |
O portal para o mundo real. Clicar aqui é invocar o poder do hardware. Sinta o poder. |
| Botão Blocos/JavaScript | Alterna entre os modos. Você vai ignorá-lo. | A tentação. Resista. A força está no código puro. |
| Explorador (à esquerda do editor) | Mostra todos os arquivos do seu projeto. | Seu arsenal. Aqui estão todos os seus scripts, prontos para serem usados. |
📝 O Código Inicial: O Que Ele Faz E Como Explodi-lo
Quando você cria um projeto novo, o MakeCode já coloca um código inicial:
input.onButtonPressed(Button.A, function () {
basic.showString("Hello!")
})
Isso é JavaScript (na verdade, TypeScript, mas ninguém liga). Ele faz o micro:bit mostrar "Hello!" quando você pressiona o botão A.
Bonito, né? Fofo, mas fraco. Você vai aprender a fazer coisa muito mais insana. Vamos transformar esse código em algo que faria o próprio micro:bit tremer de medo (se ele pudesse tremer).
PARTE 4: A LINGUAGEM JAVASCRIPT PARA LEIGOS
Antes de sair escrevendo código como um louco, você precisa entender o básico do JavaScript no MakeCode. Não é um bicho de sete cabeças, é um bicho de dez cabeças, mas você vai domá-lo.
Os Blocos de Construção (A Sua Caixa de Ferramentas)
| Comando | O que faz | Exemplo | O que você pode fazer com isso |
|---|---|---|---|
basic.showString("texto") |
Mostra um texto rolando na matriz de LEDs. | basic.showString("OLÁ, MUNDO!") |
Criar mensagens secretas, fazer o micro:bit falar (digitalmente). |
basic.showIcon(IconNames.Heart) |
Mostra um ícone pré-definido. | basic.showIcon(IconNames.Heart) |
Mostrar emoções básicas, criar animações com ícones. |
basic.showNumber(n) |
Mostra um número na matriz. | basic.showNumber(42) |
Criar um contador, um cronômetro, um termômetro digital. |
basic.showLeds("imagem") |
Mostra uma imagem personalizada 5×5. | (vamos ver isso depois) | Criar seus próprios desenhos, animações, emoticons personalizados. |
basic.pause(ms) |
Pausa por X milissegundos. | basic.pause(500) // meio segundo |
Controlar o ritmo das suas animações, criar efeitos de suspense. |
basic.clearScreen() |
Apaga toda a matriz de LEDs. | basic.clearScreen() |
Criar um efeito de "reset" visual, iniciar uma animação do zero. |
basic.forever(function() {}) |
Executa o código em loop infinito. | basic.forever(function() { ... }) |
Manter seu programa "vivo", rodando para sempre (até a pilha acabar). |
input.onButtonPressed(Button.A, function() {}) |
Executa quando o botão A é pressionado. | input.onButtonPressed(Button.A, function() { ... }) |
Criar interatividade, fazer o micro:bit responder aos seus comandos. |
input.onGesture(Gesture.Shake, function() {}) |
Executa quando o micro:bit é chacoalhado. | input.onGesture(Gesture.Shake, function() { ... }) |
Criar um dado eletrônico, um alarme anti-furto, um controle por movimento. |
input.acceleration(Dimension.X) |
Lê a aceleração no eixo X. | let x = input.acceleration(Dimension.X) |
Detectar inclinação, criar um nível de bolha, controlar um jogo com o movimento da placa. |
Math.randomRange(min, max) |
Gera um número aleatório entre min e max. | let dado = Math.randomRange(1, 6) |
Criar sorteios, jogos de azar, decisões aleatórias (para quando você não quer decidir nada). |
🧠 Como Ler Este Código (Decodificando a Matrix)
// Isso é um comentário. O computador ignora.
// Ele serve para você (e outros) entenderem o que está acontecendo.
// Sinta-se à vontade para escrever comentários ofensivos sobre seu código passado.
basic.showString("OLÁ, MUNDO!") // Mostra "OLÁ, MUNDO!" na tela. Um clássico.
basic.forever(function () { // Loop infinito: roda para sempre, como uma maldição.
basic.showIcon(IconNames.Heart) // Mostra coração GRANDE. Pura demonstração de afeto digital.
basic.pause(500) // Espera 500ms. O suficiente para causar expectativa.
basic.showIcon(IconNames.SmallHeart) // Mostra coração PEQUENO. Apenas para variar.
basic.pause(500) // Espera 500ms. O ciclo do amor digital.
}) // Volta ao início do loop. A maldição continua.
Tradução: O micro:bit liga, mostra "OLÁ, MUNDO!", e depois fica alternando entre coração grande e coração pequeno para sempre. É um programa. É artístico. É eterno (até a bateria acabar).
🚨 Erros Comuns (E Como Usá-los a Seu Favor)
Erros são seus amigos. Eles te ensinam. Aqui estão alguns clássicos:
| Erro | O que significa | Como resolver |
|---|---|---|
Missing ) in parenthetical |
Faltou um parêntese. | Conte os parênteses. Use um editor que colore o código. |
Unexpected token |
Você escreveu algo que o JavaScript não entende. | Verifique se você não escreveu if como iff ou function como
funcao. |
Cannot find name 'basic' |
Você esqueceu de importar a biblioteca ou escreveu o nome errado. | Verifique a ortografia. O MakeCode já importa, mas se você escrever Basico ao invés de
basic, ele não vai entender. |
Quando você vir um erro, não entre em pânico. Leia a mensagem. O computador está tentando te dizer algo. Ele é seu parceiro, não seu inimigo.
🎨 PROJETO SIMULADO 04: Desenhando na Matriz de LEDs (showLeds)
📚 OBJETIVO E CONCEITOS
- Objetivo: Criar imagens personalizadas na matriz 5×5 de LEDs usando
basic.showLeds(). - Conceitos Ensinados:
- Matriz 5×5 como sistema de coordenadas
- Criação de imagens pixel a pixel
- Animação com múltiplos frames
- Código BNCC: EF08CI03, EM13CNT101
- Código RCP (Paraná): PR.EF08CI03.s.8.09, PR.EM13CNT101
💻 CÓDIGO DO PROJETO
// ================================================================
// PROJETO SIMULADO 04: Desenhando na Matriz de LEDs 🎨
// ================================================================
// A matriz de LEDs tem 5 colunas e 5 linhas.
// Cada posição pode estar ACESA (#) ou APAGADA (.)
// Habilidades BNCC: EF08CI03, EM13CNT101
// Habilidades RCP-PR: PR.EF08CI03.s.8.09, PR.EM13CNT101
// ================================================================
// 🚀 INICIALIZAÇÃO
basic.showString("ARTE")
// ================================================================
// FUNÇÃO: desenhaCaraFeliz()
// ================================================================
// showLeds recebe uma string com 5 linhas de 5 caracteres.
// # = LED aceso . = LED apagado
// ================================================================
function desenhaCaraFeliz() {
basic.showLeds(`
. # . # .
. # . # .
. . . . .
# . . . #
. # # # .
`)
}
// ================================================================
// FUNÇÃO: desenhaCaraTriste()
// ================================================================
function desenhaCaraTriste() {
basic.showLeds(`
. # . # .
. # . # .
. . . . .
. # # # .
# . . . #
`)
}
// ================================================================
// FUNÇÃO: desenhaCoracao()
// ================================================================
function desenhaCoracao() {
basic.showLeds(`
. # . # .
# # # # #
# # # # #
. # # # .
. . # . .
`)
}
// ================================================================
// ANIMAÇÃO: Alterna entre as imagens
// ================================================================
basic.forever(function () {
desenhaCaraFeliz()
basic.pause(1000)
desenhaCaraTriste()
basic.pause(1000)
desenhaCoracao()
basic.pause(1000)
})
🧪 COMO TESTAR A SIMULAÇÃO
- Copie o código para o editor.
- Observe o simulador - as imagens vão se alternar a cada segundo.
- Crie suas próprias imagens modificando os padrões de
#e..
🏆 DESAFIO "O Artista Digital"
Desafio: Crie uma animação de um rosto piscando!
- Desenhe um rosto com olhos abertos.
- Desenhe um rosto com olhos fechados.
- Alterne entre eles com pausas diferentes (simulando piscadas).
- Versão insana: Crie um "emoticon animado" que muda de expressão quando você pressiona os botões.
📊 PROJETO SIMULADO 05: O Termômetro Digital (Leitura de Sensores)
📚 OBJETIVO E CONCEITOS
- Objetivo: Ler a temperatura do sensor interno do micro:bit e exibi-la na matriz de LEDs.
- Conceitos Ensinados:
- Leitura de sensor de temperatura (
input.temperature()) - Exibição de números na matriz
- Loop infinito com atualização constante
- Leitura de sensor de temperatura (
- Código BNCC: EF07CI04, EM13CNT102
- Código RCP (Paraná): PR.EF07CI04.s.7.27, PR.EM13CNT102
💻 CÓDIGO DO PROJETO
// ================================================================
// PROJETO SIMULADO 05: O Termômetro Digital 🌡️
// ================================================================
// O micro:bit tem um sensor de temperatura interno.
// Este programa lê a temperatura e mostra na tela.
// Habilidades BNCC: EF07CI04, EM13CNT102
// Habilidades RCP-PR: PR.EF07CI04.s.7.27, PR.EM13CNT102
// ================================================================
// 🚀 INICIALIZAÇÃO
basic.showString("TEMP")
// ================================================================
// LOOP INFINITO: lê e mostra a temperatura
// ================================================================
basic.forever(function () {
// Lê a temperatura em graus Celsius
let temperatura = input.temperature()
// Mostra o valor na matriz de LEDs
basic.showNumber(temperatura)
// Espera 2 segundos antes de atualizar
basic.pause(2000)
})
🧪 COMO TESTAR A SIMULAÇÃO
- Copie o código para o editor.
- Observe o simulador - ele vai mostrar a temperatura ambiente.
- Mude a temperatura no simulador (alguns têm um controle deslizante).
- Veja o número mudar em tempo real.
🏆 DESAFIO "O Alarme de Temperatura"
Desafio: Crie um alarme que dispara quando a temperatura passa de 30°C!
- Leia a temperatura.
- Se for 30°C, mostre um ícone de alerta (ex:
IconNames.No). - Se for ≤ 30°C, mostre a temperatura normalmente.
- Versão insana: Faça o micro:bit "tremer" (acelerômetro) quando a temperatura estiver muito alta.
🚀 PROJETO SIMULADO 06: O Jogo da Memória (Interação Avançada)
📚 OBJETIVO E CONCEITOS
- Objetivo: Criar um jogo da memória simples onde o micro:bit mostra uma sequência de LEDs e o jogador deve repeti-la usando os botões.
- Conceitos Ensinados:
- Arrays e manipulação de dados
- Lógica de jogo (estados)
- Feedback visual e interação
- Código BNCC: EF09CI03, EM13CNT101, EM13CNT104
💻 CÓDIGO DO PROJETO
// ================================================================
// PROJETO SIMULADO 06: O Jogo da Memória 🧠
// ================================================================
// O micro:bit mostra uma sequência de LEDs que você deve repetir.
// Cada vez que você acerta, a sequência aumenta!
// Habilidades BNCC: EF09CI03, EM13CNT101, EM13CNT104
// ================================================================
// ================================================================
// VARIÁVEIS GLOBAIS
// ================================================================
let sequencia: number[] = [] // Armazena a sequência de LEDs
let sequenciaUsuario: number[] = [] // Armazena o que o usuário digitou
let rodadaAtual: number = 0 // Rodada atual do jogo
let jogoAtivo: boolean = false // Estado do jogo
// ================================================================
// FUNÇÃO: gerarSequencia()
// ================================================================
function gerarSequencia() {
// Gera uma sequência aleatória de números (1-5) para representar as posições
for (let i = 0; i < 5; i++) {
sequencia[i] = Math.randomRange(1, 5)
}
}
// ================================================================
// FUNÇÃO: mostrarSequencia()
// ================================================================
function mostrarSequencia() {
// Mostra cada número da sequência na tela
for (let i = 0; i <= rodadaAtual; i++) {
basic.showNumber(sequencia[i])
basic.pause(500)
basic.clearScreen()
basic.pause(200)
}
}
// ================================================================
// FUNÇÃO: verificarResposta()
// ================================================================
function verificarResposta() {
// Verifica se a sequência do usuário está correta até o momento
for (let i = 0; i <= rodadaAtual; i++) {
if (sequenciaUsuario[i] !== sequencia[i]) {
basic.showString("ERROU!")
basic.pause(1000)
jogoAtivo = false
return
}
}
// Se chegou aqui, acertou!
if (sequenciaUsuario.length == rodadaAtual) {
basic.showString("ACERTOU!")
basic.pause(500)
rodadaAtual++
sequenciaUsuario = []
if (rodadaAtual < 5) {
mostrarSequencia()
} else {
basic.showString("VENCEU!")
jogoAtivo = false
}
}
}
// ================================================================
// EVENTO DO BOTÃO A - Adiciona um número à sequência do usuário
// ================================================================
input.onButtonPressed(Button.A, function () {
if (jogoAtivo) {
sequenciaUsuario.push(Math.randomRange(1, 5))
basic.showNumber(sequenciaUsuario[sequenciaUsuario.length - 1])
basic.pause(300)
basic.clearScreen()
verificarResposta()
}
})
// ================================================================
// EVENTO DO BOTÃO B - Inicia o jogo
// ================================================================
input.onButtonPressed(Button.B, function () {
if (!jogoAtivo) {
jogoAtivo = true
rodadaAtual = 0
sequencia = []
sequenciaUsuario = []
gerarSequencia()
basic.showString("PRONTO?")
basic.pause(500)
mostrarSequencia()
}
})
// 🚀 INICIALIZAÇÃO
basic.showString("MEMORIA")
jogoAtivo = false
🧪 COMO TESTAR A SIMULAÇÃO
- Pressione B para iniciar o jogo.
- O micro:bit mostrará uma sequência de números.
- Pressione A para adicionar um número à sua resposta.
- O jogo verifica se você acertou a sequência.
- Se acertar, a sequência aumenta de tamanho!
🏆 DESAFIO "O Mestre da Memória"
Desafio: Melhore o jogo da memória!
- Aumente o número máximo de rodadas para 10.
- Adicione feedback visual com ícones em vez de números.
- Versão insana: Adicione um "modo turbo" onde a sequência aparece mais rápida a cada rodada.
🚀 Excelente! Você já dominou o campo de treinamento virtual. Agora é hora de encarar o mundo real, onde o código não é mais uma simulação bonitinha, mas sim uma força que transforma hardware em comportamentos. Prepare-se para a PARTE 6 do manual: O UNIVERSO FÍSICO - MÃO NA MASSA COM O HARDWARE REAL.
PARTE 6: O UNIVERSO FÍSICO
Chegou a hora. Você já brincou no simulador. Já testou suas ideias no campo de treinamento virtual. Agora é hora de colocar a mão na massa, sentir o cheiro do plástico queimado (brincadeira, não vai queimar nada... provavelmente) e ver seu código rodando no hardware de verdade.
📦 O QUE VOCÊ TEM NA SUA CAIXA (O SEU ARSENAL)
| Item | Descrição | Quantidade | O que você pode fazer com isso |
|---|---|---|---|
| 01 | Computador (desktop, notebook ou Chromebook) | 1 | Sua estação de comando. Onde o código nasce. |
| 02 | BBC micro:bit (placa microcontroladora) | 1 | O cérebro. O coração. A alma do seu projeto. |
| 03 | Matriz de LEDs (tela 5×5 do micro:bit) | 1 | Sua tela, seu canvas, sua janela para o mundo digital. |
| 04 | Botão A (do micro:bit) | 1 | O botão da verdade. O "SIM". O "LIGA". |
| 05 | Botão B (do micro:bit) | 1 | O botão da negação. O "NÃO". O "DESLIGA". |
| 06 | Acelerômetro (sensor de movimento) | 1 | O detector de caos. O que sente quando você chacoalha a placa. |
| 07 | Cabo USB (para conexão entre computador e micro:bit) | 1 | O cordão umbilical digital. A ponte entre o virtual e o real. |
| 08 | Suporte de pilhas (bateria externa para o micro:bit) | 1 | A fonte de energia. O que liberta seu projeto do cabo USB. |
🔧 PASSO A PASSO: COMO CARREGAR O CÓDIGO NO HARDWARE (A ARTE DA TRANSFERÊNCIA)
Passo 1: Conecte o micro:bit (O Primeiro Contato)
Pegue o cabo USB e conecte uma ponta no micro:bit (entrada micro-USB) e a outra no computador.
⚡ Dica de Mestre: O LED amarelo do micro:bit vai acender. Isso significa que ele está recebendo energia e está pronto para ser dominado. Se não acender, verifique se o cabo está bem conectado. Alguns cabos USB são traiçoeiros e só carregam bateria, não transferem dados.
Passo 2: Escreva Seu Código no MakeCode (A Preparação)
No MakeCode, escreva (ou cole) o código que você quer testar. Certifique-se de que está no modo JavaScript. Lembre-se: você é um guerreiro do código, não um montador de blocos.
Passo 3: Clique em "Download" (A Invocação)
No canto inferior esquerdo, tem um botão roxo chamado "Download". Clique nele. Sinta o poder. O MakeCode vai compilar seu código e transformá-lo em algo que o micro:bit entende.
Passo 4: Salve o Arquivo .hex (A Gênese)
O navegador vai baixar um arquivo com extensão .hex. É esse arquivo que o micro:bit entende. É o
seu código em sua forma mais pura e bruta.
Passo 5: Copie o Arquivo para o micro:bit (A Transferência)
Opção A (mais fácil): Abra o arquivo baixado. O computador vai perguntar onde salvar. Escolha a unidade "MICROBIT" que apareceu no seu computador.
Opção B (arrastar): Arraste o arquivo .hex diretamente para a unidade
"MICROBIT".
⚠️ Problema comum: Se o micro:bit não aparecer como unidade, tente outro cabo USB. Alguns cabos só carregam bateria e não transferem dados. É a maldição do cabo USB. Tenha sempre um cabo confiável em mãos.
Passo 6: Aguarde o Carregamento (A Espera)
O LED amarelo do micro:bit vai piscar enquanto o código é carregado. Isso leva cerca de 10 segundos. É como esperar um foguete decolar. A ansiedade é parte do processo.
Passo 7: Pronto! (A Consagração)
Assim que o LED parar de piscar, seu código está rodando no hardware. A matriz de LEDs vai mostrar o que você programou. Se algo der errado, não se preocupe. Errar é humano. Depurar é divino.
PROJETOS HARDWARE
🧭 PROJETO HARDWARE 01: A Bússola de Bolso (Acelerômetro)
📚 OBJETIVO E CONCEITOS
- Objetivo: Criar uma bússola digital que mostra a direção (Norte, Sul, Leste, Oeste) conforme você inclina o micro:bit.
- Conceitos Ensinados:
- Leitura dos eixos do acelerômetro (X, Y)
- Mapeamento de inclinação para direções
- Lógica condicional para determinar a direção
- Código BNCC: EF08CI03, EF09CI03, EM13CNT303, EM13CNT104
- Código RCP (Paraná): PR.EF08CI03.s.8.09, PR.EF09CI03.s.9.07, PR.EM13CNT303, PR.EM13CNT104
💻 CÓDIGO DO PROJETO
// ================================================================
// PROJETO HARDWARE 01: A Bússola de Bolso 🧭
// ================================================================
// Incline o micro:bit e veja a direção:
// N (Norte), S (Sul), L (Leste), O (Oeste)
// Habilidades BNCC: EF08CI03, EF09CI03, EM13CNT303, EM13CNT104
// Habilidades RCP-PR: PR.EF08CI03.s.8.09, PR.EF09CI03.s.9.07,
// PR.EM13CNT303, PR.EM13CNT104
// ================================================================
// 🚀 INICIALIZAÇÃO
basic.showString("BUSSOLA")
// ================================================================
// LOOP INFINITO
// ================================================================
basic.forever(function () {
// Lê os eixos X e Y do acelerômetro
// Valores variam de -1023 a 1023
let x = input.acceleration(Dimension.X)
let y = input.acceleration(Dimension.Y)
// ============================================================
// DETERMINA A DIREÇÃO BASEADA NA INCLINAÇÃO
// ============================================================
// Norte: y é negativo (inclinado para frente)
// Sul: y é positivo (inclinado para trás)
// Leste: x é positivo (inclinado para direita)
// Oeste: x é negativo (inclinado para esquerda)
// Limiar de 200 para evitar tremores
// ============================================================
if (y < -200) {
basic.showString("N") // Norte!
} else if (y > 200) {
basic.showString("S") // Sul!
} else if (x > 200) {
basic.showString("L") // Leste!
} else if (x < -200) {
basic.showString("O") // Oeste!
} else {
basic.showIcon(IconNames.SmallSquare) // Placa nivelada
}
basic.pause(100)
})
🧪 COMO TESTAR NO HARDWARE
- Carregue o código no micro:bit seguindo os passos da seção anterior.
- Segure o micro:bit na horizontal.
- Incline para frente - deve aparecer "N".
- Incline para trás - deve aparecer "S".
- Incline para direita - deve aparecer "L".
- Incline para esquerda - deve aparecer "O".
- Deixe nivelado - aparece um quadrado pequeno.
🏆 DESAFIO "Bússola com Precisão"
Desafio: Adicione direções intermediárias: NE, NO, SE, SO.
Dica: Use condições com && (E) para combinar eixos.
Versão Insana: Faça a bússola mostrar a direção em graus (0° a 360°) usando
Math.atan2(y, x).
⏱️ PROJETO HARDWARE 02: O Cronômetro Digital (Controle de Tempo)
📚 OBJETIVO E CONCEITOS
- Objetivo: Criar um cronômetro. Botão A inicia, Botão B para, A+B reinicia.
- Conceitos Ensinados:
- Leitura de múltiplos botões
- Lógica de estados (iniciar, parar, reiniciar)
- Controle de variáveis e tempo
- Código BNCC: EF07CI05, EF08CI04, EM13CNT102
- Código RCP (Paraná): PR.EF07CI05.s.7.31, PR.EF08CI04.s.8.13, PR.EM13CNT102
💻 CÓDIGO DO PROJETO
// ================================================================
// PROJETO HARDWARE 02: O Cronômetro Digital ⏱️
// ================================================================
// Botão A = INICIAR
// Botão B = PARAR
// Botões A+B = REINICIAR (ZERAR)
// Habilidades BNCC: EF07CI05, EF08CI04, EM13CNT102
// Habilidades RCP-PR: PR.EF07CI05.s.7.31, PR.EF08CI04.s.8.13, PR.EM13CNT102
// ================================================================
// ================================================================
// VARIÁVEIS GLOBAIS
// ================================================================
let contagem = 0 // Armazena o valor atual do cronômetro
let cronometroLigado = false // TRUE = rodando, FALSE = parado
// 🚀 INICIALIZAÇÃO
basic.showString("CRONO")
// ================================================================
// EVENTO DO BOTÃO A -- INICIAR
// ================================================================
input.onButtonPressed(Button.A, function () {
cronometroLigado = true
basic.showString("INICIAR")
})
// ================================================================
// EVENTO DO BOTÃO B -- PARAR
// ================================================================
input.onButtonPressed(Button.B, function () {
cronometroLigado = false
basic.showString("PARAR")
})
// ================================================================
// EVENTO DOS BOTÕES A+B -- REINICIAR
// ================================================================
input.onButtonPressed(Button.AB, function () {
cronometroLigado = false
contagem = 0
basic.showString("ZERAR")
})
// ================================================================
// LOOP INFINITO: atualiza o cronômetro a cada segundo
// ================================================================
basic.forever(function () {
if (cronometroLigado) {
contagem = contagem + 1 // Incrementa a contagem
basic.showNumber(contagem) // Mostra o valor atual
}
basic.pause(1000) // Espera 1 segundo
})
🧪 COMO TESTAR NO HARDWARE
- Carregue o código no micro:bit.
- Pressione o Botão A - o cronômetro começa a contar.
- Pressione o Botão B - o cronômetro para.
- Pressione A+B juntos - o cronômetro volta a zero.
- Divirta-se cronometrando tudo que é possível.
🏆 DESAFIO "O Cronômetro com Volta"
Desafio: Adicione uma função de "volta" (lap)!
- Quando você pressionar A+B rapidamente, registre o tempo atual.
- Mostre "VOLTA" e o tempo registrado.
- Continue contando a partir de onde parou.
Versão Insana: Adicione uma função de "memória" que armazena todas as voltas em um array e mostra a melhor volta no final.
📐 PROJETO HARDWARE 03: O Nível de Bolha Digital (Sensores de Inclinação)
📚 OBJETIVO E CONCEITOS
- Objetivo: Criar um nível de bolha digital que mostra se a superfície está nivelada.
- Conceitos Ensinados:
- Leitura do acelerômetro em dois eixos
- Mapeamento de inclinação para visualização
- Filtragem de ruído do acelerômetro
- Código BNCC: EF09CI04, EF09CI10, EM13CNT110
- Código RCP (Paraná): PR.EF09CI04.s.9.13, PR.EF09CI10.s.9.37, PR.EM13CNT110
💻 CÓDIGO DO PROJETO
// ================================================================
// PROJETO HARDWARE 03: O Nível de Bolha Digital 📐
// ================================================================
// Mostra um ponto central quando nivelado.
// Se inclinado, mostra a direção da inclinação com um ponto.
// Habilidades BNCC: EF09CI04, EF09CI10, EM13CNT110
// Habilidades RCP-PR: PR.EF09CI04.s.9.13, PR.EF09CI10.s.9.37, PR.EM13CNT110
// ================================================================
// 🚀 INICIALIZAÇÃO
basic.showString("NIVEL")
// ================================================================
// LOOP INFINITO
// ================================================================
basic.forever(function () {
let x = input.acceleration(Dimension.X)
let y = input.acceleration(Dimension.Y)
// ============================================================
// VERIFICA SE ESTÁ NIVELADO
// ============================================================
// Se X e Y estão próximos de 0, a placa está nivelada
// Usamos 100 como margem de erro (para evitar tremores)
// ============================================================
if (Math.abs(x) < 100 && Math.abs(y) < 100) {
// Mostra um ponto central
basic.showLeds(`
. . . . .
. . . . .
. . # . .
. . . . .
. . . . .
`)
} else {
// ============================================================
// DETERMINA A POSIÇÃO DO PONTO
// ============================================================
// Começa no centro (linha 2, coluna 2)
// 0 = topo/esquerda, 4 = baixo/direita
// ============================================================
let linha = 2
let coluna = 2
if (x < -200) { coluna = 0 } // Inclinado para esquerda
else if (x > 200) { coluna = 4 } // Inclinado para direita
if (y < -200) { linha = 0 } // Inclinado para frente
else if (y > 200) { linha = 4 } // Inclinado para trás
// ============================================================
// CRIA A IMAGEM COM O PONTO NA POSIÇÃO CORRETA
// ============================================================
let imagem = ""
for (let i = 0; i < 5; i++) {
for (let j = 0; j < 5; j++) {
if (i == linha && j == coluna) {
imagem += "#"
} else {
imagem += "."
}
}
imagem += "\n"
}
basic.showLeds(imagem)
}
basic.pause(200)
})
🧪 COMO TESTAR NO HARDWARE
- Carregue o código no micro:bit.
- Coloque o micro:bit sobre uma superfície.
- Observe o ponto - se estiver no centro, a superfície está nivelada.
- Incline o micro:bit - o ponto se move na direção da inclinação.
- Use como nível de bolha para alinhar quadros, mesas, etc.
🏆 DESAFIO "O Nível com Precisão"
Desafio: Aumente a precisão do nível!
- Use um limiar menor (ex: 50) para mais sensibilidade.
- Mostre a inclinação em graus (use
Math.atan2(y, x)). - Adicione um indicador visual da intensidade da inclinação.
Versão Insana: Crie um "modo calibração" onde o usuário pode calibrar o nível em diferentes superfícies.
🚨 PROJETO HARDWARE 04: O Alarme de Movimento (Detector de Invasão)
📚 OBJETIVO E CONCEITOS
- Objetivo: Criar um alarme que detecta quando o micro:bit é chacoalhado.
- Conceitos Ensinados:
- Detecção de gesto "SHAKE"
- Criação de um estado de alarme
- Lógica de alternância (toggle)
- Código BNCC: EF08CI04, EF08CI06, EM13CNT106
- Código RCP (Paraná): PR.EF08CI04.s.8.13, PR.EF08CI06.s.8.23, PR.EM13CNT106
💻 CÓDIGO DO PROJETO
// ================================================================
// PROJETO HARDWARE 04: O Alarme de Movimento 🚨
// ================================================================
// Chacoalhe para ATIVAR ou DESATIVAR o alarme.
// Quando ativado, a tela mostra um alerta piscando.
// Habilidades BNCC: EF08CI04, EF08CI06, EM13CNT106
// Habilidades RCP-PR: PR.EF08CI04.s.8.13, PR.EF08CI06.s.8.23, PR.EM13CNT106
// ================================================================
// ================================================================
// VARIÁVEIS GLOBAIS
// ================================================================
let alarmeAtivo = false // TRUE = alarme ligado, FALSE = alarme desligado
// 🚀 INICIALIZAÇÃO
basic.showString("ALARME")
// ================================================================
// EVENTO DE GESTO "SHAKE" (Chacoalhar)
// ================================================================
input.onGesture(Gesture.Shake, function () {
// Alterna o estado do alarme (toggle)
alarmeAtivo = !alarmeAtivo
if (alarmeAtivo) {
basic.showString("ATIVADO")
} else {
basic.showString("DESATIV")
}
})
// ================================================================
// LOOP INFINITO
// ================================================================
basic.forever(function () {
if (alarmeAtivo) {
// 🔴 Alarme ativado: pisca um ícone de alerta
basic.showIcon(IconNames.Yes)
basic.pause(300)
basic.clearScreen()
basic.pause(300)
} else {
// 🟢 Alarme desativado: mostra um quadrado pequeno
basic.showIcon(IconNames.SmallSquare)
basic.pause(500)
}
})
🧪 COMO TESTAR NO HARDWARE
- Carregue o código no micro:bit.
- Chacoalhe o micro:bit - aparece "ATIVADO" e o alarme começa a piscar.
- Chacoalhe novamente - aparece "DESATIV" e o alarme para.
- Teste várias vezes para ver a alternância.
🏆 DESAFIO "O Alarme com Código Secreto"
Desafio: Faça o alarme só desarmar com uma sequência secreta!
- Em vez de chacoalhar para desativar, exija uma sequência de botões.
- Exemplo: A, B, A, B para desarmar.
- Mostre "ERRADO" se a sequência estiver incorreta.
Versão Insana: Após 3 tentativas falhas, bloqueie o desarme por 1 minuto e mostre "BLOQUEADO" na tela.
🎭 PROJETO HARDWARE 05: O Sistema de Controle de Humor (Expressões na Matriz)
📚 OBJETIVO E CONCEITOS
- Objetivo: Criar um sistema que mostra diferentes expressões faciais baseadas em interações com os botões.
- Conceitos Ensinados:
- Design de imagens personalizadas
- Estados de máquina (FSM - Finite State Machine)
- Feedback visual em tempo real
- Código BNCC: EF08CI03, EM13CNT101, EM13CNT104
💻 CÓDIGO DO PROJETO
// ================================================================
// PROJETO HARDWARE 05: O Sistema de Controle de Humor 🎭
// ================================================================
// Botão A = FELIZ
// Botão B = TRISTE
// A+B = SURPRESO
// Chacoalhar = ALEATÓRIO
// Habilidades BNCC: EF08CI03, EM13CNT101, EM13CNT104
// ================================================================
// ================================================================
// FUNÇÕES DE EXPRESSÕES FACIAIS
// ================================================================
function expressaoFeliz() {
basic.showLeds(`
. # . # .
. # . # .
. . . . .
# . . . #
. # # # .
`)
}
function expressaoTriste() {
basic.showLeds(`
. # . # .
. # . # .
. . . . .
. # # # .
# . . . #
`)
}
function expressaoSurpreso() {
basic.showLeds(`
. # . # .
. # . # .
. . . . .
. # # # .
. . # . .
`)
}
function expressaoBravo() {
basic.showLeds(`
. # . # .
. # . # .
. . . . .
# . . . #
. # # # .
`)
}
function expressaoAleatorio() {
let opcoes = [0, 1, 2, 3]
let escolha = opcoes[Math.randomRange(0, 3)]
switch(escolha) {
case 0: expressaoFeliz(); break
case 1: expressaoTriste(); break
case 2: expressaoSurpreso(); break
case 3: expressaoBravo(); break
}
}
// ================================================================
// EVENTOS DOS BOTÕES
// ================================================================
input.onButtonPressed(Button.A, function () {
expressaoFeliz()
basic.pause(2000)
})
input.onButtonPressed(Button.B, function () {
expressaoTriste()
basic.pause(2000)
})
input.onButtonPressed(Button.AB, function () {
expressaoSurpreso()
basic.pause(2000)
})
input.onGesture(Gesture.Shake, function () {
expressaoAleatorio()
basic.pause(2000)
})
// 🚀 INICIALIZAÇÃO
basic.showString("HUMOR")
basic.pause(500)
expressaoFeliz()
🧪 COMO TESTAR NO HARDWARE
- Carregue o código no micro:bit.
- Pressione A - o micro:bit mostra uma expressão feliz.
- Pressione B - mostra uma expressão triste.
- Pressione A+B - mostra uma expressão surpresa.
- Chacoalhe - mostra uma expressão aleatória.
🏆 DESAFIO "O Mestre das Expressões"
Desafio: Crie um sistema de "humor inteligente"!
- Adicione mais expressões (ex: cansado, animado, confuso).
- Crie uma "personalidade" que muda conforme as interações.
Versão Insana: Faça o humor do micro:bit mudar automaticamente com base na temperatura ou no movimento.
🆘 PROJETO HARDWARE 06: O Sistema de Sinalização SOS (Comunicação Visual)
📚 OBJETIVO E CONCEITOS
- Objetivo: Criar um sistema de sinalização que pisca o código Morse para SOS.
- Conceitos Ensinados:
- Código Morse e comunicação visual
- Padrões de temporização
- Sequenciamento de eventos
- Código BNCC: EF09CI03, EM13CNT101, EM13CNT303
💻 CÓDIGO DO PROJETO
// ================================================================
// PROJETO HARDWARE 06: O Sistema de Sinalização SOS 🆘
// ================================================================
// Botão A = SOS (Sinal de socorro)
// Botão B = Stop (Para o sinal)
// A+B = Mensagem personalizada
// Chacoalhar = SOS em loop infinito
// Habilidades BNCC: EF09CI03, EM13CNT101, EM13CNT303
// ================================================================
// ================================================================
// VARIÁVEIS GLOBAIS
// ================================================================
let sinalAtivo = false
let loopAtivo = false
// ================================================================
// FUNÇÃO: sinalSOS()
// ================================================================
function sinalSOS() {
// S: 3 pontos rápidos
for (let i = 0; i < 3; i++) {
basic.showString("S")
basic.pause(200)
basic.clearScreen()
basic.pause(200)
}
basic.pause(500)
// O: 3 traços longos
for (let i = 0; i < 3; i++) {
basic.showString("O")
basic.pause(600)
basic.clearScreen()
basic.pause(200)
}
basic.pause(500)
// S: 3 pontos rápidos
for (let i = 0; i < 3; i++) {
basic.showString("S")
basic.pause(200)
basic.clearScreen()
basic.pause(200)
}
basic.pause(1000)
}
// ================================================================
// FUNÇÃO: sinalPersonalizado(texto)
// ================================================================
function sinalPersonalizado(texto: string) {
for (let i = 0; i < texto.length; i++) {
basic.showString(texto.charAt(i))
basic.pause(500)
basic.clearScreen()
basic.pause(300)
}
}
// ================================================================
// EVENTOS DOS BOTÕES
// ================================================================
input.onButtonPressed(Button.A, function () {
sinalAtivo = true
sinalSOS()
sinalAtivo = false
})
input.onButtonPressed(Button.B, function () {
sinalAtivo = false
loopAtivo = false
basic.clearScreen()
basic.showString("PARAR")
})
input.onButtonPressed(Button.AB, function () {
if (!sinalAtivo) {
sinalPersonalizado("HELP")
}
})
input.onGesture(Gesture.Shake, function () {
if (!sinalAtivo) {
loopAtivo = !loopAtivo
if (loopAtivo) {
basic.showString("LOOP ON")
} else {
basic.showString("LOOP OFF")
}
}
})
// ================================================================
// LOOP INFINITO
// ================================================================
basic.forever(function () {
if (loopAtivo && !sinalAtivo) {
sinalSOS()
}
basic.pause(100)
})
// 🚀 INICIALIZAÇÃO
basic.showString("SOS")
🧪 COMO TESTAR NO HARDWARE
- Carregue o código no micro:bit.
- Pressione A - o micro:bit transmite SOS em código Morse.
- Pressione B - para a transmissão.
- Pressione A+B - transmite uma mensagem personalizada.
- Chacoalhe - ativa/desativa o loop contínuo de SOS.
🏆 DESAFIO "O Mestre das Mensagens Secretas"
Desafio: Crie um sistema de mensagens secretas!
- Adicione diferentes mensagens para diferentes combinações de botões.
- Crie uma "linguagem secreta" que só o micro:bit e você entendem.
Versão Insana: Permita que o usuário digite mensagens usando os botões (ex: Morse Code com botões).
🚀 Excelente! Você sobreviveu aos projetos intermediários. Agora é hora de encarar o verdadeiro teste de fogo. Esta é a PARTE 7 do manual: O DESAFIO HACKER FINAL - O GUARDA-COSTAS DIGITAL e a conclusão épica da sua jornada.
🏆 PARTE 7: O DESAFIO HACKER FINAL
Você chegou ao momento mais aguardado. Este não é apenas mais um projeto. Esta é a sua prova de fogo, o teste que separa os verdadeiros guerreiros do código dos meros espectadores. Você vai criar um sistema de segurança completo usando apenas o que tem na sua caixa.
🎯 O DESAFIO
A Missão: O aluno deve esconder o micro:bit (com suporte de pilhas) dentro de uma caixa ou gaveta para criar um sistema de segurança anti-furto.
A Lógica:
- Usando o acelerômetro, o micro:bit detecta quando a caixa é aberta ou movida (tremores, impactos, inclinações)
- A matriz de LEDs exibe "INTRUSO!" e pisca freneticamente em um padrão de alerta
- Para desarmar, o dono precisa pressionar A+B por 3 segundos (código secreto de segurança)
- Sistema de contagem de tentativas para evitar invasões
💻 CÓDIGO DO DESAFIO FINAL
// ================================================================
// 🏆 DESAFIO HACKER FINAL: O GUARDA-COSTAS DIGITAL
// ================================================================
// Chacoalhe = ATIVA o alarme
// A+B por 3 segundos = DESARMA o alarme
// Sistema anti-invasão com contador de tentativas
// Habilidades BNCC: EF08CI04, EF08CI06, EM13CNT106, EM13CNT303
// Habilidades RCP-PR: PR.EF08CI04.s.8.13, PR.EF08CI06.s.8.23,
// PR.EM13CNT106, PR.EM13CNT303
// ================================================================
// ================================================================
// VARIÁVEIS GLOBAIS
// ================================================================
let alarmeAtivo = false // Estado do alarme
let tentativas = 0 // Contador de tentativas de invasão
let bloqueioAtivo = false // Estado de bloqueio
let tempoBloqueio = 0 // Tempo restante de bloqueio
let invasaoDetectada = false // Flag para evitar múltiplas ativações
// ================================================================
// FUNÇÃO: dispararAlarme()
// ================================================================
// Esta função é chamada quando o alarme é ativado.
// Ela pisca um alerta na tela, faz som (visual) e só para quando desarmado.
// ================================================================
function dispararAlarme() {
alarmeAtivo = true
invasaoDetectada = true
tentativas = tentativas + 1
// 🚨 SEQUÊNCIA DE ALARME COM EFEITOS VISUAIS
// Primeiro: mensagem de alerta
basic.showString("INTRUSO!")
basic.pause(500)
// ============================================================
// LOOP DO ALARME - Só para com o código secreto
// ============================================================
while (alarmeAtivo) {
// 🔴 ALERTA PISCANTE COM INTENSIDADE VARIÁVEL
// Efeito 1: Piscada rápida (estilo sirene)
for (let i = 0; i < 5; i++) {
basic.showIcon(IconNames.Yes)
basic.pause(150)
basic.clearScreen()
basic.pause(150)
}
// Efeito 2: Piscada lenta (para criar tensão)
for (let i = 0; i < 3; i++) {
basic.showIcon(IconNames.No)
basic.pause(300)
basic.clearScreen()
basic.pause(300)
}
// Efeito 3: Exibição do contador de tentativas
basic.showString("TENT:" + tentativas)
basic.pause(500)
basic.clearScreen()
// ============================================================
// VERIFICA A COMBINAÇÃO SECRETA PARA DESARMAR
// ============================================================
// O usuário precisa pressionar A e B SIMULTANEAMENTE
// por 3 segundos contínuos.
// ============================================================
if (input.buttonIsPressed(Button.A) && input.buttonIsPressed(Button.B)) {
// Inicia a contagem regressiva
basic.showString("3")
basic.pause(1000)
basic.showString("2")
basic.pause(1000)
basic.showString("1")
basic.pause(1000)
// Verifica se os botões continuam pressionados
if (input.buttonIsPressed(Button.A) && input.buttonIsPressed(Button.B)) {
// ✅ DESARMADO COM SUCESSO!
alarmeAtivo = false
invasaoDetectada = false
basic.showString("DESARM")
basic.pause(500)
basic.showIcon(IconNames.Happy)
basic.pause(1000)
} else {
// ❌ FALHA NO DESARME - botões foram soltos
basic.showString("FALHA")
basic.pause(500)
// O alarme continua
}
}
// Verifica se o alarme está ativo e se houve nova tentativa de invasão
if (alarmeAtivo && input.isGesture(Gesture.Shake)) {
tentativas = tentativas + 1
basic.showString("INVASAO")
basic.pause(500)
}
}
}
// ================================================================
// FUNÇÃO: ativarBloqueio()
// ================================================================
function ativarBloqueio() {
bloqueioAtivo = true
tempoBloqueio = 60 // 60 segundos de bloqueio
basic.showString("BLOQ 60s")
while (tempoBloqueio > 0) {
basic.showNumber(tempoBloqueio)
basic.pause(1000)
tempoBloqueio = tempoBloqueio - 1
}
bloqueioAtivo = false
basic.showString("LIBERADO")
basic.pause(500)
}
// ================================================================
// FUNÇÃO: nivelTensao()
// ================================================================
// Mostra o nível de tensão baseado nas tentativas
// ================================================================
function nivelTensao() {
if (tentativas == 0) {
basic.showString("SEGURO")
} else if (tentativas <= 3) {
basic.showString("ATENCAO")
} else if (tentativas <= 6) {
basic.showString("PERIGO")
} else {
basic.showString("CRITICO")
}
basic.pause(1000)
}
// ================================================================
// EVENTO DE GESTO "SHAKE" (Chacoalhar) - ATIVA ALARME
// ================================================================
input.onGesture(Gesture.Shake, function () {
// Verifica se já está em bloqueio
if (bloqueioAtivo) {
basic.showString("BLOQUEADO")
basic.pause(500)
return
}
// Verifica se o alarme já está ativo
if (alarmeAtivo) {
// Se já está ativo, incrementa o contador de tentativas
if (!invasaoDetectada) {
tentativas = tentativas + 1
basic.showString("INTRUSO!")
basic.pause(500)
}
return
}
// Se chegou aqui, ativa o alarme
if (!alarmeAtivo && tentativas < 10) {
dispararAlarme()
} else if (tentativas >= 10) {
// 🚨 SISTEMA DE BLOQUEIO DE SEGURANÇA
basic.showString("BLOQ AUTO")
basic.pause(500)
ativarBloqueio()
}
})
// ================================================================
// EVENTO DO BOTÃO A - MOSTRA ESTADO DO ALARME
// ================================================================
input.onButtonPressed(Button.A, function () {
if (alarmeAtivo) {
basic.showString("ALARME ON")
basic.pause(500)
} else if (bloqueioAtivo) {
basic.showString("BLOQUEADO")
basic.pause(500)
} else {
basic.showString("ALARME OFF")
basic.pause(500)
nivelTensao()
}
})
// ================================================================
// EVENTO DO BOTÃO B - MOSTRA STATUS DE SEGURANÇA
// ================================================================
input.onButtonPressed(Button.B, function () {
if (alarmeAtivo) {
basic.showString("INVASÃO!")
basic.pause(500)
basic.showNumber(tentativas)
basic.pause(500)
} else if (bloqueioAtivo) {
basic.showString("BLOQ:" + tempoBloqueio + "s")
basic.pause(1000)
} else {
basic.showString("SEGURANÇA")
basic.pause(500)
basic.showNumber(tentativas)
basic.pause(500)
}
})
// ================================================================
// EVENTO DOS BOTÕES A+B - DESARME EMERGENCIAL
// ================================================================
input.onButtonPressed(Button.AB, function () {
if (alarmeAtivo) {
// Tenta desarmar
basic.showString("DESARM?")
basic.pause(500)
basic.showString("3s HOLD")
basic.pause(500)
// Aguarda 3 segundos
let timer = 0
while (timer < 3 && input.buttonIsPressed(Button.A) && input.buttonIsPressed(Button.B)) {
timer = timer + 1
basic.showNumber(3 - timer)
basic.pause(1000)
}
// Verifica se os botões ainda estão pressionados
if (input.buttonIsPressed(Button.A) && input.buttonIsPressed(Button.B) && timer >= 3) {
alarmeAtivo = false
invasaoDetectada = false
basic.showString("DESARM")
basic.pause(500)
basic.showIcon(IconNames.Happy)
basic.pause(500)
} else {
basic.showString("FALHA")
basic.pause(500)
}
} else {
// Mostra estado atual
basic.showString("PRONTO")
basic.pause(500)
nivelTensao()
}
})
// ================================================================
// LOOP INFINITO - MONITORAMENTO CONTÍNUO
// ================================================================
basic.forever(function () {
// Monitora movimentos suspeitos mesmo com alarme desarmado
if (!alarmeAtivo && !bloqueioAtivo) {
let x = input.acceleration(Dimension.X)
let y = input.acceleration(Dimension.Y)
let z = input.acceleration(Dimension.Z)
// Detecta movimentos bruscos (possível invasão)
if (Math.abs(x) > 800 || Math.abs(y) > 800 || Math.abs(z) > 800) {
if (tentativas < 10) {
dispararAlarme()
} else {
ativarBloqueio()
}
}
}
basic.pause(100)
})
// 🚀 INICIALIZAÇÃO
basic.showString("GUARDA")
basic.pause(500)
basic.showIcon(IconNames.Heart)
basic.pause(500)
basic.showString("PRONTO")
🧪 COMO TESTAR NO HARDWARE
- Carregue o código no micro:bit seguindo os passos da seção anterior.
- Desconecte o USB e coloque o suporte de pilhas (simule uma situação real).
- Esconda o micro:bit dentro de uma caixa ou gaveta.
- Chacoalhe a caixa - o alarme ativa com efeitos visuais intensos.
- Abra a caixa - a tela está piscando "INTRUSO!" com padrões de alerta.
- Pressione A+B por 3 segundos - o alarme desarma com sucesso.
- Chacoalhe novamente - o alarme reativa.
- Tente invadir 10 vezes - o sistema entra em bloqueio automático.
🏆 DESAFIO EXTRA "O Guarda-Costas Avançado"
Desafio: Melhore o guarda-costas com funcionalidades avançadas!
- Contador de tentativas: Mostre quantas vezes alguém tentou invadir.
- Nível de tensão: Crie um sistema que mostra o nível de perigo baseado nas tentativas.
- Bloqueio automático: Após 10 tentativas falhas, bloqueie o desarme por 60 segundos.
- Sistema de emergência: Crie um código especial (ex: A, A, B, B) para desarme rápido.
- Registro de invasões: Armazene a hora (contagem) de cada tentativa de invasão.
Versão Insana:
- Adicione um "modo pânico" onde o micro:bit vibra (usando o acelerômetro) e pisca freneticamente.
- Crie um sistema de "alarme sonoro" usando o display para simular uma sirene.
- Implemente um "código de segurança em cascata" onde o usuário precisa de múltiplas combinações para desarmar.
🧠 ANÁLISE DO DESAFIO (O QUE VOCÊ APRENDEU)
| Conceito | Como foi aplicado | O que você dominou |
|---|---|---|
| Detecção de movimento | Acelerômetro para detectar invasões | Sensores de movimento em sistemas de segurança |
| Estados de máquina | Alarmes, desarmado, bloqueado | Máquinas de estado finito (FSM) |
| Controle de tempo | Pausas, temporizadores, contagem regressiva | Temporização em sistemas críticos |
| Lógica condicional | if/else para decisões |
Tomada de decisão em código |
| Interação usuário | Botões para controle | Interfaces homem-máquina |
| Sistema de segurança | Código secreto, bloqueio, tentativas | Princípios básicos de segurança digital |
📚 PARTE 8: GLOSSÁRIO INSANO DO APRENDIZ DE HACKER
| Termo | Significado | Analogia |
|---|---|---|
| .hex | O arquivo mágico que o micro:bit entende | É o seu código em esteroides, transformado em linguagem de máquina |
| Simulador | O micro:bit virtual que roda seu código sem hardware | Seu campo de treinamento virtual - onde os erros não quebram nada |
| Acelerômetro | Sensor que detecta movimento e inclinação | O "sentido aranha" do micro:bit - sabe quando você mexe nele |
| Pino | Os contatos metálicos na parte de baixo do micro:bit | As portas de conexão - onde a mágica acontece |
| GND | O "chão" do circuito. Por onde a corrente volta para casa | O "caminho de casa" da eletricidade |
| BNCC | Base Nacional Comum Curricular - Diretrizes educacionais brasileiras | O mapa do tesouro da educação brasileira |
| RCP-PR | Referencial Curricular do Paraná - Versão estadual da BNCC | A versão paranaense do mapa - com pitadas de pinhão |
| Loop | Estrutura que repete um bloco de código várias vezes | O DJ que nunca para de tocar a mesma música |
| Evento | Ação que dispara um código quando acontece | O gatilho que faz a mágica acontecer |
| Variável | Um "caixa" onde você guarda valores | O armário onde você guarda os números e textos |
| Algoritmo | Sequência de passos para resolver um problema | A receita de bolo digital |
| Depuração (Debug) | Processo de encontrar e corrigir erros | O jogo de detetive com seu código |
⚡ PARTE 9: CHECKLIST DE RESOLUÇÃO DE PROBLEMAS
| Sintoma | Causa Provável | Correção Rápida | Nível de Pânico |
|---|---|---|---|
| O micro:bit não aparece no computador | Cabo USB não transfere dados | Troque o cabo USB | 😱😱😱 |
| A tela não mostra nada | Código não foi carregado | Baixe o .hex e copie novamente | 😱😱 |
| O micro:bit não responde | Código travou | Pressione o botão de reset atrás da placa | 😱😱😱 |
| As leituras estão inconsistentes | Acelerômetro não calibrado | Deixe o micro:bit parado por alguns segundos | 😱 |
| Os LEDs estão fracos | Pilhas fracas | Substitua as pilhas AAA | 😱 |
| O código não compila | Erro de sintaxe | Verifique se faltou algum } ou ) |
😱😱 |
| O simulador não roda | Código com erro | Leia a mensagem de erro no console | 😱😱 |
| O alarme não desarma | Código secreto errado | Verifique a lógica de desarme | 😱😱😱 |
| O micro:bit não liga | Pilhas mal colocadas | Verifique a orientação das pilhas | 😱😱😱 |
🎯 PARTE 10: O GRITO DE GUERRA
Pronto, soldado! Você sobreviveu ao manual mais insano do MakeCode. Você não apenas aprendeu a programar; você dominou a arte de transformar hardware simples em sistemas complexos. Você é agora um verdadeiro Mestre da Gambiarra Digital.
O QUE VOCÊ CONQUISTOU:
- ✅ Entendeu o que é a BNCC e o RCP-PR e como eles se aplicam ao micro:bit
- ✅ Criou uma conta no MakeCode - a primeira infiltração
- ✅ Logou na ferramenta - estabelecendo sua base de operações
- ✅ Programou em JavaScript no MakeCode - sem bloquinhos, sem frescuras
- ✅ Controlou a matriz de LEDs - a tela do seu universo digital
- ✅ Leu botões e o acelerômetro - entendendo o que o mundo faz com seu código
- ✅ Carregou código no hardware real - trazendo suas criações à vida
- ✅ 6 projetos de simulação - do zero absoluto ao mestre do virtual
- ✅ 6 projetos de hardware - mão na massa, suor e código
- ✅ Um desafio hacker final - para impressionar seus amigos e provar seu valor
- ✅ Sistema de segurança completo - com contador de tentativas e bloqueio
🚀 A JORNADA CONTINUA...
Lembre-se: você não está apenas programando um micro:bit. Você está:
- Aprendendo a pensar de forma lógica e estruturada
- Desenvolvendo resiliência - cada erro é um passo mais perto do sucesso
- Criando habilidades que vão além da programação - resolução de problemas, criatividade, persistência
- Se tornando um criador - não apenas um consumidor de tecnologia
💀 A ÚLTIMA PALAVRA DO GUERREIRO
"A eletrônica não é sobre componentes - é sobre criatividade. O hardware é apenas a tela; o software é a pintura. E você, guerreiro, é o artista."
Mãos à obra, mestre da gambiarra! O futuro da eletrônica está em suas mãos (e no seu micro:bit)!
Que a força (e a corrente elétrica) esteja com você! ⚡🤖
"Programar não é sobre saber tudo - é sobre ter coragem de descobrir."
📋 PARTE 11: MAPA DE HABILIDADES BNCC E RCP-PR
| Projeto | Código BNCC | Código RCP-PR | Habilidade |
|---|---|---|---|
| Coração Pulsante | EF07CI04, EF08CI03 | PR.EF07CI04.s.7.27, PR.EF08CI03.s.8.09 | Avaliar equilíbrio termodinâmico e classificar transformações de energia |
| Detector de Fofoca | EF07CI05, EF08CI04 | PR.EF07CI05.s.7.31, PR.EF08CI04.s.8.13 | Interação homem-tecnologia e sistemas de controle |
| Dado Eletrônico | EF07CI08, EF09CI03, EM13CNT303 | PR.EF07CI08.s.7.39, PR.EF09CI03.s.9.07, PR.EM13CNT303 | Probabilidade, modelos da matéria e interpretação científica |
| Desenho na Matriz | EF08CI03, EM13CNT101 | PR.EF08CI03.s.8.09, PR.EM13CNT101 | Transformações de energia e representação de sistemas |
| Termômetro Digital | EF07CI04, EM13CNT102 | PR.EF07CI04.s.7.27, PR.EM13CNT102 | Equilíbrio termodinâmico e construção de protótipos |
| Bússola de Bolso | EF08CI03, EF09CI03, EM13CNT303, EM13CNT104 | PR.EF08CI03.s.8.09, PR.EF09CI03.s.9.07, PR.EM13CNT303, PR.EM13CNT104 | Sensores, modelos e sistemas tecnológicos |
| Cronômetro Digital | EF07CI05, EF08CI04, EM13CNT102 | PR.EF07CI05.s.7.31, PR.EF08CI04.s.8.13, PR.EM13CNT102 | Interação, controle e prototipagem |
| Nível de Bolha | EF09CI04, EF09CI10, EM13CNT110 | PR.EF09CI04.s.9.13, PR.EF09CI10.s.9.37, PR.EM13CNT110 | Sensores e sistemas de medição |
| Alarme de Movimento | EF08CI04, EF08CI06, EM13CNT106 | PR.EF08CI04.s.8.13, PR.EF08CI06.s.8.23, PR.EM13CNT106 | Sistemas de controle e segurança |
| Sintetizador Musical | EF08CI03, EM13CNT108 | PR.EF08CI03.s.8.09, PR.EM13CNT108 | Transformação de energia (elétrica → sonora) |
| Guarda-Costas Digital | EF08CI04, EF08CI06, EM13CNT106, EM13CNT303 | PR.EF08CI04.s.8.13, PR.EF08CI06.s.8.23, PR.EM13CNT106, PR.EM13CNT303 | Sistemas de segurança, controle e comunicação científica |
| Sistema de Humor | EF08CI03, EM13CNT101, EM13CNT104 | PR.EF08CI03.s.8.09, PR.EM13CNT101, PR.EM13CNT104 | Representação de sistemas e modelos |
| Sistema SOS | EF09CI03, EM13CNT101, EM13CNT303 | PR.EF09CI03.s.9.07, PR.EM13CNT101, PR.EM13CNT303 | Comunicação científica e modelos |
🎬 EPÍLOGO: O FUTURO É SEU
Você agora possui as ferramentas, o conhecimento e a coragem para criar qualquer coisa que sua imaginação conceber. O micro:bit é apenas o começo - o primeiro passo em uma jornada que pode te levar a criar robôs, sistemas de automação, dispositivos IoT e muito mais.
Lembre-se:
- 🌟 Cada grande programador começou onde você está
- 🌟 Cada erro é uma oportunidade de aprendizado
- 🌟 Cada projeto terminado é uma vitória
- 🌟 Cada linha de código é um passo em direção ao seu futuro
Agora vá e crie coisas incríveis! 🚀
Que o código esteja com você! ⚡🤖
FIM DO MANUAL