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:
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://labdegarag1.lojatemporaria.com/arduino-original.html
Comentar
Bastante útil
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);
}
}
O problema é a versao do IDE do arduino... tive que compilar pelo Arduino-0023, ai rodou =DDD
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??
Oi pessoal,nao apanho uma programacao que funcione,
ha sempre um erro,alguem de uma ajuda.
a programaçao está errada... alguem pode me ajudar a encontrar uma programaçao certa? eu preciso de isso
obg pela cumpreensao
"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?
Alguem pode explicar melhor pq é necessário aquele resistor de 10kohm ligado junto ao LDR?
Olá, pessoal! Seguinte....essa biblioteca Tone player, não copila, pq?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
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)