Boa noite e obrigado pela dica.

Desenvolvi um projeto no qual seis sensores piezos acionam um rele. Porem somente o 1º canal aciona o rele e o restante apenas indica o funcionamento do sensor com os leds dedicados.

O código é o seguinte:

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 11;
int led5 = 9;
int led6 = 10;
int rele = 5;
int link = 12;

int analogpin[6]={A0,A1,A2,A3,A4,A5};
int THRESHOLD = 20;

void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(link, OUTPUT);
pinMode(rele, OUTPUT);
}

void loop() {
if(analogRead(analogpin[0])>THRESHOLD){
digitalWrite(led4, LOW);
digitalWrite(rele, LOW);
}
else{
digitalWrite(led4, HIGH);
digitalWrite(rele, HIGH);
}
if(analogRead(analogpin[1])>THRESHOLD){
digitalWrite(led5, LOW);
digitalWrite(rele, LOW);
}
else{
digitalWrite(led5, HIGH);
digitalWrite(rele, HIGH);
}
if(analogRead(analogpin[2])>THRESHOLD){
digitalWrite(led6, LOW);
digitalWrite(rele, LOW);
}
else{
digitalWrite(led6, HIGH);
digitalWrite(rele, HIGH);
}
if(analogRead(analogpin[3])>THRESHOLD){
digitalWrite(led3, LOW);
digitalWrite(rele, LOW);
}
else{
digitalWrite(led3, HIGH);
digitalWrite(rele, HIGH);
}
if(analogRead(analogpin[4])>THRESHOLD){
digitalWrite(led2, LOW);
digitalWrite(rele, LOW);
}
else{
digitalWrite(led2, HIGH);
digitalWrite(rele, HIGH);
}
if(analogRead(analogpin[5])>THRESHOLD){
digitalWrite(led1, LOW);
digitalWrite(rele, LOW);
}
else{
digitalWrite(led1, HIGH);
digitalWrite(rele, HIGH);
}

delay(100);
}

Exibições: 580

Responder esta

Respostas a este tópico

A principio seu programa está em conflito.

Explique melhor, como você quer que funcione o seu programa? Se todos os sensores devem ser acionados para que o relê acione ou qualquer um pode acioná-lo.

Bom dia Victor!

    Os sensores captarão vibrações e a transmitiram para uma central de monitoramento. Cada sensor possui um led indicador de funcionamento. Quando o sensor é acionado, seu led correspondente indicará seu funcionamento ficando em off. O rele deverá ser acionado por qualquer um dos sensores. Eu já tinha feito isso antes e funcionará tranquilo. Não me recordo do corpo do código em si. E sei que é coisa muito simples.

E todos os sensores operam. Só o sensor1 (analogpin(0) aciona o rele. Não sei dizer se por ser o primeiro da linha...

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 11;
int led5 = 9;
int led6 = 10;
int rele = 5;
int link = 12;

int sensor1 = A0;
int sensor2 = A1;
int sensor3 = A2;
int sensor4 = A3;
int sensor5 = A4;
int sensor6 = A5;
int THRESHOLD = 20;

void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(link, OUTPUT);
pinMode(rele, OUTPUT);
}

void loop() {
if(analogRead(sensor1)>=THRESHOLD)
digitalWrite(led4, LOW);
digitalWrite(rele, LOW);
if(analogRead(sensor1)<THRESHOLD)
digitalWrite(led4, HIGH);
digitalWrite(rele, HIGH);
if(analogRead(sensor2)>=THRESHOLD)
digitalWrite(led5, LOW);
digitalWrite(rele, LOW);
if(analogRead(sensor2)<THRESHOLD)
digitalWrite(led5, HIGH);
digitalWrite(rele, HIGH);
if(analogRead(sensor3)>=THRESHOLD)
digitalWrite(led6, LOW);
digitalWrite(rele, LOW);
if(analogRead(sensor3)<THRESHOLD)
digitalWrite(led6, HIGH);
digitalWrite(rele, HIGH);
if(analogRead(sensor4)>=THRESHOLD)
digitalWrite(led3, LOW);
digitalWrite(rele, LOW);
if(analogRead(sensor4)<THRESHOLD)
digitalWrite(led3, HIGH);
digitalWrite(rele, HIGH);
if(analogRead(sensor5)>=THRESHOLD)
digitalWrite(led2, LOW);
digitalWrite(rele, LOW);
if(analogRead(sensor5)<THRESHOLD)
digitalWrite(led2, HIGH);
digitalWrite(rele, HIGH);
if(analogRead(sensor6)>=THRESHOLD)
digitalWrite(led1, LOW);
digitalWrite(rele, LOW);
if(analogRead(sensor6)>=THRESHOLD)
digitalWrite(led1, HIGH);
digitalWrite(rele, HIGH);


delay(100);
}

