← Mundo bit Byte

Arduino

Professor Ronaldo Lavestein
Fundamentos de Eletricidade, Eletrônica e Arduino

Bem-vindo ao mundo Arduino

Você está começando uma jornada prática em que programação, eletricidade e eletrônica trabalham juntas. A partir daqui, o código deixa de ficar apenas na tela e passa a controlar componentes físicos reais: LEDs, botões, buzzers, potenciômetros, sensores e atuadores.

Programa
Pino
Sinal elétrico
Ação física

1. O que é o Arduino?

O Arduino é uma plataforma de prototipagem eletrônica. Na prática, ele funciona como um pequeno computador programável especializado em interagir com o mundo físico.

Em vez de trabalhar apenas com teclado, mouse e monitor, ele pode ler sinais de sensores e controlar componentes como LEDs, buzzers, motores e displays.

2. Sistema embarcado

Um sistema embarcado é um sistema eletrônico programado para executar uma tarefa específica.

SemáforoAlarmeCarroRobóticaAutomação

3. Software controlando hardware

O programa enviado ao Arduino define o que os pinos devem fazer: enviar sinal, ler sinal, ligar, desligar, medir ou controlar algum componente.

5V alimentação positiva usada em muitos circuitos simples.
GND referência negativa e caminho de retorno da corrente.
Resistor limita a corrente e protege componentes como LEDs.
Protoboard permite montar circuitos sem solda, usando trilhas internas.

4. Como a eletricidade percorre o circuito

Para um componente funcionar, a corrente precisa percorrer um caminho fechado. Em muitos projetos iniciais, esse caminho começa no 5V ou em um pino digital, passa pelo componente e retorna ao GND.

5V / PinoComponenteGND

5. Entrada e saída

Entrada é aquilo que envia informação para o Arduino, como um botão ou potenciômetro. Saída é aquilo que o Arduino controla, como LED ou buzzer.

Entradasbotão, potenciômetro, sensores
SaídasLED, buzzer, motor, display

6. Digital e analógico

Um sinal digital trabalha com dois estados: HIGH ou LOW, ligado ou desligado. Um sinal analógico pode variar gradualmente dentro de uma faixa de valores.

7. PWM

PWM é uma técnica que liga e desliga um sinal muito rapidamente para simular níveis intermediários. É assim que o Arduino consegue controlar o brilho de um LED em pinos PWM.

Pulsos rápidosbrilho variável

Como os projetos irão evoluir

A sequência foi organizada para que cada projeto acrescente uma ideia nova sem abandonar o que já foi aprendido.

LED protegido Blink Botão com LED Buzzer Potenciômetro com PWM Fotoresistor (LDR) Sensor de distância LED RGB Servo Motor

Preparação para a prática

A partir do primeiro projeto, cada montagem irá unir eletricidade, eletrônica e programação. O LED protegido será o ponto de partida: simples, visual e essencial para entender circuito fechado, polaridade e proteção por resistor.

Eletricidade + Eletrônica + Programação = Automação

Fundamentos elétricos e primeiros circuitos

Antes de começar a programar o Arduino, é importante entender como a eletricidade percorre um circuito e como os componentes eletrônicos trabalham juntos.

Analogia da água

Uma forma simples de entender tensão, corrente e resistência é imaginar a eletricidade como água passando por um cano.

Analogia hidráulica

A tensão elétrica funciona como a força que empurra a água. A corrente elétrica representa o fluxo em movimento. Já a resistência elétrica dificulta a passagem da corrente.

Tensão, corrente e resistência

Tensão corrente e resistência

A tensão elétrica é medida em volts. A corrente elétrica é medida em ampere. A resistência elétrica é medida em ohms.

Fluxo de elétrons

Para que a corrente elétrica passe pelo circuito, ele precisa estar fechado.

Lei de Ohm

Lei de Ohm

A Lei de Ohm relaciona tensão, corrente e resistência elétrica. Ela será utilizada frequentemente nos projetos com Arduino.

LED e resistor

LED e resistores

O resistor limita a corrente elétrica e protege o LED.

LED sem resistor

Quando o LED é ligado diretamente em uma bateria sem resistor, ele pode ser danificado devido ao excesso de corrente elétrica.

Polaridade do LED

Polaridade do LED

O LED possui polaridade. O terminal maior normalmente representa o positivo. O menor representa o negativo.

Circuitos em série e paralelo

Circuito em série e paralelo

No circuito em série, os componentes ficam no mesmo caminho da corrente elétrica. Se um componente falhar, o circuito para de funcionar.

No circuito em paralelo, existem ramificações diferentes. Assim, uma parte do circuito pode continuar funcionando mesmo que outra apresente problema.

Componentes que serão utilizados nos projetos

Kit de componentes

Ao longo dos projetos, serão utilizados LEDs, resistores, botões, sensores, buzzer, potenciômetro, display e diversos outros componentes eletrônicos.

Primeiros passos no Tinkercad

O Tinkercad será utilizado para montar, testar e simular os circuitos eletrônicos.

  1. Acesse o site tinkercad.com
  2. Clique em inscrever-se
  3. Crie uma conta pessoal
  4. Entre com sua conta Google
  5. Clique em criar
  6. Escolha a opção circuitos
  7. Arraste os componentes para a área de trabalho
  8. Utilize fios para interligar os componentes
  9. Clique em iniciar simulação
Ambiente Tinkercad

No ambiente Tinkercad é possível movimentar componentes, criar circuitos, alterar fios e testar montagens eletrônicas.

Código no Tinkercad

Além da montagem dos circuitos, o Tinkercad também permite programar placas Arduino e executar simulações em tempo real.

P1

Projeto 1 — LED protegido

O Arduino funciona apenas como fonte de 5V e GND para alimentar o LED protegido por resistor.

Montagem do circuito

Projeto 1 — LED protegido: o Arduino Uno R3 fornece 5V e GND aos barramentos da protoboard; o resistor de 300 Ω fica em série com o LED.
Projeto 1 — LED protegido: o Arduino Uno R3 fornece 5V e GND aos barramentos da protoboard; o resistor de 300 Ω fica em série com o LED.

1. Objetivo do projeto

Montar um circuito simples com LED protegido por resistor, usando o Arduino Uno R3 apenas como fonte de alimentação. Na imagem, o Arduino fornece 5V ao barramento positivo da protoboard e GND ao barramento negativo. O LED acende continuamente porque há um caminho elétrico fechado passando pelo resistor de 300 Ω e pelo LED.

2. Lista exata de componentes

  • 1 Arduino Uno R3
  • 1 cabo USB para alimentar o Arduino
  • 1 protoboard
  • 1 LED comum de 5 mm
  • 1 resistor de 300 Ω
  • 2 jumpers macho-macho

3. Tabela de ligação

Ponto inicialPonto finalObservação
Pino 5V do ArduinoBarramento positivo da protoboardFio vermelho da imagem; fornece alimentação positiva ao circuito.
Pino GND do ArduinoBarramento negativo da protoboardFio preto da imagem; fornece a referência negativa do circuito.
Barramento positivo da protoboardUma extremidade do resistor de 300 ΩO resistor recebe alimentação positiva a partir do trilho positivo.
Outra extremidade do resistorAnodo do LEDO resistor fica em série antes do LED, limitando a corrente.
Catodo do LEDBarramento negativo da protoboardFecha o caminho de retorno até o GND.

4. Explicação da montagem

Na imagem, o Arduino não controla nenhum pino digital. Ele é usado somente como fonte de energia. O fio vermelho leva o 5V do Arduino até o barramento positivo da protoboard. O fio preto leva o GND do Arduino até o barramento negativo.

A partir do barramento positivo, a corrente passa pelo resistor de 300 Ω, depois entra no anodo do LED. O catodo do LED retorna ao barramento negativo, fechando o circuito no GND.

O caminho elétrico representado na imagem é: 5V → barramento positivo → resistor de 300 Ω → LED → barramento negativo → GND.

5. Descrição textual do circuito visual

A imagem mostra o Arduino Uno R3 à direita e a protoboard à esquerda. O fio vermelho sai do pino 5V do Arduino e alimenta o barramento positivo da protoboard. O fio preto sai do GND do Arduino e chega ao barramento negativo. O resistor de 300 Ω está em série com o LED. A polaridade do LED deve ser respeitada: o anodo recebe o sinal que vem do resistor e o catodo retorna ao GND.

Neste projeto, não há ligação em pinos digitais, pois o Arduino funciona apenas como fonte de alimentação.

6. Código completo

// Projeto 1: LED protegido
// Neste projeto, o Arduino Uno R3 funciona apenas como fonte de 5V.
// Não há programação funcional obrigatória.

void setup() {
  // Nenhuma configuração é necessária neste projeto.
}

void loop() {
  // Nenhum comando é necessário neste projeto.
}

7. Explicação linha por linha

// Projeto 1: LED protegido — comentário com o nome do projeto.

// Neste projeto... — explica que o Arduino não controlará o LED por programação.

void setup() — função executada uma única vez quando o Arduino liga.

// Nenhuma configuração... — indica que nenhum pino será configurado.

void loop() — função que normalmente se repete continuamente.

// Nenhum comando... — reforça que o funcionamento depende apenas da montagem elétrica.

8. O que foi trabalhado

  • Alimentação de 5V do Arduino
  • Uso do GND como referência elétrica
  • Polaridade do LED
  • Resistor em série
  • Proteção contra excesso de corrente
  • Circuito elétrico fechado
  • Diferença entre montagem elétrica e programação

9. Resultado esperado

Ao conectar o Arduino ao computador pelo cabo USB, o LED deve acender continuamente. Ele não pisca e não depende do código, porque está alimentado diretamente pelo 5V do Arduino através do resistor de 300 Ω.

10. Erros comuns

ErroConsequência
Ligar o LED sem resistorPode queimar o LED.
Inverter anodo e catodo do LEDO LED não acende.
Ligar 5V diretamente no GNDGera curto-circuito perigoso.
Colocar o resistor em uma linha que não esteja conectada ao LEDO circuito fica aberto e o LED não funciona.
Não ligar o GND do Arduino ao barramento negativoNão há caminho completo para a corrente retornar.
Confundir os barramentos positivo e negativo da protoboardO circuito pode não funcionar ou pode ser ligado de forma incorreta.

11. Exercício proposto

Monte o circuito do LED protegido usando resistor de 300 Ω. Depois, com o Arduino desligado, inverta o LED na protoboard e ligue novamente. Por que o LED acende em uma posição e não acende na outra?

P2

Projeto 2 — Blink com LED externo

O LED externo deixa de ser ligado diretamente ao 5V e passa a ser controlado pelo pino digital 8.

Montagem do circuito

Projeto 2 — Blink: o pino digital 8 controla o LED externo; o retorno do circuito é feito pelo GND da protoboard.
Projeto 2 — Blink: o pino digital 8 controla o LED externo; o retorno do circuito é feito pelo GND da protoboard.

1. Objetivo do projeto

Fazer um LED externo piscar usando o pino digital 8 do Arduino Uno R3. No Projeto 1, o LED acendia porque estava ligado diretamente ao 5V. Neste projeto, o LED pisca porque o Arduino controla o pino digital por programação.

2. Lista exata de componentes

  • 1 Arduino Uno R3
  • 1 cabo USB
  • 1 protoboard
  • 1 LED comum de 5 mm
  • 1 resistor de 300 Ω
  • 2 jumpers macho-macho

3. Tabela de ligação

Ponto inicialPonto finalObservação
Pino digital 8 do ArduinoUma extremidade do resistor de 300 ΩFio vermelho da imagem; agora o LED é alimentado pelo pino digital, não pelo 5V direto.
Outra extremidade do resistorAnodo do LEDO resistor fica em série antes do LED.
Catodo do LEDBarramento negativo da protoboardRetorno do LED para o GND.
Barramento negativo da protoboardPino GND do ArduinoFio preto da imagem; fecha o circuito elétrico.

4. Explicação da montagem

Na imagem, o fio vermelho não vem do pino 5V. Ele sai do pino digital 8 do Arduino e chega à região do resistor na protoboard. O resistor de 300 Ω fica em série com o LED, protegendo-o contra excesso de corrente.

O catodo do LED retorna ao barramento negativo da protoboard, e esse barramento está ligado ao GND do Arduino pelo fio preto. Assim, o caminho do LED é: pino digital 8 → resistor de 300 Ω → LED → GND.

Quando o código coloca o pino 8 em HIGH, o LED acende. Quando coloca em LOW, o LED apaga.

5. Descrição textual do circuito visual

A imagem deve ser lida da seguinte forma: o Arduino Uno R3 fica à direita, a protoboard à esquerda, o fio vermelho sai do pino digital 8 e vai até o resistor de 300 Ω. O resistor está em série com o LED. O retorno do LED é feito para o barramento negativo da protoboard, que está ligado ao GND do Arduino pelo fio preto.

Este circuito visual mostra claramente a transição do Projeto 1 para o Projeto 2: agora o LED não recebe 5V fixo; ele recebe comando do pino digital 8.

6. Código completo

// Projeto 2: Blink com LED externo
// O LED será controlado pelo pino digital 8 do Arduino.

int pinoLed = 8;

void setup() {
  pinMode(pinoLed, OUTPUT);
}

void loop() {
  digitalWrite(pinoLed, HIGH);
  delay(1000);

  digitalWrite(pinoLed, LOW);
  delay(1000);
}

7. Explicação linha por linha

int pinoLed = 8; — cria uma variável com o número do pino usado no circuito.

pinMode(pinoLed, OUTPUT); — configura o pino 8 como saída.

digitalWrite(pinoLed, HIGH); — envia tensão pelo pino 8 e acende o LED.

delay(1000); — mantém o LED aceso por 1 segundo.

digitalWrite(pinoLed, LOW); — para de enviar tensão pelo pino 8 e apaga o LED.

delay(1000); — mantém o LED apagado por 1 segundo.

loop() — repete o ciclo continuamente.

8. O que foi trabalhado

  • Uso de pino digital como saída
  • Controle de LED por programação
  • Diferença entre ligação direta no 5V e controle por pino digital
  • Variável inteira para representar o pino usado
  • pinMode()
  • digitalWrite()
  • HIGH e LOW
  • delay()
  • Repetição contínua com loop()
  • Resistor em série para proteger o LED

9. Resultado esperado

Ao enviar o código para o Arduino, o LED externo deve acender por 1 segundo, apagar por 1 segundo e repetir esse comportamento continuamente.

10. Erros comuns

ErroConsequência
Ligar o LED no 5V em vez do pino 8O LED fica sempre aceso e não obedece ao código.
Usar pino diferente no circuito e no códigoO LED não pisca como esperado.
Esquecer o resistor de 300 ΩPode queimar o LED.
Inverter o LEDO LED não acende.
Não ligar o retorno ao GNDO circuito fica aberto e o LED não funciona.
Colocar resistor e LED em linhas desconectadas da protoboardO caminho elétrico não se completa.

11. Exercício proposto

Altere o tempo do pisca-pisca trocando delay(1000); por delay(300);. O LED pisca mais rápido ou mais devagar? Por quê?

P3

Projeto 3 — Botão com LED

O botão é lido no pino digital 2 e o LED é acionado pelo pino digital 8 somente enquanto o botão estiver pressionado.

Montagem do circuito

Projeto 3 — Botão com LED: LED no pino 8 e botão no pino 2 usando INPUT_PULLUP, com o botão ligado ao GND quando pressionado.
Projeto 3 — Botão com LED: LED no pino 8 e botão no pino 2 usando INPUT_PULLUP, com o botão ligado ao GND quando pressionado.

1. Objetivo do projeto

Fazer um botão controlar um LED. O LED deve acender somente enquanto o botão estiver pressionado. O aluno deve compreender entrada digital, saída digital, leitura de botão, digitalRead(), if/else e a lógica do INPUT_PULLUP.

2. Lista exata de componentes

  • 1 Arduino Uno R3
  • 1 cabo USB
  • 1 protoboard
  • 1 LED comum de 5 mm
  • 1 resistor de 300 Ω para o LED
  • 1 botão tátil de 4 terminais
  • jumpers macho-macho

3. Tabela de ligação

Parte do circuitoPonto inicialPonto finalObservação
LEDPino digital 8 do ArduinoResistor de 300 ΩSaída digital que controla o LED.
LEDResistor de 300 ΩAnodo do LEDResistor em série para limitar a corrente.
LEDCatodo do LEDGND do Arduino / barramento negativoFecha o circuito do LED.
BotãoUm terminal do botãoPino digital 2 do ArduinoEntrada digital lida pelo programa.
BotãoTerminal oposto do botãoGNDCom INPUT_PULLUP, pressionar o botão liga o pino 2 ao GND.

4. Explicação da montagem

A parte do LED segue a mesma lógica do Blink: o pino digital 8 alimenta o resistor de 300 Ω, o resistor vai ao anodo do LED e o catodo retorna ao GND.

Na imagem, o botão tátil está atravessando o vão central da protoboard. Essa posição é importante para evitar que os terminais fiquem ligados de forma errada. Um lado do botão está ligado ao pino digital 2; o lado oposto está ligado ao GND.

Como o código usa INPUT_PULLUP, não é necessário resistor externo no botão. O Arduino mantém o pino 2 em HIGH quando o botão está solto. Quando o botão é pressionado, ele conecta o pino 2 ao GND, e a leitura passa a ser LOW.

5. Descrição textual do circuito visual

A imagem mostra dois circuitos simples funcionando juntos. O primeiro é a saída: LED no pino digital 8, com resistor de 300 Ω em série e retorno ao GND. O segundo é a entrada: botão tátil na protoboard, com um lado ligado ao pino digital 2 e o outro lado ligado ao GND.

O desenho precisa deixar claro que o botão não recebe 5V diretamente. Ele trabalha com o resistor interno de pull-up do Arduino. Por isso, neste projeto, botão pressionado significa leitura LOW.

6. Código completo

// Projeto 3: Botão com LED
// O LED acende somente enquanto o botão estiver pressionado.
// O botão usa INPUT_PULLUP, portanto pressionado = LOW.

int pinoLed = 8;
int pinoBotao = 2;

void setup() {
  pinMode(pinoLed, OUTPUT);
  pinMode(pinoBotao, INPUT_PULLUP);
}

void loop() {
  int estadoBotao = digitalRead(pinoBotao);

  if (estadoBotao == LOW) {
    digitalWrite(pinoLed, HIGH);
  } else {
    digitalWrite(pinoLed, LOW);
  }
}

7. Explicação linha por linha

int pinoLed = 8; — guarda o pino usado pelo LED.

int pinoBotao = 2; — guarda o pino usado pelo botão.

pinMode(pinoLed, OUTPUT); — configura o LED como saída digital.

pinMode(pinoBotao, INPUT_PULLUP); — configura o botão como entrada e ativa o resistor interno de pull-up.

digitalRead(pinoBotao); — lê HIGH ou LOW no pino do botão.

if (estadoBotao == LOW) — verifica se o botão está pressionado, pois com INPUT_PULLUP pressionado = LOW.

digitalWrite(pinoLed, HIGH); — liga o LED enquanto o botão está pressionado.

else / digitalWrite(pinoLed, LOW); — desliga o LED quando o botão está solto.

8. O que foi trabalhado

  • Entrada digital
  • Saída digital
  • Diferença entre entrada e saída
  • Botão como sensor simples
  • LED como atuador simples
  • digitalRead()
  • digitalWrite()
  • INPUT_PULLUP
  • Lógica invertida do botão com pull-up interno
  • if/else
  • HIGH e LOW
  • Circuito sem resistor externo para o botão
  • GND comum para referência elétrica

9. Resultado esperado

Com o Arduino ligado e o código enviado, o LED fica apagado quando o botão está solto, acende enquanto o botão está pressionado e apaga novamente ao soltar.

10. Erros comuns

ErroConsequência
Colocar o botão sem atravessar corretamente o vão centralO botão pode ficar sempre ligado ou nunca funcionar.
Ligar os dois fios no mesmo lado elétrico do botãoO pino 2 pode ficar sempre em LOW ou nunca mudar.
Esperar que botão pressionado seja HIGHA lógica fica invertida, pois com INPUT_PULLUP pressionado = LOW.
Usar INPUT em vez de INPUT_PULLUPO botão pode apresentar leitura flutuante.
Trocar os pinos 2 ou 8 no circuito sem alterar o códigoO botão ou o LED não funcionam.
Esquecer o resistor do LEDPode queimar o LED.

11. Exercício proposto

Altere o comportamento para o contrário: botão solto = LED aceso; botão pressionado = LED apagado. Por que, neste circuito com INPUT_PULLUP, o botão pressionado é lido como LOW?

P4

Projeto 4 — Buzzer

O buzzer ativo é controlado pelo pino digital 8, emitindo som intermitente por programação.

Montagem do circuito

Projeto 4 — Buzzer: buzzer ativo ligado ao pino digital 8 e ao GND, funcionando como saída sonora.
Projeto 4 — Buzzer: buzzer ativo ligado ao pino digital 8 e ao GND, funcionando como saída sonora.

1. Objetivo do projeto

Fazer o Arduino controlar um buzzer ativo, emitindo som de forma intermitente. Na imagem, o buzzer está ligado diretamente entre o pino digital 8 e o GND. O aluno deve perceber que o buzzer é uma saída sonora, assim como o LED era uma saída visual.

2. Lista exata de componentes

  • 1 Arduino Uno R3
  • 1 cabo USB
  • 1 protoboard
  • 1 buzzer ativo 5V
  • 2 jumpers macho-macho

3. Tabela de ligação

Ponto inicialPonto finalObservação
Terminal positivo (+) do buzzer ativoPino digital 8 do ArduinoFio vermelho da imagem; saída controlada pelo programa.
Terminal negativo (-) do buzzer ativoPino GND do ArduinoFio preto da imagem; fecha o circuito elétrico.

4. Explicação da montagem

Na imagem, o buzzer ativo está colocado na protoboard. O terminal positivo, indicado pelo símbolo +, é ligado ao pino digital 8 do Arduino. O terminal negativo, indicado pelo símbolo -, é ligado ao GND.

O caminho elétrico é simples: pino digital 8 → buzzer ativo → GND. Quando o programa aciona o pino 8 com tone(), o buzzer emite som. Quando o programa executa noTone(), o som é interrompido.

5. Descrição textual do circuito visual

A imagem mostra o Arduino Uno R3 à direita e a protoboard à esquerda. O buzzer ativo aparece com polaridade identificada. O fio vermelho liga o terminal positivo do buzzer ao pino digital 8. O fio preto liga o terminal negativo ao GND. Não há LED nem resistor neste projeto.

O desenho deve destacar que o buzzer é uma saída sonora controlada por programação.

6. Código completo

// Projeto 4: Buzzer ativo
// O Arduino controla um buzzer no pino digital 8.
// O som liga e desliga de forma intermitente.

int pinoBuzzer = 8;

void setup() {
  pinMode(pinoBuzzer, OUTPUT);
}

void loop() {
  tone(pinoBuzzer, 1000);
  delay(1000);

  noTone(pinoBuzzer);
  delay(1000);
}

7. Explicação linha por linha

int pinoBuzzer = 8; — guarda o número do pino usado pelo buzzer.

pinMode(pinoBuzzer, OUTPUT); — configura o pino 8 como saída digital.

tone(pinoBuzzer, 1000); — aciona o buzzer no pino 8 usando frequência de 1000 Hz. Em buzzer ativo, serve principalmente como acionamento didático.

delay(1000); — mantém o som por 1 segundo.

noTone(pinoBuzzer); — interrompe o som no pino 8.

delay(1000); — mantém o buzzer em silêncio por 1 segundo.

loop() — repete som e silêncio continuamente.

8. O que foi trabalhado

  • Buzzer como dispositivo de saída
  • Diferença entre saída visual e saída sonora
  • Controle de som por programação
  • Pino digital como saída
  • tone()
  • noTone()
  • Controle de tempo com delay()
  • Repetição contínua com loop()
  • Polaridade do buzzer ativo
  • Ligação entre pino digital e GND

9. Resultado esperado

Ao enviar o código para o Arduino, o buzzer deve emitir som por 1 segundo, ficar em silêncio por 1 segundo e repetir continuamente.

10. Erros comuns

ErroConsequência
Inverter positivo e negativo do buzzerO buzzer pode não funcionar.
Ligar o positivo em pino diferente do códigoO buzzer não toca.
Esquecer o GNDO circuito não fecha.
Ligar o buzzer direto no 5VEle fica ligado continuamente, sem obedecer ao código.
Usar buzzer ativo esperando notas musicais precisasO controle de frequência pode não ser fiel, pois o buzzer ativo já possui oscilador interno.
Remover os delaysO som pode parecer contínuo ou rápido demais.

11. Exercício proposto

Troque os dois delay(1000); por delay(300);. O buzzer ficou mais rápido ou mais lento? O que o delay() está controlando neste projeto?

P5

Projeto 5 — Potenciômetro com PWM

O potenciômetro é lido no A0 e controla o brilho do LED ligado ao pino PWM 9.

Montagem do circuito

Projeto 5 — Potenciômetro com PWM: potenciômetro ligado a 5V, GND e A0; LED ligado ao pino PWM 9 com resistor de 300 Ω.
Projeto 5 — Potenciômetro com PWM: potenciômetro ligado a 5V, GND e A0; LED ligado ao pino PWM 9 com resistor de 300 Ω.

1. Objetivo do projeto

Controlar o brilho de um LED usando um potenciômetro de 10 kΩ. O aluno deve perceber a relação entre entrada analógica e saída PWM, usando analogRead(), map() e analogWrite().

2. Lista exata de componentes

  • 1 Arduino Uno R3
  • 1 cabo USB
  • 1 protoboard
  • 1 LED comum de 5 mm
  • 1 resistor de 300 Ω
  • 1 potenciômetro de 10 kΩ
  • jumpers macho-macho

3. Tabela de ligação

ComponentePonto inicialPonto finalObservação
PotenciômetroUm terminal lateral5V do ArduinoFio vermelho da imagem; alimenta uma extremidade do potenciômetro.
PotenciômetroOutro terminal lateralGND do ArduinoFio preto da imagem; fornece a referência negativa.
PotenciômetroTerminal centralPino analógico A0Fio amarelo da imagem; envia ao Arduino a tensão variável.
LEDPino PWM 9 do ArduinoResistor de 300 ΩSaída PWM que controla o brilho do LED.
LEDResistor de 300 ΩAnodo do LEDResistor em série com o LED.
LEDCatodo do LEDGNDFecha o circuito do LED.

4. Explicação da montagem

Na imagem, o potenciômetro está encaixado na protoboard e usa três ligações. Um terminal lateral vai ao 5V, o outro terminal lateral vai ao GND e o terminal central vai ao pino analógico A0. O terminal central é o cursor do potenciômetro: ele entrega ao Arduino uma tensão variável conforme o eixo é girado.

A parte do LED usa o pino PWM 9. O sinal sai do pino 9, passa pelo resistor de 300 Ω, entra no anodo do LED e retorna pelo catodo ao GND.

O Arduino lê o valor variável do potenciômetro no A0 com analogRead() e usa esse valor para controlar o brilho do LED no pino 9 com analogWrite().

5. Descrição textual do circuito visual

A imagem mostra dois blocos conectados ao Arduino. O primeiro bloco é a entrada analógica: potenciômetro de 10 kΩ com uma lateral em 5V, outra lateral em GND e terminal central no A0. O segundo bloco é a saída PWM: LED ligado ao pino 9, passando por resistor de 300 Ω e retornando ao GND.

O desenho deve deixar evidente que o potenciômetro não acende o LED diretamente. Ele envia uma leitura analógica ao Arduino, e o Arduino controla o brilho do LED por PWM.

6. Código completo

// Projeto 5: Potenciômetro com PWM
// O potenciômetro controla o brilho de um LED.
// Potenciômetro no A0 e LED no pino PWM 9.

int pinoPotenciometro = A0;
int pinoLed = 9;

int leituraPotenciometro = 0;
int brilhoLed = 0;

void setup() {
  pinMode(pinoLed, OUTPUT);
}

void loop() {
  leituraPotenciometro = analogRead(pinoPotenciometro);

  brilhoLed = map(leituraPotenciometro, 0, 1023, 0, 255);

  analogWrite(pinoLed, brilhoLed);
}

7. Explicação linha por linha

int pinoPotenciometro = A0; — representa o pino analógico usado pelo potenciômetro.

int pinoLed = 9; — representa o pino PWM usado pelo LED.

int leituraPotenciometro = 0; — guarda a leitura de 0 a 1023.

int brilhoLed = 0; — guarda o valor PWM de 0 a 255.

pinMode(pinoLed, OUTPUT); — configura o pino do LED como saída.

analogRead(pinoPotenciometro); — lê a tensão variável no A0 e converte em número de 0 a 1023.

map(leituraPotenciometro, 0, 1023, 0, 255); — converte a faixa da entrada analógica para a faixa do PWM.

analogWrite(pinoLed, brilhoLed); — envia PWM ao LED. Quanto maior o valor, maior o brilho.

8. O que foi trabalhado

  • Entrada analógica
  • Diferença entre entrada digital e analógica
  • Potenciômetro como divisor de tensão
  • analogRead()
  • Faixa analógica de 0 a 1023
  • Saída PWM
  • Controle de brilho de LED
  • map()
  • analogWrite()
  • Pino PWM no Arduino Uno
  • Relação entre sensor de entrada e atuador de saída

9. Resultado esperado

Ao girar o potenciômetro, o brilho do LED deve variar gradualmente: apagado ou quase apagado em uma extremidade, intermediário no meio e máximo na outra extremidade.

10. Erros comuns

ErroConsequência
Ligar o terminal central do potenciômetro no 5V ou GNDA leitura não varia corretamente.
Não ligar o terminal central ao A0O Arduino não lê a posição do potenciômetro.
Esquecer o GND do potenciômetroA leitura fica instável ou incorreta.
Usar pino diferente de A0 no circuito sem mudar o códigoO controle não funciona.
Ligar o LED em pino sem PWMO brilho pode não variar corretamente com analogWrite().
Usar pino diferente do 9 sem mudar o códigoO LED não responde ao PWM esperado.
Esquecer o resistor de 300 Ω do LEDPode queimar o LED.
Inverter o LEDO LED não acende.

11. Exercício proposto

Inverta o controle do brilho trocando map(leituraPotenciometro, 0, 1023, 0, 255) por map(leituraPotenciometro, 0, 1023, 255, 0). O que mudou no comportamento do LED ao girar o potenciômetro?

P6

Projeto 6 — Fotoresistor (LDR)

O Arduino lê a luminosidade do ambiente pelo LDR e acende o LED automaticamente quando estiver escuro.

Montagem do circuito

Projeto 6 — Fotoresistor LDR: Arduino Uno com LDR na entrada A0 e LED na porta digital 7.
Projeto 6 — Fotoresistor (LDR): o sensor de luz é lido na entrada analógica A0; o LED é controlado pela porta digital 7.

1. Objetivo do projeto

Montar um circuito que percebe a luminosidade do ambiente usando um fotoresistor, também chamado de LDR. Quando o ambiente estiver escuro, o Arduino acende o LED automaticamente. Quando houver luz suficiente, o LED permanece apagado.

Neste projeto, o aluno começa a juntar sensor, leitura analógica, decisão com if e saída digital em uma situação parecida com uma iluminação automática.

2. Lista exata de componentes

  • 1 Arduino Uno R3
  • 1 cabo USB para alimentar o Arduino
  • 1 protoboard
  • 1 LED comum de 5 mm
  • 1 resistor de 300 Ω para o LED
  • 1 fotoresistor (LDR)
  • 1 resistor de 10 kΩ para o LDR
  • Jumpers macho-macho

3. Tabela de ligação

ComponentePonto inicialPonto finalObservação
LDRUma extremidade do LDR5V do ArduinoO LDR participa da leitura da luminosidade.
LDROutra extremidade do LDRPino analógico A0O ponto ligado ao A0 envia ao Arduino uma tensão variável.
Resistor do LDRPino analógico A0GND do ArduinoO resistor de 10 kΩ forma o divisor de tensão usado na leitura analógica.
LEDPino digital 7 do ArduinoResistor de 300 ΩSaída digital que controla o LED.
LEDResistor de 300 ΩAnodo do LEDO resistor fica em série para limitar a corrente.
LEDCatodo do LEDGNDFecha o circuito do LED.

4. Explicação da montagem

O LDR é usado como sensor de luminosidade. Ele não liga o LED diretamente. Ele apenas ajuda o Arduino a perceber se o ambiente está mais claro ou mais escuro.

O ponto de leitura do sensor vai ao pino analógico A0. O resistor de 10 kΩ trabalha junto com o LDR formando um divisor de tensão. Assim, a tensão lida pelo Arduino muda conforme a luz muda.

O LED é ligado ao pino digital 7, passa pelo resistor de 300 Ω e retorna ao GND. Quando o programa decide que está escuro, o pino 7 fica em HIGH e o LED acende.

5. Descrição textual do circuito visual

A imagem mostra o Arduino Uno R3 ligado à protoboard. O LDR fica na parte do sensor e está associado ao resistor de 10 kΩ, criando uma leitura analógica no pino A0. Essa parte representa a entrada de informação do circuito.

O LED fica na parte da saída. Ele é controlado pelo pino digital 7, passa por um resistor de 300 Ω e retorna ao GND. Assim, o circuito tem uma entrada que percebe a luz e uma saída que responde acendendo ou apagando o LED.

6. Código completo

// Projeto 6: Fotoresistor (LDR)
// O Arduino lê a luminosidade no A0 e controla um LED no pino 7.

const int pinoLDR = A0;
const int pinoLED = 7;

int leitura = 0;

void setup() {
  pinMode(pinoLDR, INPUT);
  pinMode(pinoLED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  leitura = analogRead(pinoLDR);

  Serial.print("Leitura: ");
  Serial.println(leitura);

  if (leitura < 40) {
    digitalWrite(pinoLED, HIGH);
  } else {
    digitalWrite(pinoLED, LOW);
  }

  delay(100);
}

7. Explicação linha por linha

const int pinoLDR = A0; — define que o LDR será lido pela entrada analógica A0.

const int pinoLED = 7; — define que o LED será controlado pelo pino digital 7.

int leitura = 0; — cria uma variável para guardar o valor lido pelo sensor.

pinMode(pinoLDR, INPUT); — indica que o pino do LDR será usado como entrada.

pinMode(pinoLED, OUTPUT); — configura o pino do LED como saída.

Serial.begin(9600); — inicia a comunicação com o monitor serial.

analogRead(pinoLDR); — lê a variação de luz no sensor e gera um valor numérico.

Serial.print() e Serial.println() — mostram a leitura para o aluno observar os valores.

if (leitura < 40) — verifica se a leitura indica pouca luz.

digitalWrite(pinoLED, HIGH); — acende o LED quando o ambiente está escuro.

digitalWrite(pinoLED, LOW); — apaga o LED quando há luz suficiente.

delay(100); — cria uma pequena pausa entre as leituras.

8. O que foi trabalhado

  • Fotoresistor como sensor de luminosidade
  • Entrada analógica no pino A0
  • Divisor de tensão com LDR e resistor de 10 kΩ
  • Leitura de valores com analogRead()
  • Monitor serial para observar dados do sensor
  • Decisão com if/else
  • Saída digital para controlar LED
  • Relação entre sensor, processamento e resposta
  • Ideia inicial de iluminação automática

9. Resultado esperado

Ao cobrir o LDR com a mão, a leitura no monitor serial deve mudar e o LED deve acender quando o valor ficar abaixo do limite definido no código. Ao iluminar o sensor, o LED deve apagar.

Dependendo da montagem, da iluminação da sala e da posição do LDR, pode ser necessário ajustar o valor 40 para outro limite.

10. Erros comuns

ErroConsequência
Ligar o LDR sem o resistor de 10 kΩA leitura pode ficar incorreta ou instável.
Ligar o ponto de leitura em lugar diferente do A0O Arduino não lê o sensor conforme o código.
Usar pino diferente do 7 para o LED sem alterar o códigoO LED não responde ao programa.
Inverter o LEDO LED não acende.
Esquecer o resistor de 300 Ω do LEDPode queimar o LED.
Usar limite 40 sem observar o monitor serialO LED pode acender ou apagar fora do momento desejado.
Não ligar o GND corretamenteO circuito pode ficar aberto ou apresentar leituras estranhas.

11. Exercício proposto

Abra o monitor serial, cubra o LDR com a mão e anote os valores aproximados. Depois ilumine o LDR e anote novamente. Com base nesses números, ajuste o limite do if para que o LED acenda somente quando o ambiente estiver escuro.

P7

Projeto 7 — Sensor de distância com HC-SR04

O Arduino envia um pulso ultrassônico, mede o tempo do eco e calcula a distância até um objeto.

Montagem do circuito

Projeto 7 — Sensor de distância: Arduino Uno ligado ao sensor ultrassônico HC-SR04, com VCC em 5V, GND em GND, TRIG no pino 3 e ECHO no pino 2.
Projeto 7 — Sensor de distância: o HC-SR04 recebe alimentação de 5V; o pino TRIG envia o pulso e o pino ECHO informa por quanto tempo o eco demorou para retornar.

1. Objetivo do projeto

Montar um circuito capaz de medir a distância entre o sensor HC-SR04 e um objeto. O Arduino enviará um pequeno pulso pelo pino TRIG, aguardará o retorno pelo pino ECHO e mostrará o resultado, em centímetros, no Monitor Serial.

Neste projeto, o aluno passa a trabalhar com uma medição baseada em tempo: o programa não recebe a distância pronta, mas calcula o valor a partir da duração do eco.

2. Lista exata de componentes

  • 1 Arduino Uno R3
  • 1 cabo USB para alimentar e programar o Arduino
  • 1 protoboard
  • 1 sensor ultrassônico HC-SR04
  • Jumpers macho-macho

3. Tabela de ligação

Pino do HC-SR04Ligação no ArduinoFunção
VCC5VAlimenta o sensor.
TRIGPino digital 3Recebe do Arduino um pulso curto que inicia a medição.
ECHOPino digital 2Permanece em HIGH durante o tempo de ida e volta do som.
GNDGNDFecha o circuito e fornece a referência elétrica.

4. Explicação da montagem

O HC-SR04 possui dois transdutores circulares. Um deles emite ondas ultrassônicas e o outro recebe o eco refletido por um objeto.

O pino TRIG é configurado como saída porque o Arduino envia por ele o comando de início. O pino ECHO é configurado como entrada porque o Arduino mede nele a duração do sinal devolvido pelo sensor.

Os pinos VCC e GND alimentam o módulo. Nesta montagem, o sensor deve ser alimentado com 5V.

5. Como a distância é calculada

O sensor mede o tempo que o som leva para ir até o objeto e retornar. Como esse tempo inclui os dois percursos, o cálculo considera apenas metade do caminho.

No programa, pulseIn() mede a duração do pulso recebido no pino ECHO. Dividindo esse tempo por aproximadamente 58, obtemos uma estimativa da distância em centímetros.

O sensor não identifica qual é o objeto. Ele apenas informa o tempo do eco; o Arduino transforma esse tempo em distância.

6. Código completo

// Projeto 7: Sensor de distância com HC-SR04
// O Arduino mede o tempo do eco e calcula a distância em centímetros.

const int pinoTrig = 3;
const int pinoEcho = 2;

long duracao = 0;
float distancia = 0;

void setup() {
  pinMode(pinoTrig, OUTPUT);
  pinMode(pinoEcho, INPUT);
  Serial.begin(9600);
}

void loop() {
  distancia = medirDistancia();

  Serial.print("Distancia: ");
  Serial.print(distancia);
  Serial.println(" cm");

  delay(200);
}

float medirDistancia() {
  digitalWrite(pinoTrig, LOW);
  delayMicroseconds(2);

  digitalWrite(pinoTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(pinoTrig, LOW);

  duracao = pulseIn(pinoEcho, HIGH);

  return duracao / 58.0;
}

7. Explicação linha por linha

const int pinoTrig = 3; — define o pino que enviará o comando de início da medição.

const int pinoEcho = 2; — define o pino que receberá o sinal de retorno.

long duracao = 0; — guarda o tempo do pulso em microssegundos. O tipo long permite armazenar valores maiores.

float distancia = 0; — guarda a distância com possibilidade de casas decimais.

pinMode(pinoTrig, OUTPUT); — configura TRIG como saída.

pinMode(pinoEcho, INPUT); — configura ECHO como entrada.

distancia = medirDistancia(); — chama a função e guarda o valor que ela retorna.

digitalWrite(pinoTrig, LOW); — garante que o pino comece desligado.

delayMicroseconds(2); — cria uma pausa curta para estabilizar o sinal.

digitalWrite(pinoTrig, HIGH); e delayMicroseconds(10); — enviam o pulso de 10 microssegundos que inicia a medição.

pulseIn(pinoEcho, HIGH); — mede por quanto tempo o pino ECHO permaneceu em HIGH.

return duracao / 58.0; — converte o tempo medido em uma estimativa de distância e devolve o resultado à função principal.

Serial.print() e Serial.println() — exibem a distância no Monitor Serial.

8. O que foi trabalhado

  • Sensor ultrassônico HC-SR04
  • Função dos pinos VCC, TRIG, ECHO e GND
  • Pino digital configurado como saída e como entrada
  • Pulso de 10 microssegundos
  • Uso de delayMicroseconds()
  • Medição de duração com pulseIn()
  • Variáveis dos tipos long e float
  • Função com retorno
  • Conversão do tempo do eco em distância
  • Exibição de dados no Monitor Serial

9. Resultado esperado

Ao abrir o Monitor Serial na velocidade de 9600, devem aparecer medições semelhantes a:

Distancia: 18.45 cm
Distancia: 18.31 cm
Distancia: 32.76 cm

Ao aproximar ou afastar um objeto da frente do sensor, os valores devem mudar. Pequenas oscilações são normais porque a reflexão do som varia conforme a posição, o formato e o material do objeto.

10. Erros comuns

ErroConsequência
Trocar VCC e GNDO sensor não funciona e pode ser danificado.
Ligar TRIG e ECHO nos pinos erradosO programa não consegue iniciar ou medir corretamente o eco.
Usar pinos diferentes de 3 e 2 sem alterar o códigoAs ligações físicas deixam de corresponder ao programa.
Não configurar o Monitor Serial em 9600Os dados podem aparecer ilegíveis.
Apontar o sensor para uma superfície muito inclinada ou irregularO eco pode ser desviado e a leitura ficar instável.
Colocar o objeto muito próximo dos transdutoresA medição pode ficar incorreta porque o sensor possui uma distância mínima de funcionamento.
Esquecer de dividir o tempo de ida e voltaO resultado calculado fica aproximadamente duas vezes maior.

11. Exercício proposto

Posicione uma régua diante do sensor e escolha três distâncias, como 10 cm, 20 cm e 30 cm. Compare os valores da régua com os valores exibidos no Monitor Serial e anote as diferenças encontradas.

Depois, repita o teste usando objetos de formatos ou materiais diferentes. Observe quais deles produzem leituras mais estáveis e explique por que a reflexão do som pode mudar.

P10

Projeto 10 — LED RGB

O Arduino controla separadamente os canais vermelho, verde e azul para produzir diferentes combinações de cores.

Montagem do circuito

Projeto 10 — LED RGB de cátodo comum ligado ao Arduino Uno, com os canais vermelho, verde e azul protegidos por resistores.
Projeto 10 — LED RGB: cada canal de cor é ligado a um pino digital por meio de um resistor, enquanto o cátodo comum é conectado ao GND.

1. Objetivo do projeto

Aprender a ligar e controlar um LED RGB de cátodo comum. O componente reúne três LEDs internos — vermelho, verde e azul — que podem ser acionados separadamente ou ao mesmo tempo.

Ao combinar esses três canais, o circuito produzirá vermelho, verde, azul, amarelo, ciano, magenta, branco e o estado apagado.

2. Lista exata de componentes

  • 1 Arduino Uno R3
  • 1 cabo USB para alimentar e programar o Arduino
  • 1 protoboard
  • 1 LED RGB de cátodo comum
  • 3 resistores de 300 Ω
  • 4 jumpers macho-macho

3. Tabela de ligação

Terminal do LED RGBLigaçãoObservação
Vermelho (R)Pino digital 9, passando por resistor de 300 ΩControla o canal vermelho.
Cátodo comumGNDÉ o terminal comum dos três LEDs internos.
Verde (G)Pino digital 11, passando por resistor de 300 ΩControla o canal verde.
Azul (B)Pino digital 10, passando por resistor de 300 ΩControla o canal azul.

4. Explicação da montagem

O segundo terminal do LED, na orientação mostrada na imagem, é o cátodo comum e deve ser ligado ao GND pelo jumper preto.

Os outros três terminais correspondem às cores vermelho, verde e azul. Cada canal precisa de seu próprio resistor para limitar a corrente e proteger o componente.

Os jumpers seguem as cores dos canais, facilitando a identificação visual das ligações.

5. Como o LED RGB funciona

Embora pareça um único LED, o componente possui três emissores de luz dentro da mesma cápsula. Cada emissor responde a um pino diferente do Arduino.

Como o modelo é de cátodo comum, enviar HIGH a um canal acende essa cor; enviar LOW a apaga.

Quando dois ou três canais são ligados simultaneamente, as luzes se combinam e nossos olhos percebem uma nova cor.

6. Código completo

// Projeto 10: LED RGB
// Combinação de cores com sinais digitais.

const int pinoLEDR = 9;
const int pinoLEDB = 10;
const int pinoLEDG = 11;

void setup() {
  pinMode(pinoLEDR, OUTPUT);
  pinMode(pinoLEDB, OUTPUT);
  pinMode(pinoLEDG, OUTPUT);
}

void loop() {
  definirCor(HIGH, LOW, LOW);      // Vermelho
  delay(1000);

  definirCor(LOW, HIGH, LOW);      // Verde
  delay(1000);

  definirCor(LOW, LOW, HIGH);      // Azul
  delay(1000);

  definirCor(HIGH, HIGH, LOW);     // Amarelo
  delay(1000);

  definirCor(LOW, HIGH, HIGH);     // Ciano
  delay(1000);

  definirCor(HIGH, LOW, HIGH);     // Magenta
  delay(1000);

  definirCor(HIGH, HIGH, HIGH);    // Branco
  delay(1000);

  definirCor(LOW, LOW, LOW);       // Apagado
  delay(1000);
}

void definirCor(bool vermelho, bool verde, bool azul) {
  digitalWrite(pinoLEDR, vermelho);
  digitalWrite(pinoLEDG, verde);
  digitalWrite(pinoLEDB, azul);
}

7. Explicação do código

const int pinoLEDR = 9; — associa o canal vermelho ao pino 9.

const int pinoLEDB = 10; — associa o canal azul ao pino 10.

const int pinoLEDG = 11; — associa o canal verde ao pino 11.

pinMode(..., OUTPUT); — configura os três pinos como saídas digitais.

definirCor(HIGH, LOW, LOW); — liga somente o vermelho.

definirCor(HIGH, HIGH, LOW); — liga vermelho e verde ao mesmo tempo, formando amarelo.

void definirCor(bool vermelho, bool verde, bool azul) — recebe o estado de cada canal e evita repetir três comandos em cada etapa.

digitalWrite() — envia HIGH ou LOW para ligar ou desligar cada cor.

8. Combinações utilizadas

VermelhoVerdeAzulResultado
HIGHLOWLOWVermelho
LOWHIGHLOWVerde
LOWLOWHIGHAzul
HIGHHIGHLOWAmarelo
LOWHIGHHIGHCiano
HIGHLOWHIGHMagenta
HIGHHIGHHIGHBranco
LOWLOWLOWApagado

9. Resultado esperado

Ao iniciar a simulação, o LED deve apresentar cada combinação por aproximadamente um segundo.

A sequência será: vermelho, verde, azul, amarelo, ciano, magenta, branco e apagado. Depois, o ciclo recomeçará automaticamente.

As cores combinadas podem não parecer perfeitamente puras porque cada emissor interno possui brilho próprio e a percepção também varia conforme a tela ou o componente físico.

10. Erros comuns e correções

ProblemaPossível causa ou correção
Nenhuma cor acendeConfira se o cátodo comum está ligado ao GND e se a orientação do LED está correta.
Uma das cores não apareceVerifique o jumper, o resistor e o pino correspondente àquela cor.
As cores aparecem trocadasConfirme a ordem dos terminais e compare-a com as cores dos jumpers.
O LED foi ligado sem os três resistoresDesligue o circuito e coloque um resistor em série com cada canal de cor.
O comportamento está invertidoConfira se o componente escolhido é realmente de cátodo comum; LEDs de ânodo comum usam lógica invertida.

11. Exercício proposto

Altere a ordem das cores no programa. Mostre primeiro as três cores primárias, depois as três combinações secundárias, mantenha o branco aceso por dois segundos e apague o LED antes de reiniciar.

Depois, retire duas cores da sequência e explique quais chamadas de definirCor() foram removidas.

P11

Projeto 11 — Servo Motor

O Arduino controla a posição de um Micro Servo e introduz, pela primeira vez no módulo, o uso de uma biblioteca.

Montagem do circuito

Projeto 11 — Micro Servo ligado diretamente ao Arduino Uno: sinal no pino digital 6, alimentação em 5V e GND.
Projeto 11 — Servo Motor: o fio de sinal do Micro Servo vai ao pino D6; alimentação e GND são ligados diretamente ao Arduino.

1. Objetivo do projeto

Conhecer o servomotor e aprender a posicionar seu eixo em ângulos determinados pelo programa.

Neste projeto o Micro Servo irá assumir, em sequência, as posições aproximadas de 0°, 90° e 180°, retornando depois para 90° e reiniciando o ciclo.

2. Lista exata de componentes

  • 1 Arduino Uno R3
  • 1 cabo USB para alimentar e programar o Arduino
  • 1 Micro Servo
  • 3 jumpers macho-macho

Não é necessário resistor nem protoboard nesta montagem.

3. Tabela de ligação

Fio do Micro ServoFunçãoArduino
AmareloSinal de controlePino digital D6
VermelhoAlimentação5V
PretoGND / soloGND

4. Como o servo motor funciona

Diferentemente de um motor comum, que normalmente gira enquanto estiver alimentado, o servomotor é utilizado para posicionar seu eixo.

O Arduino envia um sinal de controle e o circuito interno do servo movimenta o eixo até a posição solicitada.

No Micro Servo utilizado no Tinkercad, trabalharemos com posições entre aproximadamente 0° e 180°.

5. Onde um servomotor pode ser usado?

  • Lixeira automática: abrir e fechar a tampa.
  • Robótica: movimentar braços, garras e articulações.
  • Portas e cancelas: movimentar pequenos mecanismos de abertura.
  • Travas: deslocar uma peça para bloquear ou liberar um mecanismo.
  • Sensor móvel: girar um sensor ultrassônico para observar diferentes direções.
  • Aeromodelismo e maquetes: controlar partes móveis que precisam parar em posições definidas.

6. Primeira biblioteca do módulo

Até este ponto, os programas utilizaram diretamente os comandos básicos do Arduino. Neste projeto aparece um novo conceito: a biblioteca.

Uma biblioteca é um conjunto de códigos já preparados para facilitar determinada tarefa. A biblioteca Servo já contém os recursos necessários para controlar um servomotor sem precisarmos programar manualmente todos os sinais elétricos envolvidos.

#include <Servo.h> — inclui no programa os recursos da biblioteca Servo.

Servo meuServo; — cria um objeto chamado meuServo. Esse será o nome usado pelo programa para representar e controlar o servomotor.

Neste momento não é necessário aprofundar orientação a objetos: basta entender que meuServo passa a ser o nome pelo qual comandaremos esse componente.

7. Código completo

// Projeto 11: Servo Motor
// Controle de posições com a biblioteca Servo.

#include <Servo.h>

Servo meuServo;

const int pinoServo = 6;

void setup() {
  meuServo.attach(pinoServo);
}

void loop() {
  meuServo.write(0);
  delay(1000);

  meuServo.write(90);
  delay(1000);

  meuServo.write(180);
  delay(1000);

  meuServo.write(90);
  delay(1000);
}

8. Explicação do código

#include <Servo.h> — disponibiliza os comandos da biblioteca Servo.

Servo meuServo; — cria o objeto que representará o servo no programa.

const int pinoServo = 6; — registra que o fio de sinal está ligado ao pino D6.

meuServo.attach(pinoServo); — associa o objeto meuServo ao pino D6 e inicia o controle do servo por esse pino.

meuServo.write(0); — solicita a posição aproximada de 0°.

meuServo.write(90); — solicita a posição aproximada de 90°.

meuServo.write(180); — solicita a posição aproximada de 180°.

delay(1000); — mantém cada etapa por um segundo antes do próximo comando.

9. Entendendo attach() e write()

attach() não representa um ângulo. Ele informa à biblioteca qual pino do Arduino será usado para controlar aquele servo.

Depois dessa associação, os comandos enviados a meuServo produzirão o sinal de controle no pino D6.

write() informa a posição desejada. Por exemplo, meuServo.write(90) solicita que o eixo vá aproximadamente para 90°.

10. Resultado esperado

Ao iniciar a simulação, o servo será inicializado pela biblioteca e poderá apresentar um pequeno reposicionamento inicial.

Em seguida, deverá executar continuamente a sequência:

0° → 90° → 180° → 90° → 0°...

Cada posição permanecerá aproximadamente um segundo antes da próxima ordem.

11. Erros comuns e correções

ProblemaPossível causa ou correção
O servo não se movimentaConfira as três ligações: sinal em D6, alimentação em 5V e GND.
O programa não reconhece ServoConfira se a linha #include <Servo.h> está presente e escrita corretamente.
O servo não responde aos comandosVerifique se attach() está no setup() e se utiliza o mesmo pino ligado ao fio de sinal.
A sequência ocorre rápido demaisConfira os valores de delay().
O servo físico real apresenta comportamento instávelServos podem exigir mais corrente do que o Arduino consegue fornecer em determinadas situações. Este projeto inicial utiliza o Micro Servo do Tinkercad e uma montagem didática simples.

12. Exercício proposto

Altere a sequência para que o servo passe pelas posições 30°, 60°, 120° e 150°, permanecendo um segundo em cada uma delas.

Depois, crie outra sequência usando pelo menos quatro posições diferentes, sem utilizar estruturas de repetição novas.

Lab 2

Laboratório 2 — Conversando com o Arduino

Reutilizando o circuito do potenciômetro com PWM para visualizar, no Monitor Serial, o que o Arduino está lendo e enviando ao LED.

Reutilizando o circuito do Projeto 5

Laboratório 2 — Conversando com o Arduino: circuito do potenciômetro com LED PWM e Monitor Serial exibindo leitura e brilho.
Laboratório 2 — Conversando com o Arduino: o mesmo circuito do potenciômetro com PWM agora mostra os valores no Monitor Serial.

1. Antes de começar

Até agora, observamos o resultado dos programas principalmente pelo comportamento dos componentes: LED acendendo, buzzer tocando ou brilho variando.

Neste laboratório, a pergunta muda: como descobrir quais valores o Arduino está lendo enquanto o programa está funcionando?

2. Objetivo do laboratório

Utilizar o Monitor Serial para acompanhar os valores lidos no potenciômetro e os valores enviados ao LED pelo PWM.

O circuito é conhecido. A novidade está em enxergar os dados que antes ficavam invisíveis.

3. Componentes utilizados

  • 1 Arduino Uno R3
  • 1 cabo USB
  • 1 protoboard
  • 1 potenciômetro de 10 kΩ
  • 1 LED comum de 5 mm
  • 1 resistor de 300 Ω
  • Jumpers macho-macho

4. Ligações utilizadas

ComponenteLigaçãoFunção
PotenciômetroTerminal central no A0; laterais em 5V e GNDEnviar ao Arduino uma leitura analógica variável.
LEDPino PWM 9, resistor de 300 Ω e GNDVariar o brilho de acordo com o valor calculado no programa.
Monitor SerialComunicação pelo cabo USBMostrar no computador os valores enviados pelo Arduino.

5. Código completo

// Laboratório 2: Conversando com o Arduino
// Utilizando o Monitor Serial.
// O potenciômetro controla o brilho do LED e envia
// as informações para o Monitor Serial.

int pinoPotenciometro = A0;
int pinoLed = 9;

int leituraPotenciometro = 0;
int brilhoLed = 0;

void setup() {
  pinMode(pinoLed, OUTPUT);

  Serial.begin(9600);
}

void loop() {

  leituraPotenciometro = analogRead(pinoPotenciometro);

  brilhoLed = map(leituraPotenciometro, 0, 1023, 0, 255);

  analogWrite(pinoLed, brilhoLed);

  Serial.print("Leitura: ");
  Serial.print(leituraPotenciometro);

  Serial.print("   Brilho: ");
  Serial.println(brilhoLed);

  delay(100);
}

6. Entendendo as novidades

Serial.begin(9600); — inicia a comunicação entre o Arduino e o computador.

Serial.print() — escreve um texto ou valor no Monitor Serial sem mudar de linha.

Serial.println() — escreve um texto ou valor e muda para a próxima linha.

9600 — representa a velocidade da comunicação. Use o mesmo valor no programa e no Monitor Serial.

7. O que observar

Ao girar o potenciômetro, duas coisas devem acontecer ao mesmo tempo:

  • o brilho do LED muda;
  • os valores aparecem no Monitor Serial.

Você deverá visualizar algo parecido com:

Leitura: 532   Brilho: 132

8. Pense um pouco

O potenciômetro gera leituras de aproximadamente 0 a 1023.

O brilho do LED usa valores de aproximadamente 0 a 255.

É por isso que usamos a função map(): ela adapta a faixa de valores da entrada analógica para a faixa usada pelo PWM.

9. Testando

  1. Envie o código para o Arduino.
  2. Abra o Monitor Serial.
  3. Confira se a velocidade está em 9600.
  4. Gire lentamente o potenciômetro.
  5. Observe a relação entre leitura, brilho e LED.

10. O que foi trabalhado

  • Monitor Serial como ferramenta de teste
  • Visualização de valores em tempo real
  • Comunicação entre Arduino e computador
  • Relação entre leitura analógica e PWM
  • Uso de Serial.begin(), Serial.print() e Serial.println()
  • Reforço do uso da função map()

11. Experimente

1. Altere o delay(100) para delay(500). O que mudou na exibição dos valores?

2. Gire o potenciômetro até aproximadamente a metade. Quais valores aparecem em Leitura e Brilho?

3. Em outro momento, teste a mesma ideia com o circuito do LDR. O que muda: o programa ou os valores lidos?

Lab 3

Laboratório 3 — Sensor de ré

Reutilizando o HC-SR04 do Projeto 7, LEDs e buzzer para criar alertas visuais e sonoros de proximidade.

Ampliando o circuito do Projeto 7

Laboratório 3 — Sensor de ré: Arduino Uno conectado ao HC-SR04, seis LEDs com resistores e um buzzer passivo.
Laboratório 3 — Sensor de ré: quanto menor a distância, mais LEDs acendem e menor fica o intervalo entre os sinais sonoros.

1. Antes de começar

Este laboratório reutiliza a medição desenvolvida no Projeto 7 — Sensor de distância com HC-SR04. Mantenha o sensor ligado aos pinos TRIG 3 e ECHO 2.

Agora serão acrescentados componentes já estudados: seis LEDs, resistores e um buzzer.

2. Objetivo do laboratório

Construir um sistema de alerta de proximidade semelhante a um sensor de ré didático.

O programa transformará a distância medida em dois tipos de resposta: uma indicação visual com LEDs e um aviso sonoro cujo intervalo diminui à medida que o objeto se aproxima.

3. Componentes acrescentados

  • 1 buzzer passivo de 5 V
  • 3 LEDs verdes de 5 mm
  • 2 LEDs amarelos de 5 mm
  • 1 LED vermelho de 5 mm
  • 6 resistores de 300 Ω
  • Jumpers macho-macho

Também serão reutilizados o Arduino, a protoboard e o HC-SR04 montados no Projeto 7.

4. Como os alertas funcionarão

  • Acima de 60 cm: LEDs apagados e buzzer desligado.
  • De 51 a 60 cm: 1 LED aceso e bipes lentos.
  • De 41 a 50 cm: 2 LEDs acesos.
  • De 31 a 40 cm: 3 LEDs acesos.
  • De 21 a 30 cm: 4 LEDs acesos.
  • De 11 a 20 cm: 5 LEDs acesos e bipes rápidos.
  • Até 10 cm: todos os LEDs acesos e sinal contínuo.

5. Tabela de ligações

ComponenteLigação no ArduinoFunção
HC-SR04 — TRIGPino digital 3Iniciar a medição ultrassônica.
HC-SR04 — ECHOPino digital 2Informar a duração do eco.
Buzzer passivoPino digital 7 e GNDProduzir o alerta sonoro.
LED verde 1Pino digital 8, resistor de 300 Ω e GNDPrimeiro nível de aproximação.
LED verde 2Pino digital 9, resistor de 300 Ω e GNDSegundo nível de aproximação.
LED verde 3Pino digital 10, resistor de 300 Ω e GNDTerceiro nível de aproximação.
LED amarelo 1Pino digital 11, resistor de 300 Ω e GNDAlerta intermediário.
LED amarelo 2Pino digital 12, resistor de 300 Ω e GNDAlerta elevado.
LED vermelhoPino digital 13, resistor de 300 Ω e GNDDistância crítica.

6. Código completo

// Laboratório 3: Sensor de ré
// Reutiliza o HC-SR04 do Projeto 7.

const int pinoTrig = 3;
const int pinoEcho = 2;
const int pinoBuzzer = 7;

float distancia = 0;
int intervalo = 0;

void setup() {
  Serial.begin(9600);

  pinMode(pinoTrig, OUTPUT);
  pinMode(pinoEcho, INPUT);
  pinMode(pinoBuzzer, OUTPUT);

  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop() {
  distancia = medirDistancia();

  Serial.print("Distancia: ");
  Serial.print(distancia);
  Serial.println(" cm");

  if (distancia > 60) {
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
    noTone(pinoBuzzer);
  }
  else if (distancia <= 10) {
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, HIGH);
    digitalWrite(11, HIGH);
    digitalWrite(12, HIGH);
    digitalWrite(13, HIGH);
    tone(pinoBuzzer, 1750);
  }
  else {
    if (distancia <= 20) {
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      digitalWrite(12, HIGH);
      digitalWrite(13, LOW);
      intervalo = 100;
    }
    else if (distancia <= 30) {
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, HIGH);
      digitalWrite(12, LOW);
      digitalWrite(13, LOW);
      intervalo = 150;
    }
    else if (distancia <= 40) {
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(11, LOW);
      digitalWrite(12, LOW);
      digitalWrite(13, LOW);
      intervalo = 200;
    }
    else if (distancia <= 50) {
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      digitalWrite(12, LOW);
      digitalWrite(13, LOW);
      intervalo = 250;
    }
    else {
      digitalWrite(8, HIGH);
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(11, LOW);
      digitalWrite(12, LOW);
      digitalWrite(13, LOW);
      intervalo = 300;
    }

    tone(pinoBuzzer, 1750);
    delay(intervalo);
    noTone(pinoBuzzer);
    delay(intervalo);
  }
}

float medirDistancia() {
  digitalWrite(pinoTrig, LOW);
  delayMicroseconds(2);

  digitalWrite(pinoTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(pinoTrig, LOW);

  long duracao = pulseIn(pinoEcho, HIGH);
  return duracao / 58.0;
}

7. Entendendo a lógica

distancia = medirDistancia(); — reutiliza a função criada no Projeto 7.

if (distancia > 60) — mantém todos os alertas desligados quando o objeto está longe.

else if (distancia <= 10) — representa a situação crítica: todos os LEDs acendem e o buzzer permanece ligado.

Os demais testes com else if dividem a distância em faixas. Cada faixa define quantos LEDs ficarão acesos e qual será o valor de intervalo.

tone(pinoBuzzer, 1750); — inicia o som do buzzer na frequência de 1750 Hz.

delay(intervalo); — determina por quanto tempo o buzzer fica ligado e desligado. Quanto menor o intervalo, mais rápidos ficam os bipes.

8. Testando

  1. Confira todas as ligações antes de energizar o circuito.
  2. Envie o código para o Arduino.
  3. Abra o Monitor Serial em 9600.
  4. Posicione um objeto a mais de 60 cm do sensor.
  5. Aproxime o objeto lentamente e observe os LEDs e o buzzer.
  6. Compare as mudanças com as faixas apresentadas no laboratório.

9. Resultado esperado

Quanto mais próximo o objeto estiver do HC-SR04, maior será o número de LEDs acesos e mais rápidos serão os bipes.

Ao chegar a 10 cm ou menos, todos os LEDs devem permanecer acesos e o buzzer deve emitir um sinal contínuo.

10. Erros comuns

ErroConsequência
Inverter a polaridade de um LEDEsse LED não acende.
Esquecer algum resistor de 300 ΩO LED fica sem proteção e pode ser danificado.
Ligar um LED em pino diferente do indicadoA sequência visual não corresponde ao programa.
Usar buzzer ativo no lugar do passivoO comportamento do comando tone() pode não ser o esperado.
Trocar TRIG e ECHOA medição de distância não funciona corretamente.
Não compartilhar o GND entre os componentesO circuito pode não funcionar ou apresentar comportamento instável.

11. O que foi trabalhado

  • Reutilização do sensor HC-SR04
  • Integração entre sensor, LEDs e buzzer
  • Faixas de distância com if, else if e else
  • Acionamento progressivo de múltiplas saídas
  • Variação do intervalo entre sinais sonoros
  • Uso do Monitor Serial como apoio ao teste
  • Transformação de uma medição em uma aplicação prática

12. Experimente

1. Altere o limite máximo de 60 cm para 100 cm e redistribua as faixas de distância.

2. Troque a frequência 1750 por outros valores e compare os sons produzidos.

3. Modifique o código para manter apenas os LEDs, sem utilizar o buzzer.

Atenção

Este circuito é apenas didático. O HC-SR04 e a montagem em protoboard não são componentes automotivos e não devem ser usados como sistema real de segurança ou manobra de veículos.

Lab 6

Laboratório 6 — LED RGB com botões

Reutilizando o LED RGB do Projeto 10 e os botões do Projeto 3 para controlar separadamente as cores vermelho, verde e azul.

Ampliando o circuito do Projeto 10

Laboratório 6 — LED RGB de cátodo comum controlado por três botões ligados ao Arduino Uno.
Laboratório 6 — LED RGB com botões: cada botão controla um canal de cor e as combinações surgem quando dois ou três botões são pressionados ao mesmo tempo.

1. Antes de começar

Este laboratório integra dois conhecimentos já trabalhados: o LED RGB do Projeto 10 e a leitura de botões do Projeto 3.

O LED continua sendo de cátodo comum, com os canais vermelho, verde e azul protegidos por resistores. Os três botões serão usados como entradas digitais.

2. Objetivo do laboratório

Controlar cada canal do LED RGB com um botão independente.

Ao pressionar mais de um botão ao mesmo tempo, as cores serão combinadas: vermelho + verde produz amarelo, verde + azul produz ciano, vermelho + azul produz magenta e os três juntos produzem branco.

3. Componentes utilizados

  • 1 Arduino Uno R3
  • 1 cabo USB
  • 1 protoboard
  • 1 LED RGB de cátodo comum
  • 3 resistores de 300 Ω
  • 3 botões
  • Jumpers macho-macho

Todos esses componentes já foram utilizados em projetos anteriores.

4. Tabela de ligações

ComponenteLigação no ArduinoFunção
Canal vermelho do LED RGBPino 9, passando por resistor de 300 ΩControlar a luz vermelha.
Canal azul do LED RGBPino 10, passando por resistor de 300 ΩControlar a luz azul.
Canal verde do LED RGBPino 11, passando por resistor de 300 ΩControlar a luz verde.
Cátodo comum do LED RGBGNDReferência comum dos três LEDs internos.
Botão vermelhoPino 7 e GNDControlar o canal vermelho.
Botão verdePino 6 e GNDControlar o canal verde.
Botão azulPino 5 e GNDControlar o canal azul.

5. Como os botões funcionam

Os três botões utilizam INPUT_PULLUP. Dessa forma, não é necessário acrescentar resistores externos para manter as entradas em um estado conhecido.

Quando o botão está solto, a leitura é HIGH. Quando ele é pressionado, o pino é conectado ao GND e a leitura passa para LOW.

Por isso, neste programa, a condição leituraBotaoR == LOW significa que o botão vermelho está pressionado.

6. Como as cores serão combinadas

Botões pressionadosCor resultante
VermelhoVermelho
VerdeVerde
AzulAzul
Vermelho + VerdeAmarelo
Verde + AzulCiano
Vermelho + AzulMagenta
Vermelho + Verde + AzulBranco
NenhumApagado

7. Código completo

const int pinoLEDG = 11; 
const int pinoLEDB = 10;
const int pinoLEDR = 9;
const int pinoBotaoR = 7;
const int pinoBotaoG = 6;
const int pinoBotaoB = 5;

int leituraBotaoR;
int leituraBotaoG;
int leituraBotaoB;

void setup() {
  pinMode(pinoLEDR, OUTPUT);
  pinMode(pinoLEDG, OUTPUT);
  pinMode(pinoLEDB, OUTPUT);
  pinMode(pinoBotaoR, INPUT_PULLUP);
  pinMode(pinoBotaoG, INPUT_PULLUP);
  pinMode(pinoBotaoB, INPUT_PULLUP);
}

void loop() {
  leituraBotaoR = digitalRead(pinoBotaoR);
  leituraBotaoG = digitalRead(pinoBotaoG);
  leituraBotaoB = digitalRead(pinoBotaoB);

  if (leituraBotaoR == LOW) {
    digitalWrite(pinoLEDR, HIGH);
  } else {
    digitalWrite(pinoLEDR, LOW);
  }

  if (leituraBotaoG == LOW) {
    digitalWrite(pinoLEDG, HIGH);
  } else {
    digitalWrite(pinoLEDG, LOW);
  }

  if (leituraBotaoB == LOW) {
    digitalWrite(pinoLEDB, HIGH);
  } else {
    digitalWrite(pinoLEDB, LOW);
  }

  delay(100);
}

8. Entendendo o código

const int pinoLEDG = 11;, pinoLEDB = 10; e pinoLEDR = 9; — definem os três pinos que controlam os canais do LED RGB.

pinoBotaoR = 7, pinoBotaoG = 6 e pinoBotaoB = 5 — identificam os pinos usados para ler os três botões.

pinMode(..., INPUT_PULLUP); — ativa o resistor interno de pull-up do Arduino. Por isso, o botão solto gera HIGH e o botão pressionado gera LOW.

digitalRead() — lê o estado de cada botão e armazena o resultado nas variáveis leituraBotaoR, leituraBotaoG e leituraBotaoB.

Cada estrutura if / else verifica um botão independentemente. Se estiver pressionado, o respectivo canal recebe HIGH e acende; caso contrário, recebe LOW e permanece apagado.

digitalWrite() é adequado aqui porque cada canal trabalha apenas com dois estados: ligado ou desligado. Neste laboratório não há controle gradual de brilho.

delay(100); — cria uma pequena pausa entre as leituras sucessivas dos botões.

9. Testando

  1. Confira as ligações do LED RGB, dos resistores e dos três botões.
  2. Envie o código para o Arduino.
  3. Pressione somente o botão vermelho e observe o LED.
  4. Repita o teste com os botões verde e azul.
  5. Pressione dois botões simultaneamente e observe a combinação resultante.
  6. Pressione os três botões ao mesmo tempo e verifique a formação do branco.

10. Resultado esperado

Cada botão deve controlar somente seu respectivo canal de cor.

Ao pressionar dois ou três botões simultaneamente, os canais permanecem ligados ao mesmo tempo e formam as demais combinações RGB. Ao soltar todos os botões, o LED deve apagar.

11. Erros comuns

ErroConsequência
Ligar um botão em pino diferente do códigoA cor acionada não corresponde ao botão esperado.
Esquecer que INPUT_PULLUP inverte a lógicaO aluno pode interpretar HIGH como botão pressionado, quando neste circuito ocorre o contrário.
Não ligar os botões ao GNDO pressionamento não produz a mudança esperada na entrada.
Trocar os terminais R, G ou B do LEDAs cores exibidas não correspondem ao programa.
Ligar incorretamente o cátodo comumO LED pode não acender corretamente.
Retirar algum dos três resistoresUm dos canais fica sem limitação adequada de corrente.

12. O que foi trabalhado

  • Integração entre dois projetos anteriores
  • LED RGB de cátodo comum
  • Três entradas digitais independentes
  • Uso de INPUT_PULLUP
  • Leitura com digitalRead()
  • Estruturas if / else
  • Controle independente dos canais RGB
  • Combinação simultânea de cores

13. Experimente

1. Inverta no código dois botões e observe como muda a associação entre botão e cor.

2. Altere delay(100) para delay(500) e compare a resposta dos botões.

3. Modifique o programa para que cada botão controle uma cor diferente da indicada pelo jumper.

Lab 7

Laboratório 7 — Lixeira automática

Integrando o sensor ultrassônico HC-SR04 do Projeto 7 com o Servo Motor do Projeto 11 para criar uma aplicação prática de abertura automática.

Integrando sensor de distância e servo

Laboratório 7 — Lixeira automática com Arduino Uno, sensor HC-SR04 e Micro Servo, utilizando a protoboard para distribuir 5V e GND.
Laboratório 7 — Lixeira automática: o HC-SR04 detecta a aproximação, e o servo abre e fecha a tampa de forma gradual.

1. Antes de começar

Este laboratório reutiliza conhecimentos já trabalhados: medição de distância com o HC-SR04, controle de posição com Servo Motor, uso do Monitor Serial, funções e estruturas condicionais.

O principal conceito novo será a estrutura de repetição for, usada para movimentar o servo gradualmente.

2. Objetivo do laboratório

Construir uma lixeira automática didática: quando uma mão ou objeto se aproximar a 15 cm ou menos, o servo deverá abrir a tampa gradualmente até 120°, mantê-la aberta por 3 segundos e fechá-la novamente.

O sistema só poderá abrir outra vez depois que o objeto se afastar do sensor.

3. Componentes utilizados

  • 1 Arduino Uno R3
  • 1 cabo USB
  • 1 protoboard
  • 1 sensor ultrassônico HC-SR04
  • 1 Micro Servo
  • Jumpers macho-macho

Todos os componentes principais já foram utilizados anteriormente. A protoboard é usada aqui para distribuir 5V e GND ao sensor e ao servo.

4. Tabela de ligações

ComponenteTerminal / fioLigação
Arduino5VBarramento positivo (+) da protoboard
ArduinoGNDBarramento negativo (−) da protoboard
Micro ServoSinal (amarelo)Pino digital D9
Micro ServoAlimentação (vermelho)Barramento positivo (+)
Micro ServoGND (preto)Barramento negativo (−)
HC-SR04VCCBarramento positivo (+)
HC-SR04TRIGPino digital D3
HC-SR04ECHOPino digital D2
HC-SR04GNDBarramento negativo (−)

5. Como o sistema funciona

  1. O HC-SR04 mede continuamente a distância.
  2. Se a distância for maior que 15 cm, o sistema fica liberado para uma próxima abertura.
  3. Ao detectar uma distância menor ou igual a 15 cm, o servo abre gradualmente de 0° até 120°.
  4. A tampa permanece aberta por 3 segundos.
  5. O servo retorna gradualmente até 0°.
  6. Enquanto a mão continuar próxima, a tampa não abre novamente.
  7. Ao afastar a mão, o sistema é liberado para um novo ciclo.

6. Por que usar uma variável bool?

A variável podeAbrir funciona como uma trava lógica.

bool podeAbrir = true; — inicialmente a lixeira está liberada para abrir.

podeAbrir = false; — depois que a abertura começa, impede que o sistema abra novamente enquanto o objeto continuar perto.

Quando a distância volta a ser maior que 15 cm, podeAbrir recebe true e uma nova abertura fica autorizada.

Uma variável do tipo bool possui apenas dois valores possíveis: true ou false.

7. Novo conceito: estrutura de repetição for

Nos programas anteriores, quando era necessário repetir comandos, eles apareciam escritos várias vezes. O for permite repetir automaticamente um bloco de código enquanto uma condição for verdadeira.

for (posicao = 0; posicao <= 120; posicao += 1) {
  meuServo.write(posicao);
  delay(15);
}

posicao = 0 — valor inicial: o movimento começa em 0°.

posicao <= 120 — condição: a repetição continua enquanto a posição for menor ou igual a 120°.

posicao += 1 — atualização: após cada repetição, a posição aumenta 1 grau.

Assim, o servo recebe sucessivamente 0°, 1°, 2°, 3°... até 120°, criando um movimento gradual.

Para fechar a tampa, o processo é invertido: começa em 120° e diminui 1 grau a cada repetição até chegar a 0°.

8. Código completo

#include <Servo.h>

Servo meuServo;

const int pinoServo = 9;
const int TRIG = 3;
const int ECHO = 2;

int posicao = 0;
unsigned int distancia;

bool podeAbrir = true;

void setup() {
  meuServo.attach(pinoServo);
  meuServo.write(0);

  Serial.begin(9600);

  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
}

void loop() {
  distancia = medirDistancia(TRIG, ECHO);

  Serial.println(distancia);

  // Libera uma nova abertura somente depois
  // que a mão ou objeto se afastar.
  if (distancia > 15) {
    podeAbrir = true;
  }

  if (distancia <= 15 && podeAbrir) {
    podeAbrir = false;

    // Abre a tampa gradualmente.
    for (posicao = 0; posicao <= 120; posicao += 1) {
      meuServo.write(posicao);
      delay(15);
    }

    // Mantém a tampa aberta por 3 segundos.
    delay(3000);

    // Fecha a tampa gradualmente.
    for (posicao = 120; posicao >= 0; posicao -= 1) {
      meuServo.write(posicao);
      delay(15);
    }
  }
}

int medirDistancia(int pinoTrig, int pinoEcho) {
  digitalWrite(pinoTrig, LOW);
  delayMicroseconds(2);

  digitalWrite(pinoTrig, HIGH);
  delayMicroseconds(10);

  digitalWrite(pinoTrig, LOW);

  return pulseIn(pinoEcho, HIGH) / 58;
}

9. Explicação do código

#include <Servo.h> e Servo meuServo; — reutilizam a biblioteca e o objeto apresentados no Projeto 11.

const int pinoServo = 9; — define o D9 como pino de sinal do servo.

TRIG = 3 e ECHO = 2 — definem os pinos do HC-SR04.

meuServo.write(0); — inicia a tampa na posição fechada.

medirDistancia(TRIG, ECHO) — reutiliza a função de medição do sensor ultrassônico.

Serial.println(distancia); — permite acompanhar as medições no Monitor Serial.

if (distancia > 15) — libera uma nova abertura somente quando o objeto se afasta.

if (distancia <= 15 && podeAbrir) — inicia a abertura somente quando há um objeto próximo e a trava está liberada.

Os dois comandos for realizam a abertura e o fechamento graduais.

10. Teste no Tinkercad

  1. Inicie a simulação.
  2. Abra o Monitor Serial.
  3. Altere a distância simulada do HC-SR04.
  4. Acima de 15 cm, a tampa deve permanecer fechada.
  5. Em 15 cm ou menos, o servo deve abrir até 120°.
  6. Aguarde 3 segundos e observe o fechamento.
  7. Mantenha o objeto próximo: a tampa não deve abrir novamente.
  8. Afaste o objeto e aproxime novamente para iniciar outro ciclo.

11. Resultado esperado

A lixeira deve responder a uma aproximação apenas uma vez, abrir e fechar suavemente e exigir que a mão seja afastada antes de aceitar uma nova abertura.

O Monitor Serial deve continuar exibindo as distâncias sempre que o programa estiver novamente na etapa de leitura.

12. Erros comuns e correções

ProblemaVerifique
Servo não se moveSinal no D9, alimentação no barramento positivo e GND no negativo.
Sensor não mede corretamenteTRIG no D3, ECHO no D2, VCC em 5V e GND comum.
Tampa abre repetidamente sem afastar a mãoConfira a variável podeAbrir e as duas estruturas if.
Tampa abre, mas não fecha gradualmenteConfira o segundo for: ele deve começar em 120 e usar posicao -= 1.
Movimento muito lento ou muito rápidoO delay(15) dentro do for controla o intervalo entre cada grau.

13. O que foi trabalhado

  • Integração entre sensor e atuador
  • Reutilização do HC-SR04
  • Reutilização da biblioteca Servo
  • Reutilização da função medirDistancia()
  • Monitor Serial
  • Estruturas condicionais
  • Variável lógica bool
  • Estrutura de repetição for
  • Incremento e decremento de uma variável
  • Controle de estado para evitar acionamentos repetidos

14. Experimente

1. Troque a distância de acionamento de 15 cm para 20 cm.

2. Altere a abertura máxima de 120° para 90° e observe o resultado.

3. Troque o tempo de 3 segundos por 5 segundos.

4. Altere o delay(15) dos movimentos para comparar uma abertura mais rápida e uma mais lenta.

Atenção em uma montagem real

No Tinkercad, o Micro Servo e o HC-SR04 são alimentados pelos 5V do Arduino para simplificar o laboratório. Em uma aplicação física, o servo pode exigir uma alimentação adequada à corrente e à carga mecânica. A protoboard também é indicada para prototipagem, não como montagem definitiva de uma lixeira em uso cotidiano.

99

99 — Exercícios

Esta seção reúne exercícios de revisão e aprofundamento dos fundamentos e dos projetos iniciais. As atividades estão organizadas por tema e misturam múltipla escolha interativa, questões abertas, completar código, interpretação de código e análise técnica. As questões abertas e os códigos não exibem gabarito.

Fundamentos de Arduino, eletricidade e protoboard

Revise a base conceitual antes dos projetos: alimentação, GND, circuito fechado, resistor, protoboard, entrada, saída, digital, analógico e PWM.

Questionário interativo — 10 questões de múltipla escolha

Clique em uma alternativa. Após a escolha, a questão será bloqueada e o sistema informará se a resposta está certa ou errada.
  1. FácilQual é a função principal do GND em um circuito com Arduino?
  2. FácilPor que usamos resistor em série com LED?
  3. FácilO que significa circuito fechado?
  4. IntermediárioNa protoboard, qual cuidado é essencial?
  5. FácilO que é uma saída no Arduino?
  6. FácilO que é uma entrada no Arduino?
  7. FácilQual opção representa melhor um sinal digital?
  8. IntermediárioQual opção representa melhor leitura analógica no Arduino Uno?
  9. IntermediárioO que o PWM permite fazer?
  10. FácilPor que começar pelo LED?

Questões abertas

  1. FácilExplique com suas palavras a diferença entre 5V e GND.
  2. FácilPor que o resistor é considerado um componente de proteção no circuito do LED?
  3. IntermediárioDescreva o que pode acontecer se o 5V for ligado diretamente ao GND.
  4. IntermediárioExplique a diferença entre sensor e atuador usando exemplos do material.
  5. DifícilExplique por que PWM não é a mesma coisa que saída analógica verdadeira.

Complete o código

Como pensar: Leia a descrição do circuito e procure no material qual pino ou comando corresponde à função pedida. Não tente adivinhar pelo nome da variável: pense primeiro no papel de cada parte do circuito.

Circuito usado: LED externo em um pino digital. Objetivo: configurar um pino como saída e ligar o LED.

// Complete o código conceitual.
// Pense: qual pino está ligado ao LED?
// Pense: qual modo permite controlar um componente de saída?

int pinoLed = ____;

void setup() {
  pinMode(____, OUTPUT);
}

void loop() {
  digitalWrite(pinoLed, ____);
}

Interpretação de código

Explique o que esse código faz, que tipo de componente poderia estar ligado ao A0 e que tipo de valores apareceriam no Monitor Serial.

int valor = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  valor = analogRead(A0);
  Serial.println(valor);
  delay(500);
}

Projeto 1 — LED protegido

Exercícios sobre alimentação elétrica, polaridade, resistor em série e uso do Arduino apenas como fonte de 5V e GND.

Questionário interativo — 10 questões de múltipla escolha

Clique em uma alternativa. Após a escolha, a questão será bloqueada e o sistema informará se a resposta está certa ou errada.
  1. FácilNeste projeto, qual é a função do Arduino?
  2. FácilO LED protegido acende porque:
  3. FácilO resistor de 300 Ω deve ficar:
  4. FácilSe o LED for invertido, o mais provável é:
  5. FácilO anodo do LED normalmente é:
  6. FácilO catodo do LED normalmente é:
  7. IntermediárioQual ligação seria perigosa?
  8. FácilPor que este projeto não precisa de programação funcional?
  9. FácilO que observar neste primeiro projeto?
  10. FácilQual conceito aparece neste projeto?

Questões abertas

  1. FácilExplique o caminho da corrente neste circuito.
  2. FácilPor que o LED precisa respeitar polaridade?
  3. IntermediárioExplique por que o resistor deve estar em série com o LED.
  4. FácilDescreva um erro de montagem que faria o LED não acender.
  5. IntermediárioExplique por que este projeto é importante antes do Blink.

Complete o código

Como pensar: Observe que este projeto não depende de comandos para ligar o LED. As lacunas devem reforçar a ideia de que o funcionamento vem da montagem elétrica, não da programação.

Circuito usado: LED protegido ligado diretamente ao 5V e GND. Objetivo: reconhecer que não há controle por programação neste projeto.

void setup() {
  // Nenhuma configuração é ______________ neste projeto.
}

void loop() {
  // Nenhum comando é ______________ neste projeto.
}

Interpretação de código

Explique por que esse código vazio ainda é coerente com o Projeto 1, desde que o circuito esteja montado corretamente.

void setup() {
}

void loop() {
}

Projeto 3 — Botão com LED

Exercícios sobre entrada digital, saída digital, botão tátil, INPUT_PULLUP, digitalRead, if/else e lógica invertida.

Questionário interativo — 10 questões de múltipla escolha

Clique em uma alternativa. Após a escolha, a questão será bloqueada e o sistema informará se a resposta está certa ou errada.
  1. FácilO botão está ligado ao:
  2. FácilO LED está ligado ao:
  3. FácilQual configuração é usada para o botão?
  4. FácilCom INPUT_PULLUP, botão solto é:
  5. FácilCom INPUT_PULLUP, botão pressionado é:
  6. FácilQual comando lê o botão?
  7. FácilO if é usado para:
  8. IntermediárioPor que o botão atravessa o vão central?
  9. IntermediárioEsperar pressionado = HIGH nesse circuito indica:
  10. FácilIdeia principal do projeto:

Questões abertas

  1. FácilExplique com suas palavras o que é uma entrada digital.
  2. IntermediárioExplique por que o botão pressionado é LOW neste projeto.
  3. FácilDescreva o que acontece quando o botão é pressionado.
  4. FácilQual é a diferença entre pino de entrada e pino de saída neste projeto?
  5. DifícilExplique como inverter a lógica para o LED acender quando o botão estiver solto.

Complete o código

Como pensar: Para completar, olhe primeiro a montagem: descubra qual pino recebe a informação do botão e qual pino controla o LED. Depois lembre que INPUT_PULLUP inverte a leitura: pressionado não é HIGH.

Circuito usado: botão no pino 2 e LED no pino 8. Objetivo: acender o LED somente enquanto o botão está pressionado.

int pinoLed = ____;
int pinoBotao = ____;

void setup() {
  pinMode(pinoLed, ______);
  pinMode(pinoBotao, ____________);
}

void loop() {
  int estadoBotao = digitalRead(__________);

  if (estadoBotao == ______) {
    digitalWrite(pinoLed, HIGH);
  } else {
    digitalWrite(pinoLed, LOW);
  }
}

Interpretação de código

Explique o comportamento desse código. O LED acende quando o botão está pressionado ou solto? Justifique com base no INPUT_PULLUP.

int pinoLed = 8;
int pinoBotao = 2;

void setup() {
  pinMode(pinoLed, OUTPUT);
  pinMode(pinoBotao, INPUT_PULLUP);
}

void loop() {
  int estadoBotao = digitalRead(pinoBotao);

  if (estadoBotao == HIGH) {
    digitalWrite(pinoLed, HIGH);
  } else {
    digitalWrite(pinoLed, LOW);
  }
}

Projeto 4 — Buzzer

Exercícios sobre saída sonora, buzzer ativo, pino digital 8, tone(), noTone() e controle de tempo com delay().

Questionário interativo — 10 questões de múltipla escolha

Clique em uma alternativa. Após a escolha, a questão será bloqueada e o sistema informará se a resposta está certa ou errada.
  1. FácilO buzzer está ligado ao:
  2. FácilO buzzer é dispositivo de:
  3. FácilA saída do buzzer é:
  4. FácilQual comando inicia som?
  5. FácilQual comando interrompe som?
  6. Fácildelay() controla:
  7. IntermediárioBuzzer ligado direto no 5V tende a:
  8. FácilCuidado elétrico importante no buzzer ativo:
  9. IntermediárioPor que usar tone() didaticamente?
  10. FácilComportamento esperado:

Questões abertas

  1. FácilExplique a diferença entre saída visual e saída sonora.
  2. FácilDescreva o ciclo de funcionamento do buzzer.
  3. FácilExplique a função do noTone().
  4. FácilO que acontece se reduzir os delays de 1000 para 300?
  5. DifícilExplique por que buzzer ativo não é ideal para notas musicais precisas.

Complete o código

Como pensar: Neste exercício, pense no buzzer como uma saída sonora. A lacuna do pino deve combinar com o circuito, e as lacunas dos comandos devem indicar quando o som começa e quando ele para.

Circuito usado: buzzer ativo no pino digital 8. Objetivo: emitir som intermitente.

int pinoBuzzer = ____;

void setup() {
  pinMode(pinoBuzzer, ______);
}

void loop() {
  ______(pinoBuzzer, 1000);
  delay(1000);

  ______(pinoBuzzer);
  delay(1000);
}

Interpretação de código

Explique como será o som produzido. O tempo de som será maior ou menor que o tempo de silêncio?

int pinoBuzzer = 8;

void setup() {
  pinMode(pinoBuzzer, OUTPUT);
}

void loop() {
  tone(pinoBuzzer, 1000);
  delay(200);
  noTone(pinoBuzzer);
  delay(1200);
}

Projeto 5 — Potenciômetro com PWM

Exercícios sobre entrada analógica, potenciômetro, analogRead, map, PWM, analogWrite e controle gradual de brilho.

Questionário interativo — 10 questões de múltipla escolha

Clique em uma alternativa. Após a escolha, a questão será bloqueada e o sistema informará se a resposta está certa ou errada.
  1. FácilO potenciômetro está ligado ao:
  2. FácilO LED está ligado ao:
  3. FácilanalogRead(A0) retorna:
  4. FácilanalogWrite() usa PWM na faixa:
  5. FácilQual função converte escalas?
  6. FácilTerminal central do potenciômetro vai para:
  7. IntermediárioPWM no Arduino Uno é:
  8. IntermediárioLED em pino sem PWM pode causar:
  9. IntermediárioInverter 5V e GND nas laterais do potenciômetro:
  10. FácilIdeia central:

Questões abertas

  1. FácilExplique a diferença entre entrada digital e entrada analógica.
  2. FácilExplique como o potenciômetro altera o brilho do LED.
  3. FácilPor que usamos map() neste projeto?
  4. IntermediárioExplique por que analogWrite() é usado mesmo o LED estando em um pino digital.
  5. DifícilDescreva a diferença entre valor lido em A0 e valor enviado ao pino 9.

Complete o código

Como pensar: Para preencher, identifique primeiro qual componente fornece a entrada e qual componente recebe a saída. Depois compare as faixas: a entrada analógica não usa a mesma escala da saída PWM.

Circuito usado: potenciômetro no A0 e LED no pino PWM 9. Objetivo: controlar o brilho do LED.

int pinoPotenciometro = ____;
int pinoLed = ____;

int leituraPotenciometro = 0;
int brilhoLed = 0;

void setup() {
  pinMode(pinoLed, ______);
}

void loop() {
  leituraPotenciometro = __________(pinoPotenciometro);

  brilhoLed = map(leituraPotenciometro, 0, ____, 0, ____);

  __________(pinoLed, brilhoLed);
}

Interpretação de código

Explique o que mudou em relação ao controle normal do brilho. O LED aumenta ou diminui o brilho quando a leitura do potenciômetro aumenta?

int pinoPotenciometro = A0;
int pinoLed = 9;

void setup() {
  pinMode(pinoLed, OUTPUT);
}

void loop() {
  int leitura = analogRead(pinoPotenciometro);
  int brilho = map(leitura, 0, 1023, 255, 0);
  analogWrite(pinoLed, brilho);
}

Projeto 6 — Fotoresistor (LDR)

Revise a leitura analógica do LDR, o controle do LED, o uso do monitor serial e a decisão feita com o comando if.

Questionário interativo — 6 questões de múltipla escolha

Clique em uma alternativa. Após a escolha, a questão será bloqueada e o sistema informará se a resposta está certa ou errada.
  1. FácilQual é a função do LDR no projeto?
  2. FácilEm qual entrada o LDR é lido no código?
  3. FácilQual porta controla o LED?
  4. MédioO que acontece quando a leitura fica menor que 40?
  5. MédioPara que serve o monitor serial neste projeto?
  6. MédioQual comando faz a leitura analógica do LDR?

Questões abertas

  1. Explique com suas palavras como o LDR ajuda o Arduino a perceber se o ambiente está claro ou escuro.
  2. Por que o LED não deve ser ligado sem resistor?
  3. O que você mudaria no código para o LED acender com outro nível de luminosidade?

Completar código

Complete mentalmente as partes que fazem a leitura do LDR e acendem o LED.

leitura = __________(pinoLDR);

if(leitura < 40){
  digitalWrite(pinoLED, ______);
}
else {
  digitalWrite(pinoLED, ______);
}

Projeto 10 — LED RGB

Revise os terminais do LED RGB de cátodo comum, o uso de um resistor por canal e as combinações digitais das cores vermelho, verde e azul.

Questionário interativo — 6 questões de múltipla escolha

Clique em uma alternativa. Após a escolha, a questão será bloqueada e o sistema informará se a resposta está certa ou errada.
  1. FácilQuantos LEDs internos existem em um LED RGB?
  2. FácilOnde o cátodo comum deve ser ligado neste projeto?
  3. FácilPor que há três resistores no circuito?
  4. IntermediárioQual combinação produz amarelo?
  5. IntermediárioO que faz definirCor(HIGH, LOW, HIGH)?
  6. IntermediárioQual comando liga ou desliga cada canal neste projeto?

Questões abertas

  1. Explique por que o LED RGB precisa de um resistor para cada canal.
  2. Qual é a diferença entre acender uma cor primária e combinar duas cores?
  3. O que aconteceria se o cátodo comum não estivesse ligado ao GND?

Completar código

Complete a chamada que deve acender ciano e a chamada que apaga o LED.

definirCor(____, ____, ____); // Ciano

definirCor(____, ____, ____); // Apagado

Desafio de sequência

Crie uma sequência que mostre: azul, magenta, vermelho, amarelo, verde e ciano. Coloque o LED apagado por 500 ms entre cada cor.

Projeto 11 — Servo Motor

Revise a ligação do Micro Servo, a diferença entre alimentação e sinal, o primeiro uso de biblioteca e os comandos attach() e write().

Questionário interativo — 6 questões de múltipla escolha

Clique em uma alternativa. Após a escolha, a questão será bloqueada e o sistema informará se a resposta está certa ou errada.
  1. FácilQual fio do Micro Servo é usado como sinal no circuito deste projeto?
  2. FácilEm qual pino está ligado o sinal do servo?
  3. FácilPara que serve #include <Servo.h>?
  4. IntermediárioO que faz meuServo.attach(pinoServo)?
  5. IntermediárioQual comando solicita que o servo vá aproximadamente para 90°?
  6. IntermediárioQual é uma característica importante do servomotor trabalhada neste projeto?

Questões abertas

  1. Explique, com suas palavras, o que é uma biblioteca no Arduino.
  2. Qual é a diferença entre attach() e write()?
  3. Cite duas aplicações práticas em que controlar a posição de um servo pode ser útil.

Completar código

Complete as linhas para associar o servo ao pino 6 e solicitar a posição de 120°.

const int pinoServo = ____;

void setup() {
  meuServo.________(pinoServo);
}

void loop() {
  meuServo.________(120);
}

Desafio de sequência

Sem utilizar for ou qualquer estrutura nova de repetição, escreva uma sequência que mova o servo para 20°, 70°, 110°, 160° e depois retorne para 70°. Utilize delay() entre as posições.

Laboratório 2 — Monitor Serial

Alterando a velocidade da leitura

No código do laboratório, troque delay(100) por delay(500). Execute o programa e observe o Monitor Serial.

Explique o que mudou na exibição dos valores.

Interpretando os valores

Gire o potenciômetro até uma posição intermediária e observe os valores exibidos no Monitor Serial.

Anote um exemplo de leitura e brilho. Depois explique por que o valor do brilho é menor que o valor da leitura.

Simplificando a saída

Modifique o código para mostrar apenas a leitura do potenciômetro no Monitor Serial.

O objetivo é exibir somente números, um por linha.

Laboratório 3 — Sensor de ré

Revise a integração entre distância, faixas condicionais, LEDs e buzzer.

Interpretando uma faixa

Considere que o sensor mediu 35 cm. Indique quantos LEDs devem acender e qual intervalo será utilizado pelo buzzer.

Alterando os limites

Modifique a lógica para que o alerta contínuo seja acionado somente quando a distância for menor ou igual a 5 cm.

Explique qual condição precisa ser alterada.

Analisando o sistema

Explique por que o Laboratório 3 é uma integração de conhecimentos anteriores e não a apresentação de um novo componente.

Laboratório 6 — LED RGB com botões

Revise INPUT_PULLUP, leitura digital e o controle independente dos três canais do LED RGB.

Interpretando INPUT_PULLUP

Explique por que o programa considera o botão pressionado quando digitalRead() retorna LOW.

Prevendo a cor

Considere que os botões vermelho e azul estão pressionados e o botão verde está solto. Qual cor deverá aparecer no LED? Explique usando os três canais RGB.

Alterando a resposta

Troque delay(100) por delay(1000). Antes de testar, preveja como essa mudança afetará a resposta do circuito aos botões.

Analisando o código

No laboratório, analogWrite() recebe apenas 0 e 255. Explique o que cada valor faz neste circuito e por que não ocorre variação gradual de brilho.

Integração de conhecimentos

Explique por que este conteúdo é um laboratório e não um novo projeto, identificando quais conhecimentos anteriores foram reutilizados.

Laboratório 7 — Lixeira automática

Revise a integração entre HC-SR04 e Servo Motor, o uso de bool como trava lógica e a estrutura de repetição for.

Questionário interativo — 6 questões de múltipla escolha

Clique em uma alternativa. Após a escolha, a questão será bloqueada e o sistema informará se a resposta está certa ou errada.
  1. FácilQual componente detecta a aproximação da mão?
  2. FácilQuando a tampa deve abrir?
  3. IntermediárioPara que serve podeAbrir?
  4. IntermediárioNo primeiro for, o que faz posicao += 1?
  5. IntermediárioPor que existem dois comandos for?
  6. IntermediárioO que precisa acontecer para podeAbrir voltar a true?

Entendendo o for

Explique as três partes de for (posicao = 0; posicao <= 120; posicao += 1): inicialização, condição e atualização.

Prevendo o comportamento

A mão permanece a 10 cm do sensor mesmo depois de a tampa fechar. Explique por que a tampa não abre novamente.

Completar código

Complete o laço para fechar a tampa gradualmente:

for (posicao = ____; posicao >= ____; posicao ____ 1) {
  meuServo.write(posicao);
  delay(15);
}

Alterando parâmetros

Modifique o programa para abrir a tampa quando a distância for 25 cm ou menos, abrir somente até 100° e permanecer aberta por 4 segundos.

Integração de conhecimentos

Explique por que a lixeira automática é um laboratório e não um projeto de componente novo. Identifique quais conhecimentos dos Projetos 7 e 11 foram reutilizados e qual conceito de programação foi acrescentado.