Olá amigos, sou novo no Lab e preciso de uma ajuda com um projeto que estou montando. Segue o esboço do código abaixo.

O sistema funcionará de forma que os servos controlarão os registros de água fria e quente. O registros que utilizarei serão de abertura em 180 graus, assim como os servos.

 

Bom, gostaria de saber se estou indo pelo caminho correto, pois simulei o código no Proteus e inicialmente não obtive o resultado desejado.
Durante a simulação os servos responderam de maneira que o incremento/decremento da sua posição era muito acima do desejado, 9. No Proteus esse incremento passa de 15, 20, ele fica bem instável. (testado e funcionando!)

 

......ATUALIZADO 12/09/2013

Preciso de críticas! Agradeço a ajuda de todos!

#include <Servo.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 10

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

DeviceAddress tempBoiler = {0x28, 0x78, 0x1E, 0x22, 0x05, 0x00, 0x00, 0xBB};
DeviceAddress tempExit = {0x28, 0x04, 0xFB, 0x22, 0x05, 0x00, 0x00, 0x56};


Servo cWater;
Servo hWater;

float tempCBoiler = 0; //temperatura do reservatório
float tempCExit = 0; //temperatura do cano de saida

int sButton = HIGH;
int pButton = HIGH;
int mButton = HIGH;


int sTemp; //tempo definido para desligar banho
int dTime = 15; //"duration time" tempo de banho
float fWater = 100; //fluxo da água(pressão) 100% 120% 140% 160%
int iMenu = 0;
int sWarning =0;
int pcWater; //posição servo frio
int phWater; //posição servo quente
float dTemp = 40.0; //temperatura desesada para uso
String sMenu[] = {"Ligar", "Configurações", "Sair", "Temperatura", "Duração","Vazão","Data e","Aviso","Retornar"};
String sSubMenu[] = {"Misturador?", "", "", "Padrão","do Banho","da Água","Hora","Sonoro",""};


void setup()
{
Serial.begin(9600);
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(7, INPUT);
cWater.attach(3);
hWater.attach(5);
sensors.begin();
sensors.setResolution(tempBoiler, 10);
sensors.setResolution(tempExit, 10);
}


void loop()
{
sButton = !digitalRead(2);
if(sButton == HIGH)//inicia rotina
{
Serial.println(sButton);
Serial.print("Aguarde");//lcd
for(int i = 0; i < 10; i++)
{
Serial.print(".");
delay(300);
}
iMenu = 0;
Serial.println("Pronto!");
while(iMenu >= 0)
{
Serial.print(sMenu[iMenu]);//lcd
Serial.println(sSubMenu[iMenu]);//lcd
while(sButton == HIGH && pButton == HIGH && mButton == HIGH)
{
sButton = digitalRead(2);
pButton = digitalRead(4);
mButton = digitalRead(7);
}
delay(300);

if(pButton == LOW)//botão PLUS
{
iMenu++;
if(iMenu == 3)iMenu = 0;
pButton = HIGH;
} else {
if(mButton == LOW)//botão MINUS
{
iMenu--;
if(iMenu == -1)iMenu = 2;
mButton = HIGH;
} else {
if(sButton == LOW)//botão START
sButton = HIGH;
{
switch(iMenu)
{

case 0:
/*

#######################
# INICIA MISTURADOR #
#######################

*/
setPosition();
while(sButton == HIGH)
{
getTemperatures();
waterTap(tempCExit, tempCBoiler);

sButton = digitalRead(2);
pButton = digitalRead(4);
mButton = digitalRead(7);
setTemperature();

}
sButton = HIGH;
Serial.println("Desligado!");
delay(300);
break;


case 1://abre subMENU
iMenu = 3;
while(iMenu >= 3)
{
Serial.print(sMenu[iMenu]);//lcd
Serial.println(sSubMenu[iMenu]);//lcd
while(sButton == HIGH && pButton == HIGH && mButton == HIGH)
{
sButton = digitalRead(2);
pButton = digitalRead(4);
mButton = digitalRead(7);
}
delay(300);

if(pButton == LOW)//botão PLUS
{
iMenu++;
if(iMenu == 9)iMenu = 3;
pButton = HIGH;
} else {
if(mButton == LOW)//botão MINUS
{
iMenu--;
if(iMenu == 2)iMenu = 8;
mButton = HIGH;
} else {
if(sButton == LOW)//botão START
{
sButton = HIGH;
delay(300);
switch(iMenu)
{
case 3://temperatura da água
Serial.println("Temperatura");//LCD
Serial.println(dTemp);//LCD
while(sButton == HIGH)
{
sButton = digitalRead(2);
pButton = digitalRead(4);
mButton = digitalRead(7);
setTemperature();
}
if(sButton == LOW)
{
sButton = HIGH;//condição de saída
delay(300);
}
break;

case 4://tempo de banho
Serial.println("Duração");//LCD
Serial.print(dTime);//LCD
Serial.println("min");
while(sButton == HIGH)
{
sButton = digitalRead(2);
pButton = digitalRead(4);
mButton = digitalRead(7);
if(pButton == LOW)
{
dTime += 1;
Serial.print(dTime);//LCD
Serial.println("min");
delay(300);
}
if(mButton == LOW)
{
dTime -= 1;
Serial.print(dTime);//LCD
Serial.println("min");
delay(300);
}
}
if(sButton == LOW)
{
sButton = HIGH;//condição de saída
delay(300);
}
break;

case 5://vazão da água (100,120,140,160%)
Serial.println("Vazão da água");//LCD
Serial.println(fWater);//LCD
while(sButton == HIGH)
{
sButton = digitalRead(2);
pButton = digitalRead(4);
mButton = digitalRead(7);
if(pButton == LOW)
{
fWater += 20;
if(fWater > 160)
{
Serial.println("Máximo!");
fWater = 160;
}
Serial.println(fWater);//LCD
delay(300);
}
if(mButton == LOW)
{
fWater -= 20;
if(fWater <100)
{
Serial.println("Mínimo!");
fWater = 100;
}
Serial.println(fWater);//LCD
delay(300);
}
}
if(sButton == LOW)
{
sButton = HIGH;//condição de saída
delay(300);
}
break;

case 6://data e hora
break;

case 7://Aviso sonoro (sim/não)
Serial.println("Aviso");//LCD
if(sWarning == 0) Serial.println("OFF");
else Serial.println("ON");
while(sButton == HIGH)
{
sButton = digitalRead(2);
pButton = digitalRead(4);
mButton = digitalRead(7);
if(pButton == LOW)
{
sWarning =0;
Serial.println("OFF");//LCD
delay(300);
}
if(mButton == LOW)
{
sWarning = 1;
Serial.println("ON");//LCD
delay(300);
}
}
if(sButton == LOW)
{
sButton = HIGH;//condição de saída
delay(300);
}
break;

case 8://retornar;
iMenu = 1;
break;
}
}
}
}
}
break;




case 2://finaliza rotina
iMenu = -1;
break;
}
}

}
}


}

Serial.println("Sistema desligado!");
delay(2000);
}
}

void waterTap (float eTemp, float bTemp) //manipulação dos registros/servos
{
if(dTemp > bTemp)
{
Serial.print("Temp.Max = ");
Serial.println(bTemp);
cWater.write(0);
hWater.write(180);
}
else
{
if(eTemp < dTemp)
{
if(pcWater > 0 && phWater <180)
{
pcWater -= 9;
phWater += 9;
cWater.write(pcWater);
hWater.write(phWater);
}
}
if(eTemp > dTemp)
{
if(pcWater < 180 && phWater > 0)
{
pcWater -= 9;
phWater += 9;
cWater.write(pcWater);
hWater.write(phWater);
}
}
}
}

void setPosition() //define posição inicial dos servos
{
pcWater = (180/2)*(fWater/100);
phWater = (180/2)*(fWater/100);
cWater.write(pcWater);
hWater.write(phWater);
}

void getTemperatures() //lê temperatura dos sensores
{
sensors.requestTemperatures();
tempCBoiler = sensors.getTempC(tempBoiler);
tempCExit = sensors.getTempC(tempExit);
}

void setTemperature() //define temperatura de saída da água
{
if(pButton == LOW)
{
dTemp += 1.0;
Serial.println(dTemp);//LCD
delay(300);
}
if(mButton == LOW)
{
dTemp -= 1.0;
Serial.println(dTemp);//LCD
delay(300);
}
}

 

Exibições: 2147

Responder esta

Respostas a este tópico

Carlos,

conte comigo para qualquer teste.

O chuveiro que eu comprei veio da thermosystem. Modelo turbo e digital.

Eu faco incrementos de 1 em 1% pelo controle. No botao do aparelho vai de 5 em 5%. Nao vou colocar o link para nao ser bloqueado pelo site. Olha no Mercado Livre.

Vou fazer o seguinte. Depois de muito estudar vi que as celulas solares fotovoltaicas sao mais eficientes frias. Como eu posso obter esse residuo, que 'e a agua fria, vou esfriar as celulas solares e obter agua quente. Dai uso o apoio eletrico so para completar. O misturador me interessa. Vamos estudando que te apoio no que for preciso.

Sidney, muito boa sua ideia! Com certeza será uma ótima forma de aproveitar o máximo da energia solar! Eu vi o chuveiro que você falou.. parece ser muito bom para esse propósito de backup... por enquanto eu acho que vou investir em um dimmer mesmo! =] acho que vai ficar mais em conta! Vou fazer o possível para terminar meu projeto no máximo até semana que vem... depois posso te mandar para você dar uma olhada e uma revisada? Poxa.. só uma dúvida... você já montou/comprou o painel fotovoltaico?Abraços!

Carlos,

eu montei sim. Comprei as celulas de 3x6 e foi na mao mesmo.

Fiz a soldagem e montei um quadro de aluminio.

Vou correr para mostrar o video que fiz. O duro ta subir arquivos grandes para o youtube.

Tenho um dimmer tambem. Mas comprei para outro uso.

O chuveiro a que o Sidney deve estar se referindo pode ser o da Thermo System. Funciona excepcionalmente bem, ou seja, voce toma banho na temperatura exata que quer. 

Eu também já tive a idéia de fazer algo semelhante, mas o custo desse chuveiro é tão pouco e é tão eficiente que abandonei a idéia pelo custo/benefício desfavorável ao desenvolvimento de um projeto pessoal.

(a Lorenzetti também tem um semelhante, mas acho que o Thermo é melhor e mais durável. Já tive ambos, na faixa de R$ 70. A resistência também é bem durável, pois nunca recebe aquela "pancada" ao ser ligada.)

Atualizado em 12/09/2013 - 23:05

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço