Skip to content

Instantly share code, notes, and snippets.

@nunesfb
Last active August 18, 2025 19:50
Show Gist options
  • Select an option

  • Save nunesfb/9c1f1fb222ab82e54b6f0d13dcb9c960 to your computer and use it in GitHub Desktop.

Select an option

Save nunesfb/9c1f1fb222ab82e54b6f0d13dcb9c960 to your computer and use it in GitHub Desktop.
Projetos com Arduino

Projetos Integrados com Arduino - Sensores e Módulos (15 projetos, conexões detalhadas + códigos)

Este documento contém 15 projetos práticos que combinam diferentes sensores e módulos do Arduino.
Cada projeto traz ideia, fluxo, componentes, conexões de pinos (tabelas), notas e um exemplo de código funcional.

Boas práticas rápidas

  • Use resistores de 220–330 Ω em cada LED.
  • Mantenha GND comum entre Arduino e fontes externas de atuadores (relés/servos).
  • Em cargas 127/220 V, procure um profissional qualificado.
  • Para botões, prefira INPUT_PULLUP + debounce por software.
  • Alguns módulos de relé são ativo-LOW; ajuste a lógica no código.

1) Estação Meteorológica de Mesa

(DHT11/DHT22 + LCD 16x2)

Ideia: Exibir temperatura e umidade no LCD e registrar dados via Serial.

Componentes:

  • Arduino Uno/Nano
  • DHT11 (ou DHT22)
  • LCD 16x2 (modo 4 bits)
  • Potenciômetro 10 kΩ (contraste do LCD)
  • Jumpers + Protoboard

Conexões (sugeridas):

Dispositivo Pino Arduino
DHT VCC 5V (ou 3.3V para alguns DHT22)
DHT GND GND
DHT DATA D7 (10 kΩ pull‑up para VCC se sensor de 4 pinos)
LCD RS D12
LCD E D11
LCD D4 D5
LCD D5 D4
LCD D6 D3
LCD D7 D2
LCD V0 (contraste) pino central do potenciômetro (extremos em 5V e GND)
LCD A/K (backlight) 5V (ideal com 100–220 Ω) / GND

Código:

#include <LiquidCrystal.h>
#include <DHT.h>

#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);
  dht.begin();
  Serial.begin(9600);
}

void loop() {
  float t = dht.readTemperature();
  float h = dht.readHumidity();

  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(t);
  lcd.print(" C   ");

  lcd.setCursor(0, 1);
  lcd.print("Umid: ");
  lcd.print(h);
  lcd.print("%   ");

  delay(2000);
}

2) Lâmpada Automática Inteligente

(LDR + Relé)

Ideia: Aciona uma lâmpada pelo relé quando escurece (LDR baixo).

Componentes:

  • LDR
  • Resistor 10 kΩ (divisor)
  • Módulo Relé 5 V (1 canal)
  • Carga (ex.: fita 12 V) + fonte externa
  • Jumpers + Protoboard

Conexões (lógica):

Dispositivo Pino Arduino
LDR Lado 1 5V
LDR Lado 2 A0 e resistor 10 kΩ → GND
Relé IN D8
Relé VCC/GND 5V/GND

Contatos de potência: COM → +Fonte, NO → +Carga, −Carga → −Fonte.

Código:

int ldr = A0;
int rele = 8;

void setup() {
  pinMode(rele, OUTPUT);
  Serial.begin(9600);
  digitalWrite(rele, LOW); // ajuste se seu relé for ativo-LOW
}

void loop() {
  int valor = analogRead(ldr);
  Serial.println(valor);

  if (valor < 300) {        // ajuste o limiar conforme ambiente
    digitalWrite(rele, HIGH);
  } else {
    digitalWrite(rele, LOW);
  }
  delay(500);
}

3) Alarme de Segurança com Controle Remoto

(PIR + Buzzer + Relé + Receptor IR)

Ideia: Controle IR arma/desarma. Se armado e PIR detecta movimento: buzzer + relé por alguns segundos.

Componentes: PIR HC‑SR501, Receptor IR (VS1838B/TSOP), buzzer ativo, módulo relé 5 V.

Conexões:

Dispositivo Pino Arduino
PIR VCC/GND/OUT 5V/GND/D2
Receptor IR OUT D5
Receptor IR VCC/GND 5V/GND
Buzzer + D3 (GND no outro pino)
Relé IN D4 (VCC/GND → 5V/GND)

Código (IRremote estilo antigo):

#include <IRremote.h>

int pir = 2, buzzer = 3, rele = 4, irPin = 5;
bool alarmeAtivo = false;
IRrecv irrecv(irPin);
decode_results results;

void setup() {
  pinMode(pir, INPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(rele, OUTPUT);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.value == 0xFFA25D) alarmeAtivo = !alarmeAtivo; // substitua pelo seu código
    irrecv.resume();
  }
  if (alarmeAtivo && digitalRead(pir)) {
    digitalWrite(buzzer, HIGH);
    digitalWrite(rele, HIGH);
    delay(3000);
  } else {
    digitalWrite(buzzer, LOW);
    digitalWrite(rele, LOW);
  }
}

Notas: antes, use um “sniffer IR” para descobrir os códigos do seu controle.


4) Assistente de Estacionamento

(HC-SR04 + Buzzer + LEDs V/A/R)

Ideia: Mede distância e indica por LEDs e beeps conforme aproximação.

Componentes: HC‑SR04, 3× LEDs + resistores, buzzer.

Conexões:

Dispositivo Pino Arduino
HC‑SR04 TRIG/ECHO D9/D10
LED Verde A D11 (resistor)
LED Amarelo A D12 (resistor)
LED Vermelho A D13 (resistor)
Buzzer + D3 (ou D8), GND no outro pino

Código:

#define trig 9
#define echo 10
#define buzzer 3
#define ledR 13
#define ledG 11
#define ledY 12

long duracao;
int distancia;

void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(ledR, OUTPUT);
  pinMode(ledG, OUTPUT);
  pinMode(ledY, OUTPUT);
}

void loop() {
  digitalWrite(trig, LOW); delayMicroseconds(2);
  digitalWrite(trig, HIGH); delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duracao = pulseIn(echo, HIGH, 30000);
  distancia = duracao * 0.034 / 2;

  digitalWrite(ledG, distancia > 60);
  digitalWrite(ledY, distancia <= 60 && distancia > 30);
  digitalWrite(ledR, distancia <= 30);

  if (distancia <= 30 && distancia > 10) { tone(buzzer, 2000, 200); delay(150); }
  else if (distancia <= 10)               { tone(buzzer, 2500, 100); delay(80);  }
  else                                    { noTone(buzzer);          delay(200); }
}

5) Semáforo com Botão de Pedestre + Buzzer

(3 LEDs + Botão + Buzzer)

Ideia: Ciclo veicular; se pedestre solicitar, para no vermelho e bipa por alguns segundos.

Componentes: 3× LEDs + resistores, botão, buzzer.

Conexões:

Dispositivo Pino Arduino
LED V/A/R (ânodos) A D11/D12/D13 (com resistores)
Botão um lado D2 (modo INPUT_PULLUP)
Botão outro lado GND
Buzzer + D8 (GND no outro pino)

Código:

int ledV = 11, ledA = 12, ledE = 13, botao = 2, buzzer = 8;
bool pedido=false;

void setup() {
  pinMode(ledV, OUTPUT);
  pinMode(ledA, OUTPUT);
  pinMode(ledE, OUTPUT);
  pinMode(botao, INPUT_PULLUP);
  pinMode(buzzer, OUTPUT);
}

void cicloBase(){
  // Verde 5s
  digitalWrite(ledV, HIGH); digitalWrite(ledA, LOW); digitalWrite(ledE, LOW);
  for(int i=0;i<50;i++){ if(!digitalRead(botao)) pedido=true; delay(100); }
  // Amarelo 2s
  digitalWrite(ledV, LOW); digitalWrite(ledA, HIGH); digitalWrite(ledE, LOW);
  for(int i=0;i<20;i++){ if(!digitalRead(botao)) pedido=true; delay(100); }
  // Vermelho 5s
  digitalWrite(ledV, LOW); digitalWrite(ledA, LOW); digitalWrite(ledE, HIGH);
  delay(5000);
}

void travessia(){
  digitalWrite(ledV, LOW); digitalWrite(ledA, LOW); digitalWrite(ledE, HIGH);
  for(int i=0;i<8;i++){ tone(buzzer, 2000, 200); delay(300); }
  noTone(buzzer);
}

void loop() {
  pedido=false;
  cicloBase();
  if(pedido) travessia();
}

6) Termostato Simples

(DHT + Relé + LCD opcional)

Ideia: Liga exaustor (relé) se temperatura > limiar; histerese para estabilidade.

Componentes: DHT11/22, módulo relé 5 V, (opcional) LCD.

Conexões: DHT DATA→D7, Relé IN→D8 (VCC/GND→5V/GND).

Código (com histerese):

#include <DHT.h>
#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int rele = 8;
const bool ACTIVE_LOW = true;
const float T_ON=27.0, T_OFF=26.0;
bool on=false;

void writeRelay(bool s){
  digitalWrite(rele, ACTIVE_LOW ? (s?LOW:HIGH) : (s?HIGH:LOW));
}

void setup() {
  dht.begin();
  pinMode(rele, OUTPUT);
  writeRelay(false);
  Serial.begin(9600);
}

void loop() {
  float t = dht.readTemperature();
  if(isnan(t)){ Serial.println("Falha DHT"); delay(2000); return; }

  if(!on && t > T_ON){ on=true; writeRelay(true); }
  else if(on && t < T_OFF){ on=false; writeRelay(false); }

  Serial.print("T="); Serial.print(t); Serial.print("C  Fan="); Serial.println(on?"ON":"OFF");
  delay(2000);
}

7) Fechadura com Servo e Controle IR

(Servo SG90 + Receptor IR)

Ideia: Abrir/fechar por controle remoto IR.

Componentes: Servo SG90, receptor IR.

Conexões: Servo Sinal→D9, V+→5V, GND→GND; IR OUT→D2 (VCC/GND→5V/GND).

Código:

#include <Servo.h>
#include <IRremote.h>

Servo servo;
IRrecv irrecv(2);
decode_results results;

void setup() {
  servo.attach(9);
  servo.write(0);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.value == 0xFFA25D) servo.write(0);   // FECHA (exemplo)
    if (results.value == 0xFF629D) servo.write(100); // ABRE  (exemplo)
    irrecv.resume();
  }
}

8) Display de Distância

(HC-SR04 + Display 7 segmentos 4 dígitos)

Ideia: Mostrar distância em cm em 4 dígitos 7‑segmentos.

Componentes: HC‑SR04, display 7‑seg 4 dígitos (comum ânodo/cátodo), resistores em cada segmento.

Conexões (exemplo com biblioteca SevSeg, comum cátodo):

Pinos Arduino
Dígitos (D1..D4) D2, D3, D4, D5
Segmentos (a,b,c,d,e,f,g,dp) D6, D7, D8, D11, D12, D13, A0, A1
HC‑SR04 TRIG/ECHO D9/D10

Código:

#include <SevSeg.h>
SevSeg sevseg;
#define trig 9
#define echo 10

void setup() {
  byte numDigits = 4;
  byte digitPins[] = {2, 3, 4, 5};
  byte segmentPins[] = {6, 7, 8, 11, 12, 13, A0, A1};
  sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop() {
  digitalWrite(trig, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  long duracao = pulseIn(echo, HIGH, 30000);
  int distancia = duracao * 0.034 / 2;
  sevseg.setNumber(distancia);
  sevseg.refreshDisplay();
}

9) Persiana Sensível à Luz

(LDR + Servo)

Ideia: Abre/fecha persiana conforme luminosidade.

Componentes: LDR + 10 kΩ, Servo SG90.

Conexões: LDR→A0 (com 10 kΩ para GND), Servo Sinal→D9, V+→5V, GND→GND.

Código:

#include <Servo.h>
Servo servo;
int ldr = A0;
const int TH_OPEN=700, TH_CLOSE=400; // ajuste ao seu ambiente

void setup() {
  servo.attach(9);
}

void loop() {
  int v = analogRead(ldr);
  if (v > TH_OPEN) servo.write(100);    // abre
  else if (v < TH_CLOSE) servo.write(10); // fecha
  delay(300);
}

10) Indicador de Temperatura com LED RGB

(DHT + LED RGB)

Ideia: Cor indica faixa de temperatura (azul=frio, verde=ok, vermelho=quente).

Componentes: DHT11/22, LED RGB (comum cátodo), resistores.

Conexões: DHT DATA→D7; RGB R/G/B→D9/D10/D11 (com resistores), COM→GND.

Código:

#include <DHT.h>
#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int R=9, G=10, B=11;

void setRGB(int r,int g,int b){ // 0..255
  analogWrite(R,r); analogWrite(G,g); analogWrite(B,b);
}

void setup(){
  dht.begin();
  pinMode(R,OUTPUT); pinMode(G,OUTPUT); pinMode(B,OUTPUT);
}

void loop(){
  float t=dht.readTemperature();
  if(isnan(t)) { setRGB(0,0,0); delay(500); return; }
  if(t<18)      setRGB(0,0,255);   // azul
  else if(t<26) setRGB(0,255,0);   // verde
  else          setRGB(255,0,0);   // vermelho
  delay(800);
}