este seria a segunda tentativa de muitas. mas segundo seu relato dará a mesma coisa

Agora vai... hehehe

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 11;
int led5 = 9;
int led6 = 10;
int rele = 5;
int link = 12;
int analogpin[6]={A0,A1,A2,A3,A4,A5};
int THRESHOLD = 20;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(link, OUTPUT);
pinMode(rele, OUTPUT);
}
void loop()
{
if((analogRead(analogpin[0]) || analogRead(analogpin[1]) || analogRead(analogpin[2]) || analogRead(analogpin[3]) || analogRead(analogpin[4]) || analogRead(analogpin[5])) < THRESHOLD)
//if(analogRead(analogpin[0]) < THRESHOLD)
{
digitalWrite(rele, HIGH);

if(analogRead(analogpin[0]) <= THRESHOLD)
digitalWrite(led4, HIGH);

if(analogRead(analogpin[1]) <= THRESHOLD)
digitalWrite(led5, HIGH);

if(analogRead(analogpin[2]) <= THRESHOLD)
digitalWrite(led6, HIGH);

if(analogRead(analogpin[3]) <= THRESHOLD)
digitalWrite(led3, HIGH);

if(analogRead(analogpin[4]) <= THRESHOLD)
digitalWrite(led2, HIGH);

if(analogRead(analogpin[5]) <= THRESHOLD)
digitalWrite(led1, HIGH);
}
else
{
digitalWrite(rele, LOW);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}

delay(100);
}

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 11;
int led5 = 9;
int led6 = 10;
int rele = 5;
int link = 12;

int analogpin[6]={A0,A1,A2,A3,A4,A5};
int THRESHOLD = 20;

void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(link, OUTPUT);
pinMode(rele, OUTPUT);
}

void loop(){
if((analogRead(analogpin[0]) || (analogRead(analogpin[1]) || (analogRead(analogpin[2]) || (analogRead(analogpin[3]) || (analogRead(analogpin[4]) || (analogRead(analogpin[5])) <= THRESHOLD)
{
digitalWrite(rele, HIGH);
if(analogRead(analogpin[0] <= THRESHOLD)
digitalWrite(led4, HIGH);
if(analogRead(analogpin[1] <= THRESHOLD)
digitalWrite(led5, HIGH);
if(analogRead(analogpin[2] <= THRESHOLD)
digitalWrite(led6, HIGH);
if(analogRead(analogpin[3] <= THRESHOLD)
digitalWrite(led3, HIGH);
if(analogRead(analogpin[4] <= THRESHOLD)
digitalWrite(led2, HIGH);
if(analogRead(analogpin[5] <= THRESHOLD)
digitalWrite(led1, HIGH);
}
else
{
digitalWrite(rele, LOW)
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}

if((analogRead(analogpin[0]) || (analogRead(analogpin[1]) || (analogRead(analogpin[2]) || (analogRead(analogpin[3]) || (analogRead(analogpin[4]) || (analogRead(analogpin[5])) <= THRESHOLD)
{

 

erro na ultima chaves

 

agora vendo melhor, você tem que tirar os parenteses da frente do analogRead, assim:

if((analogRead(analogpin[0]) || analogRead(analogpin[1]) || analogRead(analogpin[2]) || analogRead(analogpin[3]) || analogRead(analogpin[4]) || analogRead(analogpin[5])) < THRESHOLD).

Por isso não está compilando.

Abraço.

Eram mesmos os parenteses... F.! Mas não funcionou e nem os leds responderam... Mas acho que esse é o caminho... Foda não ter um exemplo prá se ter idéia... Foi tentar slimplificar sua idéia...

 

int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 11;
int led5 = 9;
int led6 = 10;
int rele = 5;

int analogpin[6]={A0,A1,A2,A3,A4,A5};
int THRESHOLD = 10;

void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(rele, OUTPUT);}
void loop() {

if(analogRead(analogpin[0])> THRESHOLD){
digitalWrite(led4, LOW);
digitalWrite(rele, LOW);}
else if(analogRead(analogpin[0])< THRESHOLD){
digitalWrite(led4, HIGH);
digitalWrite(rele, HIGH);}
else if(analogRead(analogpin[1])> THRESHOLD){
digitalWrite(led5, LOW);
digitalWrite(rele, LOW);}
else if(analogRead(analogpin[1])< THRESHOLD){
digitalWrite(led5, HIGH);
digitalWrite(rele, HIGH);}
else if(analogRead(analogpin[2])> THRESHOLD){
digitalWrite(led6, LOW);
digitalWrite(rele, LOW);}
else if(analogRead(analogpin[2])< THRESHOLD){
digitalWrite(led6, HIGH);
digitalWrite(rele, HIGH);}
else if(analogRead(analogpin[3])> THRESHOLD){
digitalWrite(led3, LOW);
digitalWrite(rele, LOW);}
else if(analogRead(analogpin[3])< THRESHOLD){
digitalWrite(led3, HIGH);
digitalWrite(rele, HIGH);}
else if(analogRead(analogpin[4])> THRESHOLD){
digitalWrite(led2, LOW);
digitalWrite(rele, LOW);}
else if(analogRead(analogpin[4])< THRESHOLD){
digitalWrite(led2, HIGH);
digitalWrite(rele, HIGH);}
else if(analogRead(analogpin[5])> THRESHOLD){
digitalWrite(led1, LOW);
digitalWrite(rele, LOW);}
else{
digitalWrite(led1, HIGH);
digitalWrite(rele, HIGH);}
delay(100);
}

Boa noite, Adilson.

Se eu puder ajudar:

//REFACTORACAO, cortesia SOFTELLI - 07/12/2012

int n = 6; //numero de leds = numero de Sensores.. vamos usar no futuro.
int led[] = {2,3,4,11,9,10,5}; //array com os pinos das leds.

int rele = 5;
int analogPin[] = {A0, A1, A2, A3, A4, A5}; //pinos analogicos de entrada
int THRESHOLD = 10; //seu limiar
int cont = 0; //um contador qualquer.

void setup(){
  for(int i=0; i<n;i++){ //varrendo o array e colocando em OUTPUT
      pinMode(led[i], OUTPUT);  
  }
  pinMode(rele, OUTPUT); //como ja estava o rele.
 
}

void loop(){
  //o cont comeca em 0.
  if(analogRead(analogPin[cont])> THRESHOLD){ //se uma determinada leitura eh maior que o limiar
     digitalWrite(led[cont], LOW); //desliga o respectivo led
     digitalWrite(rele, HIGH); //liga o rele
  } else {
     digitalWrite(led[cont], HIGH); //liga o respectivo led
     digitalWrite(rele, LOW); //desliga o rele
    }
  cont++; //incrementa o contador e..
  if(cont >= n) cont = 0; //Zero o cont se for maior ou igual a "n" numero de sensores e leds.
  delay(100); //recomendavel.
}

//Abracos.

Mas existem problemas no código que postei, por exemplo: enquanto um sensor está tentando ligar o rele, o outro está insistindo em mantê-lo desligado, quase ao mesmo tempo.

E o problema que eu costumo chamar de "shared command"... comando compartilhado... tive que lidar com um desses ainda hoje.

É aquele caso clássico da empresa que tem muitos caciques e poucos índios. Todo cacique quer mandar, cada um dá uma ordem diferente... e os índios não sabem o que fazer.


No seu caso são 6 senhores que decidem "sim-não" para o índio.

Como "não se pode agradar a dois senhores", eu chutaria estabelecer uma regra de tempo: Estabeleça um tempo mínimo para o relê ficar ligado e outro para ficar desligado.

Assim, se um sensor enviar sinal para ligar, e outro enviar logo em seguida o sinal para desligar, um IF deve verificar se o relê já ficou ligado tempo suficiente para ser desligado... autorizando ou não o "desligue" do rele. E vice-versa.

É só uma idéia, pois podem existir outras.

Abraços.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço