Sensor de Chuva com Motor Dc - Simulando o fechamento de uma janela

Boa Tarde Pessoal, 

Estou montando meu TCC, e estou com dificuldades para fazer uma programação onde, um Sensor de chuva ao detectar a chuva, faz um Motor Dc fechar uma "Janela". vou postar a programação separada e o funcionamento aqui:

Motor Dc (faz o motor girar no sentido horário e anti horário ao apertar um botão, e controla a velocidade com um potenciômetro): 

int sensorPin = A0; //Potenciometro
int btInverter = A1; //Botão de inversao
int enable = 11; //Enable do circuito 1
int motorInput1= 12; //Motor pino 1
int motorInput2 = 13; //Motor pino 2

int tempPress = 0; //temporario de verificacao de botao pressionado
int direcao = 0; //direcao do motor (1 e 0)

void setup() {
//defino os canais de saida
pinMode(motorInput1, OUTPUT);
pinMode(motorInput2, OUTPUT);

//sentido de rotacao
digitalWrite(motorInput1, HIGH);
digitalWrite(motorInput2, LOW);
}

void loop() {
int sensorValue = analogRead(sensorPin);
int outputValue = map(sensorValue, 0, 1023, 0, 255);

//pino Enable baseado no valor do potenciometro (controle de potencia)
analogWrite(enable, outputValue);

//se o botao de inversao for pressionado
if(digitalRead(btInverter)==HIGH){
//verifica se o botao ja nao estava pressionado.
if(tempPress == 0){
//verifica a direcao atual e inverte
if(direcao == 0){
digitalWrite(motorInput1, LOW);
digitalWrite(motorInput2, HIGH);
direcao = 1;
}else{
digitalWrite(motorInput1, HIGH);
digitalWrite(motorInput2, LOW);
direcao = 0;
}
tempPress = 1;
}
}else{
tempPress = 0;
}

delay(100);
}

Sensor de chuva (quando cai água no sensor, aciona um buzzer):

int bip = 2;
int sensordechuva = 3;
void setup()
{
pinMode(bip,OUTPUT);
pinMode(sensordechuva,INPUT);
}
void loop()
{
if(digitalRead(sensordechuva) == 0)
{
digitalWrite(bip,HIGH);
delay(500);
digitalWrite(bip,LOW);
}
else
{
digitalWrite(bip,LOW);
}
delay(500);
}

Exibições: 1086

Responder esta

Respostas a este tópico

Nathalia,

Como você esqueceu de postar o código de acionamento do motor eu vou apenas  indicar as partes que você deve incluir nele.

NO INÍCIO:

int sensordechuva = 3; // TENHA CERTEZA QUE ESSE PINO NÃO É USADO NO SKETCH DO MOTOR!!!!

NO SETUP:

pinMode(sensordechuva,INPUT);

NO VOID LOOP:

if(digitalRead(sensordechuva) == 0)

{

**** AQUI VOCÊ ADICIONA A LINHA OU CHAMA A ROTINA QUE ACIONA O MOTOR PRA FECHAR 

}
else
{

**** AQUI VOCÊ ADICIONA A LINHA OU CHAMA A ROTINA QUE ACIONA O MOTOR PRA ABRIR

}

fiz como você disse, mas o motor não esta girando, ele é acionado mas não começa a girar... 

int sensorPin = A0; //Potenciometro
int btInverter = A1; //Botão de inversao
int enable = 11; //Enable do circuito 1
int motorInput1= 12; //Motor pino 1
int motorInput2 = 13; //Motor pino 2
int sensordechuva = 3; //sensor de chuva

int tempPress = 0; //temporario de verificacao de botao pressionado
int direcao = 0; //direcao do motor (1 e 0)

void setup() {
//defino os canais de saida
pinMode(motorInput1, OUTPUT);
pinMode(motorInput2, OUTPUT);
pinMode(sensordechuva,INPUT);

//sentido de rotacao
digitalWrite(motorInput1, HIGH);
digitalWrite(motorInput2, LOW);
}

void loop() {
int sensorValue = analogRead(sensorPin);
int outputValue = map(sensorValue, 0, 1023, 0, 255);

//pino Enable baseado no valor do potenciometro (controle de potencia)
analogWrite(enable, outputValue);

//se o botao de inversao for pressionado
if(digitalRead(sensordechuva) == 0)
{
//verifica a direcao atual e inverte
if(direcao == 0){
digitalWrite(motorInput1, LOW);
digitalWrite(motorInput2, HIGH);
direcao = 1;
}else{
digitalWrite(motorInput1, HIGH);
digitalWrite(motorInput2, LOW);
direcao = 0;
}
tempPress = 1;
}
else
tempPress = 1;
}

Olá,

Tenta agora, do jeito que estava ele revertia o motor cada vez que o pino 3 estivesse em LOW.

Como eu não sei qual o motor fecha com input1 em HIGH ou LOW e input 2 em LOW ou HIGH, talvez tenha que inverter as linhas de acionamento no if / else, ou apenas inverter os fios do motor caso o motor comece a girar invertido.

Abraço.

int sensorPin = A0; //Potenciometro
int btInverter = A1; //Botão de inversao
int enable = 11; //Enable do circuito 1
int motorInput1= 12; //Motor pino 1
int motorInput2 = 13; //Motor pino 2
int sensordechuva = 3; //sensor de chuva

int tempPress = 0; //temporario de verificacao de botao pressionado
int direcao = 0; //direcao do motor (1 e 0)

void setup() {
//defino os canais de saida
pinMode(motorInput1, OUTPUT);
pinMode(motorInput2, OUTPUT);
pinMode(sensordechuva,INPUT);

//sentido de rotacao
digitalWrite(motorInput1, HIGH);
digitalWrite(motorInput2, LOW);
}

void loop() {
int sensorValue = analogRead(sensorPin);
int outputValue = map(sensorValue, 0, 1023, 0, 255);

//pino Enable baseado no valor do potenciometro (controle de potencia)
analogWrite(enable, outputValue);

//se o botao de inversao for pressionado
if(digitalRead(sensordechuva) == 0)
{

digitalWrite(motorInput1, LOW);
digitalWrite(motorInput2, HIGH);

}
else
{
digitalWrite(motorInput1, HIGH);
digitalWrite(motorInput2, LOW);
}
delay(100);
}

funciono?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço