Estou desenvolvendo um sensor, que indica se houve rompimento de um contato Normalmente fechado ou se houve curto em um contato normalmente aberto. Este circuito é idêntico e serão usados nos pinos 2, 4, 7, 8, 12 e 13 (Vide figura abaixo).
 
Segue o fonte:
/*
DigitalReadSerial
Reads a digital input on pin 2, prints the result to the serial monitor
 
This example code is in the public domain.
*/
 
// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton02 = 2;
int pushButton04 = 4;
int pushButton07 = 7;
int pushButton08 = 8;
int pushButton12 = 12;
int pushButton13 = 13;
/*
int buttonState02 = 0;
int buttonState04 = 0;
int buttonState07 = 0;
int buttonState08 = 0;
int buttonState12 = 0;
int buttonState13 = 0;
*/
 
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// make the pushbutton's pin an input:
pinMode(pushButton02, INPUT);
pinMode(pushButton04, INPUT);
pinMode(pushButton07, INPUT);
pinMode(pushButton08, INPUT);
pinMode(pushButton12, INPUT);
pinMode(pushButton13, INPUT);
}
 
// the loop routine runs over and over again forever:
void loop() {
for(int i=0;i<150;i++){
//
// read the input pin:
int buttonState02 = digitalRead(pushButton02);
delay(15);
int buttonState04 = digitalRead(pushButton04);
delay(15);
int buttonState07 = digitalRead(pushButton07);
delay(15);
int buttonState08 = digitalRead(pushButton08);
delay(15);
int buttonState12 = digitalRead(pushButton12);
delay(15);
int buttonState13 = digitalRead(pushButton13);
delay(15);
// print out the state of the button:
if (buttonState02==1){
Serial.print("02=");
Serial.println(buttonState02);
delay(1000);
}
if (buttonState04==1){
Serial.print("04=");
Serial.println(buttonState04);
delay(1000);
}
if (buttonState07==1){
Serial.print("07=");
Serial.println(buttonState07);
delay(1000);
}
if (buttonState08==1){
Serial.print("08=");
Serial.println(buttonState08);
delay(1000);
}
if (buttonState12==1){
Serial.print("12=");
Serial.println(buttonState12);
delay(1000);
}
if (buttonState13==1){
Serial.print("13=");
Serial.println(buttonState13);
delay(1000);
}
 
//
 
}
// Serial.println(" ");
}
 
Após carregar o sketch para o Arduino UNO e abrir o monitor serial, tudo aparentemente está ok. Aí ao fechar a chave S1 ou qualquer outra do mesmo circuito nos outros pinos, é mostrado que o pino correspondente recebeu sinal HIGH, se Rompido a ligação entre X1-1 e X1-2 o mesmo acontece (por conta do transistor inversor).
Aí passa um tempo e o sistema começa a dar "falso alarme" de que isso esteja acontecendo em qualquer pino (mesmo com o resistor de 10K ligado à X4-1, ou aos outros pinos, correspondentes, ligados ao GND) sem explicação alguma.
Alguem sabe o que pode estar acontecendo? Como um pino "levanta" sem "aviso" algum???
Não era para prevalecer o pull-down?
Agradeço qualquer dica.
Euclides.

Exibições: 1610

Responder esta

Respostas a este tópico

Tá dificil de entender o que esta ligado onde .

X1-1 = em curto com X1-2

X1-2 = porta 2 do Arduino ( mas esta conectado no terra !! ) 

X1-3 = ?? Para que esse pino 

X4-1 = porta 4 do Arduino 

Salve grande Murta!!!

Este circuito é replicado 6 vezes, somente o x4.1 é que será ligado nos pinos: 2,4,7,8,12 e 13 (entradas digitais). O X3-2 faz o retorno junto ao GND do Arduino.

O resto é assim:

X2 é a alimentação da parte dos sensores (12 Volts, GND e Vcc).

X3 é a alimentação do Arduino (GND e Vcc).

X1-1 tem que estar em curto com X1-2.

X1-2 é o GND da parte do sensor (12V).

X1-3 tem que estar em aberto em relação a X1-2.

O Push Button (S1) existe na placa para fazer o teste da parte do N.A.

Se for necessário testar a parte do N.F basta retirar um dos lados do curto entre X1-1 e X1-2 (Conector KRE de 3 polos), já que não existe (pelo menos nunca vi...) Push Button N.F.

Acredito estar próximo de uma solução, montei um capacitor e mais um resistor e estou deixando o circuito em "Burning Test". Se esta for a solução (Só achei um circuito com esta configuração, pull-down. Normalmente se faz pull-up porque se "economiza" um resistor, usando o "interno" dos pinos do Arduino...a velha economia na "mixaria"...sim, até os gringos fazem isso...), posto depois. 

Mas enquanto isso...

Tinha entendido errado. 

Não sei qual é o transistor usado, mas sugiro um teste com R3 com um valor menor, por exemplo 100 K ohms. 

Meça a corrente no led (condição de ativo) do opto acoplador e veja se esta dentro das especificações. 

http://www.farnell.com/datasheets/73758.pdf

Pensei em fazer isso, tenho de 82K aqui.

O opto está ativando, pois o sinal chega do outro lado dele (pondo um LED lá ligado aos 5V e ao GND do Arduino, acende).

Amanhã vou replicar o teste que fiz hoje nos outros 5. No que testei funcionou, quero ver se existe alguma coisa "pegando" quando liga todos os 6 circuitos).

Obrigado por enquanto.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço