← Voltar ao Hub Principal

Laboratório Prático: Desafios Arduino

Baseado nos componentes fundamentais do vídeo, completa os desafios abaixo para dominares a eletrónica digital.

Download Arduino IDE || Tinkercad site

Desafio 1: O Sinalizador (LED)

Objetivo: Fazer um LED piscar com intervalos de 1 segundo.

Material: 1x Arduino Uno, 1x LED, 1x Resistor 220Ω, Jumpers.
void setup() {
  pinMode(13, OUTPUT); // Configura o pino 13 como saída
}

void loop() {
  digitalWrite(13, HIGH); // Liga o LED
  delay(1000);            // Espera 1 segundo
  digitalWrite(13, LOW);  // Desliga o LED
  delay(1000);
}
Experimenta: Tenta agora simular o funcionamento de um semáforo real. O teu código deve ativar o LED verde por 5 segundos, passar para o amarelo durante 1 segundo e terminar no vermelho por mais 5 segundos. Se tiveres alguma dúvida, consulta
Ver Simulação no Tinkercad

Desafio 1.1: Uma luz controlada por um LDR (Light Dependent Resistor)

Objetivo: Acender o led quando fica escuro

Esquema de Montagem
LDR (Fotoresistor), LED
int temt6000Pin = A0;
float light;
int light_value;
void setup()
{
  Serial.begin(112500);
  pinMode(temt6000Pin, INPUT);
  pinMode(11, OUTPUT);
}

void loop()
{
  int light_value=analogRead(temt6000Pin);
  //light = light_value * 0.0976;
  light = light_value;
  Serial.println(light);
  delay(100);
  if(light_value<300){
  	digitalWrite(11, HIGH);
  }
  else {digitalWrite(11, LOW);}
}
}

Desafio 2: Radar de Proximidade (Ultrassónico)

Objetivo: Medir a distância de um objeto e mostrar no Monitor Série.

Material: Sensor HC-SR04, Jumpers.
// Definição dos pinos do sensor para facilitar a leitura do código
const int trigPin = 9;  // Pino que envia o sinal (gatilho)
const int echoPin = 10; // Pino que recebe o eco (retorno)

void setup() {
  // Inicia a comunicação com o Monitor Série a 9600 bits por segundo
  Serial.begin(9600);
  
  // Define o modo de cada pino
  pinMode(trigPin, OUTPUT); // O pino Trig emite som (Saída)
  pinMode(echoPin, INPUT);  // O pino Echo deteta som (Entrada)
}

void loop() {
  // Limpa o pino Trig para garantir um sinal limpo
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  
  // Envia um pulso ultrassónico durante 10 microssegundos
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  // Mede o tempo que o som demorou a voltar (em microssegundos)
  //long (Longo): Consegue guardar números muito maiores (até mais de 2 mil milhões).
  long duracao = pulseIn(echoPin, HIGH);
  
  /* Cálculo da distância em cm:
     O som viaja a ~340m/s (0.034 cm/us). 
     Dividimos por 2 porque o som vai até ao objeto e volta.
  */
  int distancia = duracao * 0.034 / 2; 
  
  // Imprime o resultado no Monitor Série
  Serial.print("Distancia: ");
  Serial.print(distancia);
  Serial.println(" cm");
  
  // Aguarda meio segundo antes da próxima medição
  delay(500);
}

Desafio 2.1: Radar de Proximidade (Ultrassónico)

Objetivo: Medir a distância de um objeto e mostrar no Monitor Série.

Esquema de Montagem
Sensor Ultrassônico: VCC no 5V, GND no GND, Trig no pino 9 e Echo no pino 10.
Buzzer: Polo positivo no pino 8 e polo negativo no GND.
// Definição dos pinos
const int trigPin = 9;
const int echoPin = 10;
const int buzzerPin = 8;

// Variáveis
long duracao;
float distanciaMM;

void setup() {
  pinMode(trigPin, OUTPUT); 
  pinMode(echoPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // Limpa o trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  // Ativa o sensor por 10 microsegundos
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Lê o tempo de resposta em microsegundos
  duracao = pulseIn(echoPin, HIGH);

  // Cálculo da distância:
  // (Tempo * Velocidade do Som) / 2
  // Em cm seria: duracao * 0.034 / 2
  // Para milímetros, multiplicamos o resultado por 10:
  distanciaMM = (duracao * 0.034 / 2) * 10;

  // Exibe o valor no Monitor Serial
  Serial.print("Distancia: ");
  Serial.print(distanciaMM);
  Serial.println(" mm");

  // Lógica do Buzzer (Aciona se for <= 50mm)
  if (distanciaMM <= 50) {
    digitalWrite(buzzerPin, HIGH); // Liga o buzzer
  } else {
    digitalWrite(buzzerPin, LOW);  // Desliga o buzzer
  }

  delay(100); // Pequena pausa para estabilidade
}

Desafio 3: Limpa-Vidros Automático (Servo)

Objetivo: Fazer um Servo Motor oscilar entre 0º e 180º.

#include <Servo.h> // Inclui a biblioteca necessária para controlar servomotores
 

Servo meuServo;    // Cria um objeto (como se fosse um nome próprio) para o nosso servo

void setup() {
  // Indica ao Arduino que o servo está fisicamente ligado ao pino digital 6
  // Nota: Os servos devem ser ligados a pinos PWM (identificados com ~)
  meuServo.attach(6); 
}

void loop() {
  meuServo.write(0);   // Roda o motor para a posição de 0 graus
  delay(1000);         // Aguarda 1 segundo nesta posição
  
  meuServo.write(180); // Roda o motor para a posição de 180 graus (o limite máximo)
  delay(1000);         // Aguarda 1 segundo nesta posição
}

🏆 Desafio Final: Sistema de Estacionamento

O Desafio: Cria um sistema onde o **Sensor Ultrassónico** deteta um carro. Se a distância for menor que 10cm, o **LED** acende e o **Servo Motor** levanta 90º (abre a cancela).

Integração Total: Este desafio combina Lógica de Entrada (Sensor), Processamento (IF/ELSE) e Saídas (LED e Servo).

Tenta escrever o código sozinho usando os exemplos anteriores como base!

Solução