Projetos X

Desafios Integrados

Uma coleção de projetos focados em integração de componentes e soluções tecnológicas.

Projeto 03 - Código Modificado

Revisão do código para atender ao mesmo cenário proposto no Exercício 03.

Diagrama de Blocos

Diagrama de Blocos

Código do Projeto


// Projeto Buz_Led_Push
int ledVermelho = 10;
int ledAmarelo  = 11;
int ledVerde    = 12;
 
int botaoVermelho = 2;
int botaoAmarelo = 3;
int botaoVerde = 4;
 
int buzzer = 8;
 
void setup() {
  // put your setup code here, to run once:
  pinMode(ledVermelho, OUTPUT);
  pinMode(botaoVermelho, INPUT);

 
  pinMode(ledAmarelo, OUTPUT);
  pinMode(botaoAmarelo, INPUT);

 
  pinMode(ledVerde, OUTPUT);
  pinMode(botaoVerde, INPUT);

 
  pinMode(buzzer, OUTPUT);  
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
 
  if (digitalRead(botaoVermelho)==HIGH) {
      digitalWrite(ledVermelho, !(digitalRead(ledVermelho)) );
      delay(200);     
  }
 
  if (digitalRead(botaoAmarelo)==HIGH) {   
       digitalWrite(ledAmarelo,!(digitalRead(ledAmarelo)) );
       delay(200);     
  } 
   
  if (digitalRead(botaoVerde)==HIGH) {   
       digitalWrite(ledVerde, !(digitalRead(ledVerde)) );
       delay(200);     
   }
   
 
  if (   (digitalRead(ledVermelho) == HIGH && digitalRead(ledAmarelo) == HIGH)
      || (digitalRead(ledVermelho) == HIGH && digitalRead(ledVerde) == HIGH)
      || (digitalRead(ledAmarelo) == HIGH && digitalRead(ledVerde) == HIGH)
     ) 
     {
      digitalWrite(buzzer, HIGH);    
     }
else 
     {    
      digitalWrite(buzzer, LOW);
     }  
} 


Sequencial de LEDs

Protótipo

Código do Projeto


#define ledVERM 2
#define ledAMAR 5
#define ledVERD 8
#define ledAZUL 9
#define ledBRAN 10

void setup()
{
  pinMode(ledVERM, OUTPUT);
  pinMode(ledAMAR, OUTPUT);
  pinMode(ledVERD, OUTPUT);
  pinMode(ledAZUL, OUTPUT);
  pinMode(ledBRAN, OUTPUT);  
 
}

void loop()
{
  digitalWrite(ledVERM, HIGH);
  digitalWrite(ledAMAR, HIGH);
  digitalWrite(ledVERD, HIGH);
  digitalWrite(ledAZUL, HIGH);
  digitalWrite(ledBRAN, HIGH);     
  delay(1000); // Wait for 1000 millisecond(s)
  digitalWrite(ledVERM, LOW);
  digitalWrite(ledAMAR, LOW);
  digitalWrite(ledVERD, LOW);
  digitalWrite(ledAZUL, LOW);
  digitalWrite(ledBRAN, LOW);  
  delay(1000); // Wait for 1000 millisecond(s)
} 

Código - Sequencial de LEDs - Exercício 01

Instruções: Analisar o próximo código; Modificar a sua estrutura utilizando a SELEÇÃO COMPOSTA.

Código do Projeto


#define ledVERM 2
#define ledAMAR 5
#define ledVERD 8
#define ledAZUL 9
#define ledBRAN 10

int controle;
void setup()
{
  pinMode(ledVERM, OUTPUT);
  pinMode(ledAMAR, OUTPUT);
  pinMode(ledVERD, OUTPUT);
  pinMode(ledAZUL, OUTPUT);
  pinMode(ledBRAN, OUTPUT);  
 
}

void loop()
{
  digitalWrite(ledVERM, HIGH);
  delay(1000);
 
  if (digitalRead(ledVERM == HIGH)) 
  {
    digitalWrite(ledAMAR, LOW);      
      digitalWrite(ledVERD, HIGH);  
    digitalWrite(ledAZUL, HIGH);      
      digitalWrite(ledBRAN, HIGH);  
    delay(2000);
    digitalWrite(ledVERM, LOW);
    
  }
      
  if (digitalRead(ledVERM == LOW)) 
  {    
    digitalWrite(ledAMAR, LOW);      
      digitalWrite(ledVERD, LOW);  
    digitalWrite(ledAZUL, LOW);      
      digitalWrite(ledBRAN, HIGH); 
    delay(2000);
    digitalWrite(ledVERM, HIGH);
    
  }   
        
}

Resolvido


#define ledVERM 2
#define ledAMAR 5
#define ledVERD 8
#define ledAZUL 9
#define ledBRAN 10

void setup()
{
  pinMode(ledVERM, OUTPUT);
  pinMode(ledAMAR, OUTPUT);
  pinMode(ledVERD, OUTPUT);
  pinMode(ledAZUL, OUTPUT);
  pinMode(ledBRAN, OUTPUT);  
  digitalWrite(ledVERM, HIGH); 
}

void loop()
{
  digitalWrite(ledAMAR, LOW);      
  digitalWrite(ledBRAN, HIGH);    
  if (digitalRead(ledVERM) == HIGH)
  {
    digitalWrite(ledVERD, HIGH);  
    digitalWrite(ledAZUL, HIGH);              
    delay(2000);
    digitalWrite(ledVERM, LOW);
  }
  else  
  {
    digitalWrite(ledVERD, LOW);  
    digitalWrite(ledAZUL, LOW);
    delay(2000);
    digitalWrite(ledVERM, HIGH);
  }  
}

Semáforo

Desenvolver um sistema de controle de semáforo baseado em Arduino, utilizando uma chave tátil (push-button) e um sensor LDR, no qual a ativação do botão ou a detecção de baixa luminosidade resulte na redução do tempo do sinal verde para veículos.

Diagrama de Blocos

Diagrama de Blocos

Protótipo do Circuito

Protótipo do Circuito

Código do Projeto

Download .INO

// para os carros
#define vermelhoCar 13
#define amareloCar 12
#define verdeCar 8
#define buzzer 3
#define botao 2
#define ldr A0

//para os pedestres
#define vermelhoPed 7
#define verdePed 4

int tempoVerdeCarro = 10000;
int tempoAmarelo = 3000;

void setup(){
  pinMode(vermelhoCar, OUTPUT);
  pinMode(amareloCar, OUTPUT);
  pinMode(verdeCar, OUTPUT);
  pinMode(vermelhoPed, OUTPUT);
  pinMode(verdePed, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(botao, INPUT);
  pinMode(ldr, INPUT);
  Serial.begin(9600);
}

void loop(){
  // o vermelhoCar inicializa com o valor LOW 
  //semaforo parte pedestres 
  if (digitalRead(vermelhoCar) == LOW)
  {
    digitalWrite(vermelhoCar, HIGH);
    digitalWrite(verdePed, HIGH);
    sonoro();
    digitalWrite(verdePed, LOW);
    digitalWrite(vermelhoPed, HIGH);
    digitalWrite(vermelhoCar, LOW);
    digitalWrite(verdeCar, HIGH);
    }
  //controle do botao
  int tempo;
  bool pressionou = false;
  while (tempo < tempoVerdeCarro)
  {
  //ldr > 50 pouca luz
  // para verificar o valor do ldr na tela
  //Serial.println(analogRead(ldr));
  if  ((  digitalRead(botao)  ||  analogRead(ldr) > 50) &&  !pressionou)
  {
  tempo = tempo + 2000;
  pressionou = true;
  }
  else
  {
  tempo = tempo + 1000;
  }
  delay(1000);
  }
  //fim do controle do botao 
  digitalWrite(verdeCar, LOW);
  digitalWrite(amareloCar, HIGH);
  delay(tempoAmarelo);  
  for (int y = 0; y <= 2; y++)
  {
  digitalWrite(amareloCar, LOW);
  delay(300);
  digitalWrite(amareloCar, HIGH);
  delay(300);
  }
  digitalWrite(amareloCar, LOW);
  digitalWrite(vermelhoPed, LOW);
}

void sonoro()
{
noTone(buzzer);
for (int x = 1; x<=3; x++){
  tone(buzzer,30);  
  delay(1000);
  noTone(buzzer);
  delay(1000);
}
for (int x = 0; x<=3; x++){
  tone(buzzer,30);
  delay(500);
  noTone(buzzer);
  delay(500);
}
}

Controle de Cancela

Desenvolver um sistema que simule a abertura e o fechamento de uma cancela com micro servo, utilizando um sensor de movimento ou push-button como dispositivo de acionamento, emitindo um aviso sonoro (buzzer) durante o processo de fechamento.

Protótipo do Circuito

Protótipo do Circuito

Código do Projeto


#include <Servo.h>
#define servo1 3 
#define presenca 2
#define ledverm 10
#define ledverd 9
#define buzzer 8

Servo s1;  
int pos1; // posição do servo 1
int botao = 4; //botao para acionar a cancela


void setup() {
  // put your setup code here, to run once:
  Serial.flush();
  pinMode(presenca,INPUT);
  pinMode(ledverm, OUTPUT);
  pinMode(ledverd, OUTPUT);
  digitalWrite(ledverm, HIGH);
  s1.attach(servo1);
  Serial.begin(9600);
  s1.write(0); // Iniciar servo 1 na posição zero
  pinMode(buzzer, OUTPUT);
  pinMode(botao, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
int x = digitalRead(presenca);  
int y = digitalRead(botao); //ler o botao 
if (x == HIGH || y == HIGH) {    
    for (pos1 = 0; pos1 < 90; pos1++) {
        s1.write(pos1);
        delay(40);        
    }
    digitalWrite(ledverd, HIGH);
    digitalWrite(ledverm, LOW);
    delay(10000);
    digitalWrite(ledverd, LOW);
    digitalWrite(ledverm, HIGH);
    digitalWrite(buzzer, HIGH); 
    for(pos1 = 90; pos1 > 0; pos1--)
    {
      s1.write(pos1);
       delay(40);       
    }    
    digitalWrite(buzzer, LOW); 
}
}

Sistema de Segurança (Gás e Temperatura)

Desenvolver um projeto para monitorar a temperatura e detectar a presença de gás e/ou fumaça em dois ambientes distintos. O sistema deverá utilizar um buzzer para emitir um aviso sonoro sempre que a temperatura atingir um nível elevado ou quando for detectada a presença de gás e/ou fumaça em qualquer um dos ambientes. Dois LEDs RGB deverão ser empregados, um para cada ambiente, indicando a condição normal com a cor verde e sinalizando situação de alerta com a cor vermelha em caso de aumento de temperatura ou detecção de gás e/ou fumaça.

Diagrama de Blocos

Diagrama de Blocos

Protótipo do Circuito

Protótipo do Circuito

Protótipo do Circuito-Execução

Protótipo do Circuito

Código do Projeto

Download .INO

#define rgb1R 2
#define rgb1B 3
#define rgb1G 4

#define rgb2R 5
#define rgb2B 6
#define rgb2G 7

#define buzzer 8

#define tempAmbiente1 A0
#define tempAmbiente2 A1
char sit_Ambiente1; 
char sit_Ambiente2; 
#define limiteMaxTemp 40

#define sensorGas1 A3
#define sensorGas2 A4
#define limiteMaxGas 600

void setup(){ 
  pinMode(rgb1R, OUTPUT);
  pinMode(rgb1G, OUTPUT);
  pinMode(rgb1B, OUTPUT);
  pinMode(rgb2R, OUTPUT);
  pinMode(rgb2G, OUTPUT);
  pinMode(rgb2B, OUTPUT);
 
  pinMode(buzzer, OUTPUT);
  //inicializar ligado verde ambiente 1
  digitalWrite(rgb1R, LOW);
  digitalWrite(rgb1G, HIGH);
  digitalWrite(rgb1B, LOW);
  //inicializar ligado verde ambiente 2
  digitalWrite(rgb2R, LOW);
  digitalWrite(rgb2G, HIGH);
  digitalWrite(rgb2B, LOW);
 
  Serial.begin(9600);
 
}
 
void loop(){  
  sit_Ambiente1 = 'N';
  sit_Ambiente2 = 'N';
 
  // para o sensor 1
  int sensorTemp1 = analogRead(tempAmbiente1);
  // converter o valor lido
  float valorTemp1 = sensorTemp1 * 5;
  valorTemp1 /=1024;
  // em graus Celsius
  float Temp1CEL = (valorTemp1 - 0.5) * 100;    
  // fim do sensor 1
 
  // para o sensor 2
  int sensorTemp2 = analogRead(tempAmbiente2);
  // converter o valor lido
  float valorTemp2 = (sensorTemp2 * 5);
  valorTemp2 /=1024;
  // em graus Celsius
  float Temp2CEL = (valorTemp2 - 0.5) * 100;    
  // fim do sensor 2
 
  int valorGas1 = analogRead(sensorGas1);
  int valorGas2 = analogRead(sensorGas2); 
 
  Serial.println(valorGas1);
 
 
 
  // = n - normal /  p - perigo
  if (Temp1CEL > limiteMaxTemp || valorGas1>limiteMaxGas) 
  {
      sit_Ambiente1 = 'P';    
  }  
  if (Temp2CEL > limiteMaxTemp|| valorGas2>limiteMaxGas)  
  {
      sit_Ambiente2 = 'P';
  }  

    
  if (sit_Ambiente1 != 'N' || sit_Ambiente2 != 'N')
  {
    digitalWrite(buzzer, HIGH);    
  }
  else
  {
    digitalWrite(buzzer, LOW);    
  }
 
  controle(sit_Ambiente1,sit_Ambiente2 );
 
 
}





void controle(char situacao1, char situacao2 )
{
   if (situacao1 == 'N')
    {
      // verde
          digitalWrite(rgb1R, LOW);
          digitalWrite(rgb1G, HIGH);
          digitalWrite(rgb1B, LOW);
    }
    else
    {  
        // vermelho     
        digitalWrite(rgb1R, HIGH);
        digitalWrite(rgb1G, LOW);
        digitalWrite(rgb1B, LOW);
        delay(150);
        digitalWrite(rgb1R, LOW);
        digitalWrite(rgb1G, LOW);
        digitalWrite(rgb1B, LOW);
        delay(150);
      
    }
    
   if (situacao2 == 'N')
    {
      // verde
          digitalWrite(rgb2R, LOW);
          digitalWrite(rgb2G, HIGH);
          digitalWrite(rgb2B, LOW);
    }
    else
    {  
        // vermelho     
        digitalWrite(rgb2R, HIGH);
        digitalWrite(rgb2G, LOW);
        digitalWrite(rgb2B, LOW);
        delay(150);
        digitalWrite(rgb2R, LOW);
        digitalWrite(rgb2G, LOW);
        digitalWrite(rgb2B, LOW);
        delay(150);
      
    }   
}