11) Dispenser Automático de Álcool Gel

(PIR + Servo)

Ideia: Detecta mão (PIR) e aciona servo para pressionar a bomba.

Componentes: PIR, Servo SG90.

Conexões: PIR OUT→D2, VCC/GND→5V/GND; Servo Sinal→D9, V+→5V, GND→GND.

Código:

#include <Servo.h>
Servo s;
const int PIR=2;

void setup(){
  s.attach(9);
  pinMode(PIR, INPUT);
  s.write(0);
}

void loop(){
  if(digitalRead(PIR)){
    s.write(90);
    delay(800);
    s.write(0);
    delay(800);
  }
}

12) Controle de Ventilador por Controle Remoto

(Receptor IR + Relé + Buzzer)

Ideia: Liga/desliga um ventilador (via relé) pelo controle IR; buzzer confirma ação.

Componentes: Receptor IR, Relé 5 V, Buzzer.

Conexões: IR OUT→D2, Relé IN→D8, Buzzer→D3 (opcional), VCC/GND→5V/GND.

Código:

#include <IRremote.h>
int rele = 8, buz=3;
IRrecv irrecv(2); decode_results r;

void setup() {
  pinMode(rele, OUTPUT);
  pinMode(buz, OUTPUT);
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&r)) {
    if (r.value == 0xFFA25D) { digitalWrite(rele, HIGH); tone(buz,1200,150); }
    if (r.value == 0xFF629D) { digitalWrite(rele, LOW);  tone(buz,800,120);  }
    irrecv.resume();
  }
}

13) Luz de Segurança

(PIR + LDR + Relé)

Ideia: Liga luz externa apenas à noite (LDR baixo) e com movimento (PIR).

Componentes: PIR, LDR + 10 kΩ, Relé 5 V.

Conexões: PIR OUT→D2, LDR→A0 (com 10 kΩ para GND), Relé IN→D8.

Código:

int pir=2, ldr=A0, rele=8;

void setup() {
  pinMode(pir, INPUT);
  pinMode(rele, OUTPUT);
}

void loop() {
  bool escuro = analogRead(ldr) < 350; // ajuste limiar
  bool mov = digitalRead(pir);
  digitalWrite(rele, (escuro && mov) ? HIGH : LOW);
  delay(50);
}

14) Medidor de Ruído com Alarme

(Módulo Microfone + Buzzer + LCD opcional)

Ideia: Se nível de ruído passar limiar, aciona buzzer (e pode exibir no LCD).

Componentes: Módulo microfone analógico (AO), Buzzer, (opcional) LCD.

Conexões: Microfone AO→A0, VCC/GND→5V/GND; Buzzer→D3.

Código:

int micPin=A0, buzzer=3;

void setup() {
  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int valor=analogRead(micPin);
  Serial.println(valor);
  digitalWrite(buzzer, valor>500 ? HIGH : LOW); // ajuste limiar
  delay(150);
}

15) Registrador de Clima com Cartão SD

(DHT + Módulo SD + RTC)

Ideia: Registra temperatura/umidade com timestamp em cartão SD.

Componentes: DHT11/22, Módulo SD (SPI), RTC (DS1307/DS3231).

Conexões (UNO padrão):

Dispositivo Pino Arduino
DHT DATA D7
SD CS D10
SD MOSI/MISO/SCK D11/D12/D13
RTC SDA/SCL A4/A5 (UNO)
Todos VCC/GND 5V/GND

Código:

#include <SD.h>
#include <DHT.h>
#include <RTClib.h>

#define DHTPIN 7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 rtc;

File arquivo;

void setup() {
  Serial.begin(9600);
  if(!SD.begin(10)){ Serial.println("Falha SD"); while(1); }
  if(!rtc.begin()){ Serial.println("Falha RTC"); }
  dht.begin();
}

void loop() {
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  DateTime now = rtc.now();

  arquivo = SD.open("clima.txt", FILE_WRITE);
  if (arquivo) {
    arquivo.print(now.timestamp());
    arquivo.print(" T:");
    arquivo.print(t);
    arquivo.print("C U:");
    arquivo.println(h);
    arquivo.close();
    Serial.println("Gravado.");
  } else {
    Serial.println("Falha ao abrir arquivo.");
  }
  delay(5000);
}

Observação: Caso use versões recentes de algumas bibliotecas (ex.: IRremote), a API e pinos padrão podem mudar. Ajuste #include e pinos conforme a documentação da sua versão.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment