Motor de passo no arduino com sensor de temperatura e relógio.

Olá pessoal,

eu faço engenharia elétrica e preciso fazer um programa para o arduino (uso o uno) que aparece no lcd a temperatura,umidade e o relógio (o que já consegui fazer de boa e testei, funcionando perfeitamente) o problema é que agora tenho que incrementar neste programa um motor de passo para quando a temperatura cair e a umidade aumentar ele acionara o motor de passo no sentido horário e quando o inverso acontecer no sentido anti-horário. Basicamente é como se quando a temperatura cair e a umidade aumentar o motor fecharia uma janela automaticamente e quando o inverso acontecer ele abriria, uma climatização do ambiente automatizada.

Podem por defeito. hahaha

Meu programa ficou assim:

#include <LiquidCrystal.h>
#include "dht11.h"
#include <Stepper.h>
#define STEPS 100
#define pinSensor 3
Stepper stepper(STEPS, 5, 6, 9, 10);
LiquidCrystal lcd(2, 4, 7, 8, 12, 13);
dht11 sensor;

int Segundos = 0;
int Minutos = 0;
int Hora = 0;
char tempo[8];

void setup()
{
stepper.setSpeed(30);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);

lcd.begin(16, 2);
Serial.begin(9600);

cli();

TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;

OCR1A = 15624;

TCCR1B |= (1 WGM12);


TCCR1B |= (1 CS12)|(1 CS10);

TIMSK1 |= (1 OCIE1A);

sei();
}

void loop()
{

if(sensor.read(pinSensor)==0)
{
lcd.setCursor(1,1);
lcd.print("RH: ");
lcd.print(sensor.humidity);
lcd.print("%");
lcd.setCursor(1,4);
lcd.print("TEMP: ");
lcd.print(sensor.temperature);
lcd.print("C");

Serial.print("RH: ");
Serial.print(sensor.humidity);
Serial.println("%");
Serial.print("TEMP: ");
Serial.print(sensor.temperature);
Serial.println("C");
delay(1000);
}
{

if(sensor.read(sensor.humidity)>=60)
if(sensor.read(sensor.temperature)>=21)

{
stepper.step(100);
delay(100);

digitalWrite(9,HIGH);
delay(100);
digitalWrite(9,LOW);
delay(100);
digitalWrite(10,HIGH);
delay(100);
digitalWrite(10,LOW);
delay(100);
digitalWrite(5,HIGH);
delay(100);
digitalWrite(5,LOW);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6,LOW);
delay(100);
}

else;
{
stepper.step(-100);
delay(100);

digitalWrite(9,HIGH);
delay(100);
digitalWrite(9,LOW);
delay(100);
digitalWrite(10,HIGH);
delay(100);
digitalWrite(10,LOW);
delay(100);
digitalWrite(5,HIGH);
delay(100);
digitalWrite(5,LOW);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6,LOW);
delay(100);
}
}
}

ISR(TIMER1_COMPA_vect)
{

if (Segundos < 59)
{
Segundos++;
}
else
{
Segundos = 0;
Minutos++;
}

if (Minutos > 59)
{
Minutos = 0;
Hora++;
}
sprintf (tempo, "%02d:%02d:%02d",Hora, Minutos, Segundos);
Serial.println(tempo);
lcd.setCursor(4,0);
lcd.print(tempo);
lcd.print( "%02d:%02d:%02d");

}

Exibições: 1784

Responder esta

Respostas a este tópico

Oi Luana, vi o seu perfil, e vi que és de Uberlandia, eu adoro aquela região de minas, minha mãe era de Uberaba, morei lá por 2 anos, e fiquei bobo de ver como lá tem mulheres bonitas lá, e a gente de lá é muito simpática.

Pena que não tenho conhecimentos para lhe ajudar, na verdade, vou ficar de olho aqui, para apreender um pouco. abraço e boa sorte.

Ola Luana!

Não sei se vou ser de muita ajuda, não tenho experiencia com motores de passo, maasss vamos la...

essa função de rotação de motor, acho interessante colocá-las em métodos fora do void loop()... tipo... void abrir(), void fechar(), e ali dentro colocar o código necessário para tal função. Detalhe, esses métodos so seriam chamados se caso houver necessidade... se a janela já esta aberta, mesma a temperatura estando alta a janela ja esta aberta, não a necessidade de abrir ela novamente.

int x = 60;

int y = 21;

byte z = 0; // 0-fechado....1-aberto 

void loop(){

     if(umidade >= X && temperatura >= Y && Z == 0){

           abrir();

     }

     if(umidade < X && temperatura < Y && Z == 1){

           fechar();

     }

}

void abrir(){

     // girar motor

     Z = 1;

}

void fechar(){

      //girar motor

       Z = 0;

}

Isso só é uma dica... desculpe por não explicar exatamente como funciona o sistema de motor de passo.. mas é que eu também não conheço mas acho q esse tópico pode ajudar -->http://labdegaragem.com/profiles/blogs/uso-da-biblioteca-accelstepp...

Obrigada pela ideia!! Eu tinha meio que pensado assim inicialmente mas tava meio complicado, mas vc me deu uma luz de certa forma... =D

Dinada.. fico feliz em poder ter ajudado, e precisando é só pedir... =D

Olá, vi o seu codigo, e como sou iniciante mesmo, estive estudando-o para ver se entendo, mas essa parte:  

int x = 60;

int y = 21;

byte z = 0; // 0-fechado....1-aberto 

void loop(){

     if(umidade >= X && temperatura >= Y && Z == 0){

           abrir();   // Aqui não seria fechado?  desculpa, mas zero é fechado?

     }

     if(umidade < X && temperatura < Y && Z == 1){

           fechar();   // Aqui não seria aberto?  desculpa, mas 1 é aberto?

     }

Luana, como vc vai fazer o acionamento do motor de passo? Disso depende o programa que vc terá que fazer. Vc tem que ter no mínimo um chip L298D, mas pode também comprar um driver específico para acionamento desse tipo de motor.

o motor de passo se for unipolar n precisa da ponte H... so um ULN ou transistores, ai vai depender da amperagem que va precisar...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço