3 sensores LDR e 2 LEDs pra cada

Boa noite pessoal, primeira postagem minha no grupo. Estou sem acentuacao no meu teclado e sem saco para consertar isto novamente agora pois minha cabeca esta pensando Arduino desde quando acordo ate quando durmo. kkkk
Estou precisando de tirar uma duvida com sensores LDR e a programacao que fiz pois os LEDs nao estao funcionando como deveriam.
O projeto que estou fazendo segue esta logica:
1 - 3 sensores LDR irao fazer a medicao da luz do ambiente.
2 - Cada sensor LDR funcionara em conjunto com um par de LEDs.
3 - Quando a luz no sensor for alta, acende LED 1 e apaga o 2. E vice-versa.
Por algum motivo o codigo que fiz funciona perfeitamente para um grupo de 1 LDR e 2 LEDs mas quando aumento as linhas de codigo para abrigar mais 2 sensores LDR e seus respectivos LEDs, o sistema inteiro age de maneira estranha, com luzes de LED ficando fracas e nao obedecendo o codigo que as faz acender ou apagar.

Segue o codigo que fiz:

int sensor0 = 0; //Pino analógico em que o sensor 0 está conectado.
int sensor1 = 1; //Pino analógico em que o sensor 1 está conectado.
int sensor2 = 2; //Pino analógico em que o sensor 2 está conectado.
int valorSensor0 = 0; //variável usada para ler o valor do sensor em tempo real.
int valorSensor1 = 1; //variável usada para ler o valor do sensor em tempo real.
int valorSensor2 = 2; //variável usada para ler o valor do sensor em tempo real.

const int ledVerde0 = 2;
const int ledVermelho0 = 3;
const int ledVerde1 = 4;
const int ledVermelho1 = 5;
const int ledVerde2 = 6;
const int ledVermelho2 = 7;

//Função setup, executado uma vez ao ligar o Arduino.
void setup(){
//Ativando o serial monitor que exibirá os valores lidos no sensor.
Serial.begin(9600);

//Definindo pinos digitais dos leds como de saída.
pinMode(ledVerde0,OUTPUT);
pinMode(ledVermelho0,OUTPUT);
pinMode(ledVerde1,OUTPUT);
pinMode(ledVermelho1,OUTPUT);
pinMode(ledVerde2,OUTPUT);
pinMode(ledVermelho2,OUTPUT);
}

//Função loop, executado enquanto o Arduino estiver ligado.
void loop(){

//Lendo o valor do sensor.
int valorSensor0 = analogRead(sensor0);
int valorSensor1 = analogRead(sensor1);
int valorSensor2 = analogRead(sensor2);

//Os valores da luminosidade podem ser alterados conforme a necessidade.
//Luminosidade baixa.
if (valorSensor0 < 750) {
apagaLeds();
digitalWrite(ledVermelho0,HIGH);
}
if (valorSensor1 < 750) {
apagaLeds();
digitalWrite(ledVermelho1,HIGH);
}
if (valorSensor2 < 750) {
apagaLeds();
digitalWrite(ledVermelho2,HIGH);
}

//Luminosidade alta.
if (valorSensor0 >= 750) {
apagaLeds();
digitalWrite(ledVerde0,HIGH);
}
if (valorSensor1 >= 750) {
apagaLeds();
digitalWrite(ledVerde1,HIGH);
}
if (valorSensor2 >= 750) {
apagaLeds();
digitalWrite(ledVerde2,HIGH);
}
//Exibindo o valor do sensor no serial monitor.
Serial.println(valorSensor0);
Serial.println(valorSensor1);
Serial.println(valorSensor2);

delay(50);
}

//Função criada para apagar todos os leds de uma vez.
void apagaLeds() {
digitalWrite(ledVerde0,LOW);
digitalWrite(ledVermelho0,LOW);
digitalWrite(ledVerde1,LOW);
digitalWrite(ledVermelho1,LOW);
digitalWrite(ledVerde2,LOW);
digitalWrite(ledVermelho2,LOW);
}

Segue tambem uma foto de como esta montada a protoboard. Na foto estou medindo somente um sensor pois ja estava desistindo de fazer tudo funcionar, portanto desconsiderem a posicao dos fios e analisem por favor somente a posicao dos componentes LDR, LEDs e resistores.

Obrigado!

Olá Ricardo,

A imagem não está bem clara mas você está com os resistores dos leds nos mesmos pinos ?
Pois assim a ligação de um resistor tem que resistir entre um ponto e outro assim você tem que usar duas colunas da sua protoboard, ao que vejo na imagem você tem o resistor e o anodo do led na mesma coluna isso mesmo ?

