Jump to content

Mecanismo Portão


Recommended Posts

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

Link to comment
Share on other sites

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

  }

}
Link to comment
Share on other sites


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 () {

}

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 () {

}

Link to comment
Share on other sites

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 () {

}

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.