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");
}
Tags:
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...
Luana, como os colegas já disseram, primeiro escolha o motor e o circuito de controle do motor.
Um dos mais usados é com L298:
https://www.google.com.br/#q=arduino+l298
Recomendo que leia essa material
https://learn.adafruit.com/adafruit-arduino-lesson-16-stepper-motor...
https://learn.adafruit.com/adafruit-motor-selection-guide
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por