Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

esponjinha

Mecanismo Portão

Mensagens Recomendadas

esponjinha

Boas estou a desenvolver um mecanismo de um portao  com um motor dc e dois switchs.

O objectivo e kuando sobe e toca no switch pára, e depois so pode descer para baixo. E o mesmo kuando desce  toca no switch e pára.

A gora o problema e o codigo eu fiz o codigo para o motor rodar a direita e esquerda e fiz um a parte para o switch acender e apagar um led .Agora o que eu quero fazer e um codigo para isto ja junto.

Presizava da vossa ajuda para criar um programa para o motor e para o switch .

Obrigado filipe

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bubulindo

E colocares o código que fizeste aqui? Se não soubermos o que fizeste não podemos juntar os dois.


include <ai se te avio>

Mãe () {

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
esponjinha

E um arduino

O codigo esta aqui do motor:

int motorPin1 = 11;
int motorPin2 = 10;
int entrada = 0;


void setup() {
Serial.begin(9600);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);

}

void loop() {

// testa se a porta serial está disponível
if (Serial.available() > 0) {
// le os dados da porta serial armazena na variavel 'entrada'
entrada = Serial.read();
if (entrada == 'e'){
esquerda();

} else if (entrada == 'd'){
direita();

} else {
   parar()
   
}
}
}

void esquerda(){
digitalWrite(motorPin1, 1);   // Motor para a esquerda
digitalWrite(motorPin2, 0);   //
}

void direita(){
digitalWrite(motorPin1, 0);   // Motor para a esquerda
digitalWrite(motorPin2, 1);   //
}

void parar(){
digitalWrite(motorPin1, 0);   // para o motor
digitalWrite(motorPin2, 0);   //
}

e do switch esta aqui:

int switchPin = 2;
int switchValue = 0;

int ledPin = 13;
int counter = 0;

void setup() {
  
  pinMode(switchPin, INPUT); //set switch pin as INPUT
  pinMode(ledPin, OUTPUT); //set led pin as OUTPUT
  
}

void loop() {
  switchValue = digitalRead(switchPin); //get the switch's current value

  if (switchValue == HIGH) {
    
    digitalWrite(ledPin, HIGH); //turn LED on
    
  } else {
    
    digitalWrite(ledPin, LOW); // turn LED off

  }

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bubulindo


const int motorPin1 = 11;//o espaco de memória RAM do arduino é finito... 
const int motorPin2 = 10;
const int FechadoPin = 2;
const int AbertoPin = XXXXXXXX; //escolhe tu o pino
const int switchValue = 0;
char estado;
char entrada = 0; //a Serial funciona em ASCII, com chars. guardar chars em int é no mínimo desperdício... 
//como isto é C++, não sabes exactamente se a variável entrada vai ter o valor 'e' com char é garantido.


void setup() {
Serial.begin(9600);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
estado = 'p'; 
}

void loop() {

// testa se a porta serial está disponível
if (Serial.available() > 0) {
// le os dados da porta serial armazena na variavel 'entrada'
entrada = Serial.read();
if (entrada == 'e'){
    if (estado == 'd') {  //inversões de sentido à bruta em motores não é saudável... 
       parar();
       estado = 'p';
       } else {
       esquerda();
       estado = 'e';
       }
    }
if (entrada == 'd'){
    if (estado == 'e') {  //inversões de sentido à bruta em motores não é saudável... 
       parar();
       estado = 'p';
       } else {
          direita();
          estado = 'd';
    }
}

if ((digitalRead(FechadoPin) == HIGH) || (digitalRead(AbertoPin) == HIGH)) { //se chegaste ao fim de curso em qualquer um dos sentidos,
   parar();  //parar motor
   estado = 'p'; //actualizar estado. 
   }
}

void esquerda(){
   digitalWrite(motorPin1, 1);   // Motor para a esquerda
   digitalWrite(motorPin2, 0);   //
   }
}

void direita(){
   digitalWrite(motorPin1, 0);   // Motor para a esquerda
   digitalWrite(motorPin2, 1);   //

}

void parar(){
digitalWrite(motorPin1, 0);   // para o motor
digitalWrite(motorPin2, 0);   //
}

Talvez pudesse ser melhor... mas como está deve funcionar. À parte de algum erro que escapou.


include <ai se te avio>

Mãe () {

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
esponjinha

Obrigado pelo codigo e uma grande ajuda.

Eu no switch so tenho dois cabo o da c que liga o 5v e tenho o NC que ligei o ao pin 2  para o No n meti cabo e presizo por?

E que o meu objectivo e por um switch em cima e outro em baixo kunado o portao tocar no switch o portao pára.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bubulindo

NO quer dizer Normally Open.

NC quer dizer Normally Closed.

Normalmente usa-se lógica invertida para proteger contra a quebra de cabos. Logo, quando o portão tocar no switch, o sinal deve ir para zero. Talvez à sorte, ligaste isso correctamente.


include <ai se te avio>

Mãe () {

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bubulindo

Diz-me tu... tu disseste que vais ter dois switches. um é no pino 2, o outro é onde decidires. Eu não sei que pinos tens livres.


include <ai se te avio>

Mãe () {

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bubulindo

Não fazes... :S

Se o programa está feito para testar com dois switches, precisas de dois switches para o testar.

Se não tens switches, defines um pino que tenhas livre como entrada (para activar o pull up), e ligas um fio do GND a esse pino para simular um switch.


include <ai se te avio>

Mãe () {

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bubulindo

Coloca serial.write em vários pontos do programa para perceberes onde é que o programa está a parar...


include <ai se te avio>

Mãe () {

}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.