Vi por alto e o código aparentemente está quase OK, mas há conflitos… Além disso, as ligações da foto não parecem corresponder com o código. Vamos lá…

Em primeiro lugar, logo no início você declara que os sensores estarão ligados nos pinos 0, 1, 2 analógicos (não é verdade) e depois declara que os LED’s estarão em 2, 3, 4, 5, 6, 7, além dos LED’s e os sensores não estarem ligados aonde você está dizendo, pois estes pinos estão livres na foto, o pino do sensor2 está no mesmo pino do ledVerde0, você deve declarar os pinos analógicos como A0, A1, A2 para evitar conflito com os pinos digitais (uma das chatices do projeto Arduino se preocupar com pinos e não com os registradores de porta).

Você ligou LED’s nos pinos 0 e 1, estes pinos são reservados para o serial TX e RX caso você precise, por isso os LED’s da placa para TX e RX estão ligados, mesmo que você conseguisse fazer o circuito funcionar desse jeito (impossível), provavelmente não veria nada na serial pois a porta está ocupada.

Enfim, em suma, o código que você apresentou, apesar de estar quase correto, não corresponde à realidade do teu circuito minimamente, estão totalmente desconexos.

Além disso @Ricardo as observações do @gustavolwalker estão corretas. Teu problema não é nem tanto código, pelo que vi, você já programava anteriormente, mas precisa dar uma voltinha pelas coisas específicas da eletrônica.

@gustavolwalker , isso mesmo. Os resistores que utilizei nos LEDs tem valor de 100 ohms e estao ligados nos catodos. Os resistores dos sensores LDR tem valor de 100k ohms. Segue uma foto mais clara para que voce veja melhor, sem as ligacoes com o Arduino. Se voces precisarem de maiores esclarecimentos, posso incluir as fotos com todas as ligacoes, apesar de achar que e uma foto BEM baguncada, fios pra caramba…


@sksdutra a ligacao dos sensores estao seguramente posicionados nas entradas analogicas 0, 1 e 2 conforme na foto abaixo. E mesmo assim o led TX no Arduino ficou aceso.
Pelo que andei conversando com uns colegas parece que o meu erro esta em colocar as duas pernas do resistor direto na coluna do anodo do LED.
Vou modificar no codigo para refletir a mudanca sugerida por vc sobre as portas analogicas para A0, A1 e A2 para nao conflitarem com as entradas digitais. Digo daqui a pouco se funcionou. Obrigado!



Os resistores para os LED’s devem ser de 330 por segurança ou pelo menos 220 Ohms. 100 Ohms é uma resistência muito baixa, pode funcionar por algum tempo, mas corre o risco de queimar o LED em algum momento.

Quanto ao código, não vou opinar por nunca ter programado um arduino. Porém na parte eletrônica tem alguns problemas. Os resistores dos seus leds estão em curto, portanto estão funcionando sem resistor, podendo danificar seu arduino. Os LDR’s devem ter alguma proteção escura, pois a luz dos leds irão afetar o funcionamento deles. Os resistores em série com os LDR’s estão com valores muito altos, geralmente se usa resistores de 1kohm á 10kohm, muito mais que isso, a queda de tensão sobre os ldr’s fica muito baixa para o conversor AD.

Seguindo o seu código e as fotos, fiz um esquema de ligação na protoboard que pode ser útil. Dá uma olhada. (fiz para apenas um sensor, para o restante é só repetir o mesmo esquema).

@sksdutra, se por acaso a resitsência está muito baixa a luz do LED fica fraca? Pois já tentei de tudo e mesmo assim eles não acendem com a luz em sua potência máxima. Achei uma calculadora para resistores de LEDs e este aqui também que mostrou que tipo de voltagem cada LED utiliza, dependendo de sua cor.

Parece que os valores para cada tipo de LEDs são esses:
LED vermelho: 2V 15mA
LED verde: 2.1V 20mA
LED azul: 3.2V 25mA
LED branco: 3.2V 25mA

Utilizei também um site que contém uma calculadora para resistências usadas em LEDs e achei este valor de 150 ohms nos resistores. O que siginfica que o resistor que estou usando realmente parece ser de valor mais baixo do que o necessário. Mas caso eu compre um valor acima do necessário, o brilho do LED ficará menor? Segue o link para sua análise (site em inglês).

@Jack_Kun, foi exatamente esta configuração inicial que utilizei e não deu certo para 3 sensores. Parece que este arranjo só funciona com um grupo de 1 sensor e 2 LEDs, ainda não identifiquei o porque. Segue a foto deste arranjo que você fez da mesma forma que eu fiz.

Um colega meu do curso me indicou o arranjo a seguir mas não sei se está correto. Pelo menos o arranjo dele fez com que os LEDs voltassem a funcionar como deveriam mas com o problema da luz fraca que citei acima.

Me parece que os circuitos nas duas propostas continuam com ligações erradas nos LED’s.

O resistor, como o próprio nome diz, resiste à eletricidade, logo, se é resistência é relativamente baixa, vai passar mais eletricidade aumentando a intensidade da luz, com a ressalva que, se a diferença potencial for baixa demais, o LED vai queimar.

Em termos, você precisa entender não apenas como ligar o circuito, mas também a chamada Lei de Ohm (acho que é a primeira coisa que todo mundo aprende em Física 3).

Um LED, é um diodo que emite luz (Light Emiting Diode) e, em geral, eles emitem luz pelo consumo de 1.7V a 15mA, se você vai passar 5V pelo Arduino, vai exceder em 3.3V (chamada diferença potencial) a necessidade do LED e ele vai, obviamente, queimar, já que a tolerância padrão para componentes eletrônicos é de 10%.

A Lei de Ohm diz que a diferença potencial é a corrente multiplicada pela resistência: V=IR, logo, se eu desconheço a resistência, posso dizer que R=V/I, então 3.3V / 0.015A = 220 Ohms, que é a resistência mais correta para usar em um LED com essas características.

Se você puser um LED com 100 Ohms, você vai agora poder calcular que isso vai ocasionar a passagem de de uma diferença potencial menor e, claro, uma tensão maior, que vai levar à queima do diodo. Se você puser uma resistência de 330 Ohms por segurança, vai haver uma passagem menor de tensão e assim, o LED vai brilhar com menos intensidade.

@sksdutra, então porque o projeto anterior à este estava funcionando? Pois estou me baseando nele para que as coisas funcionem. Apesar de sua explicação fazer sentido e eu intuir que este é realmente o meu erro, gostaria de saber como os LEDs no meu projeto anterior funcionaram mesmo utilizando resistores de 100 ohms. Segue vídeo neste link mostrando o efeito dos LEDs usando resistores de 100 ohms.

Eu acredito que no meu primeiro projeto foram utilizados LEDs de alto brilho que aguentam 5v com resistores de somente 100 ohms. Neste meu novo projeto, com a compra de novos LEDs, provavelmente não são de alto brilho e precisarão de resistores de 220 ohms. Acredito que seja este o problema.

Você pode ligar os LED’s até sem resistência e eles funcionarão por um curto prazo de tempo, mas não é recomendado, pois isso vai diminuir a vida útil dos mesmos.

Veja que até algum tempo, tinha uma brincadeirinha de passar um adesivo nos LED’s em volta de uma bateria de 3.3V e um imã sem adicionar nenhuma resistência e jogar para grudar em estruturas de metal pela cidade, como pontes e etc. A diferença potencial nesse caso é de 1.6V, ou seja, quase o dobro. Nesse caso, o LED vai funcionar, mas ele provavelmente vai queimar antes de drenar toda a carga da bateria.

Para que o LED não morra antes de tempo, a bateria deve fornecer somente os 1.7V/15mA, se houver diferença de potencial maior que 10%, uma hora ou outra ele queima.

Um LED ordinário de 5mm a referência é 1.7V e 15mA e para obter a luz máxima com a passagem de 5V, pela Lei de Ohm, a resistência deve ser de 220 Ohmns.

O vídeo da internet pode até funcionar mas ocasionalmente o LED vai queimar, mas mesmo que o LED ainda segure o tranco, o que é pouco provável, do ponto de vista teórico-prático o vídeo está errado.

@sksdutra Obrigado pelas explicações meu amigo. Vou trocar estes resistores de 100 ohms por uns de 220 ohms (existe algum de 180 ohms?) na 2a feira e posto aqui os resultados para os participantes do tópico.

Bem, como eu disse, os resistores dos leds estão em curto na sua foto. Estão ligados de uma forma diferente da imagem que postei, pois o resistor está saltando o vão central da protoboard, que interrompe as trilhas. Da forma que mostrei, os resistores não estão em curto. Quanto ao brilho dos leds, eles não possuem uma variação de brilho linear, tanto é que se faz necessário o uso de PWM para ajustar o brilho de um led. Em 5V eu uso resistores de 220R a 1K, e a diferença é imperceptível a olho nu. E seu resistor junto ao ldr está com valor mt alto, tente usar um de 10k, como no meu desenho.

Mais uma info, se os leds forem ligados sem resistor, vc pode danificar a saída do arduino, que possui uma baixa capacidade de corrente de saída. Estou fazendo um projeto com pic18f4550+fototrasistor+acionamento de saída, então eu já testei as dicas que te dei, e elas funcionam. Atenção a montagem eletrônica, para evitar curtos, sobrecarga, perda de contato e inversão de polaridade de semicondutores(como os leds).

No caso, cada porta do Arduino pode fornecer uma corrente de até 20mA, como os LED’s drenam 15mA, eu creio que a possibilidade da porta “queimar” por sobrecarga é praticamente nula.

A perninha maior do LED é o anodo (+) e a outra é o catodo (-), como trata-se de um diodo (por isso chama-se diodo), mesmo que a polaridade seja invertida, a porta também não irá sofrer, pois os diodos permitem que a energia flua somente em uma direção do anodo para o catodo, se a polaridade for invertida, acho que simplesmente o LED não acenderá, sem nenhum dano maior.

O uso de resistências diferentes influenciam também no brilho do LED, quanto maior a resistência acima do normal especificado pela Lei de Ohm, menos energia irá passar ao LED e, assim, o brilho do mesmo irá diminuir. Quando você liga numa porta PWM, em geral é necessário adicionar um potenciômetro, que nada mais é do que uma “resistência variável”. A adição de resistores no esquema, serve para prevenir passagens de resistências menores que o recomendado e assim, acabar “espocando” o LED.

Nunca se forem usados os resistores, e esses resistores estão em curto é a mesma coisa de não ter nada. No caso da inversão só na iria acender msm. Quanto ao resistor, o led não varia linearmente de intensidade, pois não é uma carga resistiva. Eu uso resistor de 470R em um led azul de alto brilho, e um de 1K, além de outras combinações, e não há diferença visível de brilho, pelo led ser um diodo, e ter um valor fixo de queda de tensão, como qualquer outro diodo comum. Eu sou formado em eletrônica, e estudo continuamente, sei oq estou dizendo, e me baseio em diversos livros sobre o assunto, além da experimentação prática. E sim, sem resistor, a corrente de saída na porta do arduino é teoricamente infinita, sendo limitada apenas pelas características elétricas do circuito. E quando eu adiciono um pontenciometro em um PWM não é na saída, é na entrada analógica do mcu, que fará a conversão da tensão lida em porcentagem de ciclo de trabalho do PWM(Pulse-Width Modulation), que é um sinal pulsado, de frequência fixa, onde se varia a largura de cada pulso, para desse modo variar a potência em cargas não resistivas(indutores, motores, leds, etc.). Um led acende ligado até em 12V, sem resistor, porém corrente vai crescer sem controle, danificando oq for mais frágil no circuito, que nesse caso, com certeza é o MCU.

Ricardo, se vc quiser eu posso montar seu projeto com o pic e fazer o código. Daí eu te mostro o resultado e vc converte o código para o arduino. Fica a seu critério. Não faço no arduino pq não tenho nenhum, mas contruí a placa do PIC18F4550, e me parece que existe alguma compatibilidade entre os dois sistemas, desde que o programa do pic seja em linguagem C, claro.

@Jack_Kun aceito para fins de comparação mas não existe nenhuma foto postada acima no qual os resistores não estejam em curto? Acreditoq que inserí uma que seguia fielmente o esquema que você montou, com as duas pernas dos resistores na mesma trilha do catodo do LED. Mas em todo caso aceito que você monte o projeto para que eu possa comparar com o meu.Segue ela:

@sksdutra Peguei hoje os resistores de 220 ohms para usar com os LEDs. Vou fazer o teste aqui e já lhe aviso se deu certo ou não.

Obrigado por estarem me ajudando pessoal. Vou apresentar este projeto agora na 6a feira e é bom saber que quase tudo está pronto e que só faltam realmente estes pequenos detalhes para serem acertados. Estou aprendeno bastante com vocês.

Nessa imagem, pelo que vejo, a ligação terra (GND/Ground) deveria ser no fio marrom (apesar de que, pelas convenções, a trilha vermelha é para força), no entanto, é necessário saber se o fio azul está no catodo (-/perna curta) ou no anodo (+/perna longa) do LED, se estiver no anodo, os fios azuis devem ser ligados nas portas do Arduino, mas se forem nos catodos, devem ligados na mesma trilha do fio marrom (GND).