Projeto de sensor de detecção de Luz com som

Este é um projeto que mostra a variação da intensidade da luz utilizando uma fotocélula com Arduino. De acordo com a variação da intensidade da luz, os leds acendem ou apagam e se não houver luz nenhuma, um buzzer apita. Neste projeto foi utilizado:

  • 1 Arduino UNO Rev.3
  • 1 fotocélula
  • 1 resistor de 10kOhm
  • 8 leds
  • 8 resistores de 220 Ohm
  • 1 buzzer

 

Primeiramente, faça as ligações como demonstrado abaixo:

A fotocélula é um resistor que varia de acordo com a intensidade da luz. Quanto maior a luminosidade, maior a resistência da fotocélula. Na figura acima, mostra um divisor de tensão com a fotocélula e um resistor de 10kOhm. Essa divisão é necessária para que a porta analógica A0 do Arduino possa detectar a sua variação. Assim se caso haja muita luminosidade, apenas 1 Led acenderá, se houver pouca luminosidade, alguns Leds acenderão e se houver nenhuma luminosidade, todos os leds acenderão e o buzzer tocará. A programação para o funcionamento está demonstrada abaixo:

#include <Tone.h>

int LDRpin=A0;
int LDRval=0;
Tone player;
int note[]={NOTE_A3,NOTE_G4};

void setup()    //Setup the output pins and play the buzzer
{
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
player.begin(10);
Serial.begin(9600);
}

void loop()
{
LDRval=analogRead(LDRpin);
if(Serial.available()>0)
{
Serial.println(LDRval);
}
delay(100);
if(LDRval>850)
{
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval>800 && LDRval<850)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval>750 && LDRval<800)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval>700 && LDRval<750)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval>650 && LDRval<700)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval>600 && LDRval<650)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
if(LDRval<600)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
player.play(note[1]);
}

}

Referências:

http://arduino.cc/en/

http://labdegarag1.lojatemporaria.com/arduino-original.html

http://labdegarag1.lojatemporaria.com/mini-fotocelula.html

http://www.ladyada.net/learn/sensors/cds.html

Exibições: 32040

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Aurélio Carvalho Muleba em 15 junho 2023 às 7:00

Bastante útil 

Comentário de Geraldo Santos em 7 outubro 2018 às 19:15

Consegui colocar pra funcionar assim :

#include <Tone.h> //by Geraldo Santos labdegaragem

int LDRpin=A1;
int ldrValor=0;
Tone player;
int note[]={NOTE_A3,NOTE_G4};

void setup() //Setup the output pins and play the buzzer
{
Serial.begin(9600);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
player.begin(10);
}

void loop()
{
ldrValor=analogRead(LDRpin);

if(ldrValor>=850)
{
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
player.play(note[1]);
}
else
if(ldrValor>=800 && ldrValor<850)
{
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
player.stop();
}
else
if(ldrValor>=750 && ldrValor<800)
{
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
player.stop();
}
else
if(ldrValor>=700 && ldrValor<750)
{
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
player.stop();
}
else
if(ldrValor>=650 && ldrValor<700)
{
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
player.stop();
}
else
if(ldrValor>=400 && ldrValor<450)
{
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
digitalWrite(10,HIGH);
player.stop();
}
else
if(ldrValor<=200)
{
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
player.stop();
}
{
Serial.println(ldrValor);
delay(500);
}
}

Comentário de Fabio Gabriel O Marques em 7 março 2013 às 10:49

O problema é a versao do IDE do arduino... tive que compilar pelo Arduino-0023, ai rodou =DDD

Comentário de Fabio Gabriel O Marques em 7 março 2013 às 9:09

Estou tendo problema com a biblioteca Tone. Olha o erro que está dando.

C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp: In member function 'void Tone::begin(uint8_t)':
C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp:121: error: 'bitWrite' was not declared in this scope
C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp:123: error: 'digitalPinToPort' was not declared in this scope
C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp:123: error: 'portOutputRegister' was not declared in this scope
C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp:124: error: 'digitalPinToBitMask' was not declared in this scope
C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp: In member function 'void Tone::play(uint16_t, uint32_t)':
C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp:198: error: 'OUTPUT' was not declared in this scope
C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp:198: error: 'pinMode' was not declared in this scope
C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp:294: error: 'bitWrite' was not declared in this scope
C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp: In member function 'void Tone::stop()':
C:\Users\Administrator\Desktop\arduino-1.0.3\libraries\Tone\Tone.cpp:361: error: 'digitalWrite' was not declared in this scope

 

Alguem sabe o que pode ser??

Comentário de jose campos em 4 março 2013 às 14:19

Oi pessoal,nao apanho uma programacao que funcione,

ha sempre um erro,alguem de uma ajuda.

Comentário de Luis Daniel Marques em 15 fevereiro 2013 às 12:51

a programaçao está errada... alguem pode me ajudar a encontrar uma programaçao certa? eu preciso de isso

obg pela cumpreensao

Comentário de Bruno de Souza Fonseca em 18 dezembro 2012 às 2:24

Boa Noite, quando vou compilar a programação dá o seguinte erro:

alguem sabe como resolver agradeço qualquer ajuda.

Comentário de Thiagoor em 28 novembro 2012 às 18:55

"Essa divisão é necessária para que a porta analógica A0 do Arduino possa detectar a sua variação."

 

Não consigo entender, pra mim faz muito sentido ligar ' 5V - LDR - A0 ', se a resistência varia de 1 a 10 kohm então a corrente na porta vai variar de 0,5 a 5 mA, qual é o problema do meu pensamento e pq a porta analógica não iria detectar se não houvesse esse divisor de tensões?

Comentário de Thiagoor em 26 novembro 2012 às 18:58

Alguem pode explicar melhor pq é necessário aquele resistor de 10kohm ligado junto ao LDR?

Comentário de kleber nogueira filho em 26 novembro 2012 às 8:50

Olá, pessoal! Seguinte....essa biblioteca Tone player, não copila, pq?

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço