ARDUINO - PRECISO ACIONAR QUATRO MOTORES CADA UM EM UM HORARIO DIFERENTE E POR PERIODOS DE TEMPO DIFERENTES ALGUEM PODE ME AJUDAR???

ARDUINO -  PRECISO ACIONAR QUATRO MOTORES CADA UM EM UM HORARIO DIFERENTE E POR PERIODOS DE TEMPO DIFERENTES ALGUEM PODE ME AJUDAR???

Exibições: 1592

Responder esta

Respostas a este tópico

 Não tenho conhecimentos em arduino mas já programei em Delphi e gostaria de saber por onde iniciar, eu preciso acionar quatro motores para um alimentador de  cães cada

um em um horário e por períodos de funcionamento diferentes.

ESSE MODELO EU ACHEI AQUI NO SITE SERIA ALGO PARECIDO, MAS O USUARIO IRIA USAR UM 3 PUSH BUTTOM PARA SELECIONAR ENTRE 3 PROGRAMAS DIFERENTE .

CADA PROGRAMA ACIONARIA OS 4 MOTORES CADA UM EM UM TEMPO DIFERENTE E POR UM PERÍODO DE FUNCIONAMENTO, TUDO PRÉ PROGRAMADO.

A ÚNICA COISA QUE O USUÁRIO PODERIA SELECIONAR SERIA  ENTRE AS TRES PROGRAMAÇÕES.

ESSE FOI O MODELO QUE ACHEI NO SITE ALGUÉM PODE ME AJUDAR???

// temporizador para acionamento motor final

int seg=0, min=0,hor=0; // inteiros referente ao relógio
int motPin = 12; // pino de saida do sinal
int motState = LOW; // motState usado para armazena o estado atual do motor aceso o desligado
long intervalo = 1000; // intervalo de um segundo

void setup()
{
pinMode(motPin, OUTPUT); // saida do sinal para ativar o motor
Serial.begin(9600);

}
void loop (){

relogio();// aciona comando relógio
mot (); // aciona o comando motor

}
void relogio()
{
static unsigned long ult_tempo = 0;
int tempo = millis();
if(tempo - ult_tempo >= 1000) {
ult_tempo = tempo;
seg++;
}
if(seg>=60)
{
seg = 0;
min++;
}
if(min>=60) {
min = 0;
hor++;
}
if(hor>=24)
{
hor=0;
min=0;
}
Serial.print(hor); // imprime a hora no monitor serial para verificar se o relógio está funcionando
Serial.print(":");
Serial.print(min);
Serial.print(":");
Serial.println(seg);
}

void mot (){

if (hor == 6 || hor == 18 && min == 0 && seg <= 3){ // liga o motor quando for 6 ou 18 horas por aproximadamente 3 seg
motState = HIGH;//
}
else // caso contrário desliga o motor
{
motState = LOW; // caso contrário desliga o motor no restante do tempo
}

digitalWrite(motPin, motState);
if (motState == HIGH)
Serial.println("ligou"); // imprime ligou no serial monitor para verificar se o código está funcionando
else
Serial.println("desligou");// imprime "desligou" no serial monitor para verificar se o código está funcionando
}// fim

testei o código funciona o circuito ficou igual abaixo:

Utilizei os seguintes componentes
1 vibramotor de celular
1 TIP 222
1 resistor 1 k ohlm
1 diodo IN4007

no projeto final irei utilizar dois motores

Agora com o esquema funcionando só preciso descobrir quantos segundos o motor precisa funcionar para que derrube a quantidade de ração que eu preciso, mas isso é tranquilo.

Olá Clayton,

   Sim, dá pra fazer em arduino e com uma relativa facilidade o que você deseja.

   Nesse codigo que você apresentou, é utilizado o proprio clock do arduino para gerar um relogio, o que signfica dizer que quando faltar energia vai tudo pra o ralo,  mas se sua intenção é fazer funcionar, mas não se preocupando com o horario em si, mas apenas com a diferença de tempo entre acionamentos, então tá tudo ok.

   Vamos ao codigo que você colocou, vou tentar explicar já que você diz que não entende muito de arduino.

Nesse codigo, a parte importante esta dentro do void loop, é lá que acontece a festa.

No seu exemplo, foi criada uma programação estruturada, onde se criou duas funções, uma é a função relogio, a outra é o acionamento de um motor em horario fixo setado no programa que serias as 6 e as 18h.

Bem, o que você pode fazer é copiar essa função mot()  e coloca-la como mot1(),  mot2(), mot3()... etc.   mudando apenas o horario em cada uma delas,  isso é bem facil de fazer,  é uma programação meio grande, mas é o mais facil de fazer.

Pra que a coisa fique mais fácil, dê uma olhada nesse meu tutorial ensinando justamente a fazer isso, ou seja, estruturar o codigo :   http://labdegaragem.com/forum/topics/tutorial-programando-de-forma-...

Sobre ter botões pra acionar, você os coloca na chamada de cada função, dentro do void loop,  fica algo mais ou menos tipo:

int buttonState=digitalRead(2);

 if (buttonState==HIGH){

mot1();

}

Dai é só replicar pra os outros botões.

Mas antes de mais nada, aconselho vocÊ a dar uma lida a mais sobre arduino,  existem otimos livros, vale a pena dar uma estudada,  eu programava no antigo Clipper e tambem já programei em Delphi,  parei,  mas a experiencia de programação ajuda de uma forma monstro a entender o arduino.

 

Esse é ó código que vou usar com apenas um motor e dois horários para ligar e desligar

Esse é ó código que vou usar com apenas um motor e dois horários para ligar e desligar:

int seg=0, minu=0,hor=0; // inteiros referente ao relógio
int motPin = 12; // pino de saida do sinal
int motState = LOW; // motState usado para armazena o estado atual do motor aceso o desligado
long intervalo = 1000; // intervalo de um segundo
void setup()
{
pinMode(motPin, OUTPUT); // saida do sinal para ativar o motor
Serial.begin(9600);
}
void loop (){
relogio();// aciona comando relógio
mot (); // aciona o comando motor
}
void relogio()
{
static unsigned long ult_tempo = 0;
int tempo = millis();
if(tempo - ult_tempo >= 1000) {
ult_tempo = tempo;
seg++;
}
if(seg>=60)
{
seg = 0;
minu++;
}
if(minu>=60) {
minu = 0;
hor++;
}
if(hor>=24)
{
hor=0;
minu=0;
}
Serial.print(hor); // imprime a hora no monitor serial para verificar se o relógio está funcionando
Serial.print(":");
Serial.print(minu);
Serial.print(":");
Serial.println(seg);
}
void mot (){

  if (hor == 0 && minu == 0 && seg > 5){ // define o primeiro horário de ligação do motor
motState = HIGH;//
}

if (hor == 0 && minu == 0 && seg > 10){ // define o primeiro horário de desligamento do motor
motState = LOW;//
}

if (hor == 0 && minu == 0 && seg > 15){ // define o segundo horário de ligação do motor
motState = HIGH;//
}

if (hor == 0 && minu == 0 && seg > 20){ // define o segundo horário de desligamento do motor
motState = LOW;//
}

digitalWrite(motPin, motState);
if (motState == HIGH)
Serial.println("ligou"); // imprime ligou no serial monitor para verificar se o código está funcionando
else
Serial.println("desligou");// imprime "desligou" no serial monitor para verificar se o código está funcionando
}

Estou precisando do seguinte um push button para hora e um push button para os minutos, a intenção é que o usuário possa  programar a hora em que o motor vai ligar e desligar, tudo isso sendo exibido num Display de 16x2. Ah! que essas mensagens exibidas no serial monitor possam ser impressas no monitor.  Você pode me ajudar???

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço