1.3 Chuveiro Inteligente

Fazer download em docx, pdf ou txt
Fazer download em docx, pdf ou txt
Você está na página 1de 15

GUILHERME BORTOLOTTO

GUILHERME WEBER
LEONARDO JUSTEN
LUCCA PIOVESAN
MATHEUS FRANCO DOS SANTOS
VICTOR ROCHA GONÇALVES

GRUPO 5
PROJETO MECATRÔNICO: CHUVEIRO INTELIGENTE

Trabalho apresentado na
disciplina de Princípios de
Mecatrônica ministrada pela Prof.
Giuliana Venter do curso de
Engenharia Mecânica da
Universidade Federal do Paraná.

CURITIBA
2020
1. DESCRIÇÃO GERAL E OBJETIVO DO PROJETO

Com as recentes estiagens na região sul do país, que costuma sempre contar
com muitos recursos hídricos, viu-se a necessidade de economizar água ao máximo.
Dado este cenário, o objetivo do projeto é criar um chuveiro que junte as necessidades
ambientais da economia de água com o conforto necessário para um banho.
Isto será feito da seguinte maneira: um chuveiro com sensor de proximidade,
que só ligará na presença do usuário e desligará assim que não detectar mais
ninguém. Ao detectar presença, o chuveiro iniciará o processo de aquecimento da
água por alguns segundos antes de liberar a água, evitando assim um spray inicial frio.
A temperatura da água também será regulada automaticamente, por meios de
dois termômetros, um para medir a temperatura ambiente e outro para temperatura de
saída da água. A programação do Arduino fará com que em dias frios os banhos
sejam mais quentes e em dias quentes banhos mais frescos. Há ainda a possibilidade
do desligamento automático ao fim de um tempo pré-determinado (5/7/10 minutos)
que pode ser programado, com o objetivo de evitar banhos longos e mais desperdício
de água. A vazão será fixada em um valor que torne o banho confortável, próxima a
máxima suportada pelo equipamento.

2. SENSORES

2.1. Sensor de Temperatura DS18B20

O sensor de temperatura DS18B20 a prova d’água do tipo sonda é um dos


componentes mais utilizados em projetos que envolva medição de temperatura em
ambientes úmidos ou em recipientes com liquido. O sensor é revestido por um material
à prova d’água e sua ponta é encapsulada em aço inoxidável.
Este sensor é permite fazer leituras de 9 a 12 bits de resolução, possui
comunicação através de um único fio, permitindo que vários sensores de temperatura
DS18B20 sejam ligados utilizando uma única saída do microcontrolador. Como o
sensor possui ID único de 64 bits, os dois sensores de temperatura utilizados neste
projeto podem ser ligados em apenas uma porta do microcontrolador.
Figura 1 - Sensor de temperatura DS18B20
O sensor de temperatura DS18B20 é à prova d'água, com faixa de medição de
-55ºC a 125ºC, precisão de ±0,5°C e período de atualização de 750ms. Seu
encapsulamento (6mm x 50mm) é em aço inoxidável e o comprimento do cabo é de
1m. A tensão de operação deste sensor é de 3 a 5,5V em corrente contínua.

Cada sensor custa R$ 12,28 e foram utilizados dois sensores na construção do


projeto, um capta a temperatura da água de entrada (temperatura ambiente) e o outro
a temperatura da água na saída (após a passagem pelo potenciômetro), totalizando
R$ 24,56.

2.2. Sensor ultrassônico JSN-SR04T

O JSN-SR04T é um Sensor Ultrassônico que pode medir distâncias de 20 cm a


450cm sem contato físico. Possui Sonda à prova d'água e dispõe de cabo com 2.5 m,
o que possibilita medir distância em ambientes úmidos sem danificar o circuito.
São permitidas leituras de informações em até 3 modos distintos, o que foi
utilizado no projeto é o modo 2: saída de dados seriais 1, com período de atualização
de 100ms. O módulo envia a distância lida em milímetros em nível TTL.
Figura 2 - Sensor ultrassônico JSN-SR04T

Dentre as vantagens deste sensor estão a facilidade de implementação devido


às dimensões reduzidas do sensor e o baixo consumo de energia. Sua tensão de
trabalho é de 3 a 5 V e corrente de trabalho de 30 mA. Sua frequência de emissão
acústica é de 40 kHz, com resolução de 1 cm e ângulo de detecção de 50º. Este
sensor custa R$ 21,33.

3. ATUADORES

3.1 Potenciômetro Digital


Para arbitrar a temperatura do chuveiro, o potenciômetro digital irá atender ao
comando de um sinal digital enviado ao mesmo, acionando o resistor na medida que a
pessoa que utiliza o chuveiro precisa. Desta forma aumenta-se ou diminui-se a
resistência do circuito, através do controle das entradas digitais do potenciômetro,
exercendo uma variação analógica de tensão em um circuito. O Potenciômetro de 8
Bits (Figura 3) além de ser o mais comum atende aos requisitos do projeto, oferecendo
256 combinações resistivas diferentes no circuito.
Figura 3 – Potenciômetro Digital

3.2 Servo Motor

Os servos são atuadores projetados para aplicações onde é necessário fazer o controle
de movimento com posicionamento de alta precisão, reversão rápida e de alto desempenho.
Por ser mais compacto, custo reduzido, ruído magnético e baixa velocidade, o motor de passo
é o mais indicado para nosso projeto, por atender as especificações.

Para abrir e fechar o fluxo de água, o servo motor – Motor de passo (Figura 4) irá
receber o sinal de presença do sensor e acionar, através de um giro, a válvula de gaveta
utilizada normalmente de forma manual, assim acionando ou encerrando o fluxo.

Figura 4 – Motor de passo NEMA 17hs4401

4. ARDUINO UNO

4.1 Câmara hermética HD-45F NEMA


Para proteger o Arduino da umidade presente em seu ambiente de trabalho,
optou-se pela caixa de proteção da PolyCase HD-45F NEMA feita de policarbonato,
ilustrado na Figura 5. A câmara é à prova d'água e atende as necessidades de projeto.
Figura 5 – HD-45F NEMA
Para instalação será necessário fazer furos por onde devem passar os cabos,
com uma furadeira. Para manter a caixa vedada adequadamente, deve-se utilizar o
CG1 Black Cable Gland da Polycase, conforme ilustrado na Figura 6.
Figura 6 - CG1 Black Cable Glands

5. DESCRIÇÃO DETALHADA DO PROJETO E ADEQUAÇÕES

5.1 Descrição detalhada do projeto


A norma NBR 5626, referente à instalação predial de água fria, estabelece vazão
mínima para chuveiros de 12 l/min - adotada como parâmetro de projeto do chuveiro
para vazão constante.
O banho muito quente, com temperatura acima de 42°C, torna-se prejudicial,
pois pode ressecar muito a pele e estimular glândulas sebáceas a produzirem mais
oleosidade, inclusive em couro cabeludo. Já, abaixo de 29°C, a temperatura ficaria
muito fria e, se a pessoa ficar muito tempo na água, além de ressecar, poderia baixar
a temperatura corporal e a pessoa ter sintomas de hipotermia, como tremores, por
exemplo. Conforme elucida Camilla de Barros Borges, médica dermatologista e
preceptora da Residência Médica do Hospital das Clínicas da Universidade Federal de
Goiás (HC-UFG), o banho ideal é o que se assemelha a nossa temperatura corporal.
Devido as diferenças de temperaturas corporais, as mulheres costumam preferir
banhos entre 33º e 42º enquanto que os homens costumam preferir entre 31º e 40º. A
lei de controle foi programada para que temperatura do banho seja a ideal, tendo em
vista restrições de saúde e bem-estar. Portanto, optou-se pela zona de convergência
entre as faixas de temperatura agradáveis para homens e mulheres [33°C,40°C] como
uma função da temperatura ambiente conforme a fórmula a seguir:

33 se T a >30 ° C

{
T água= −0.35 ∙ T a + 43.5 se 10≤ T a ≤ 30 ° C
40 se T a <10 ° C

5.2 Adequações feitas devido ao modo EAD - Tinkercad


Devido ao uso do programa Tinkercad, o projeto do simulador terá três
modificações principais, sendo duas para os sensores e uma para um dos atuadores.
No projeto real, devido às condições de operação, seria necessária a utilização
de sensores de temperatura e de proximidade resistentes à umidade e à água.
Entretanto, o Tinkercad não possui tais modelos de sensores para a simulação. Então
para a medição da proximidade será utilizado o sensor de proximidade ultrassônico
modelo HC-SR04 e para a medição da temperatura da água e do ambiente serão
utilizados dois sensores de temperatura do modelo padrão disponível no simulador.
A terceira adequação será na questão do potenciômetro digital. No Tinkercad
esse componente não existe e o potenciômetro analógico, o componente mais
próximo disponível no programa, não pode ser usado como atuador no simulador. A
solução encontrada foi representar a atuação do potenciômetro digital através da
variação da intensidade luminosa emitida por um LED padrão do simulador.

6. FOTOS DETALHADAS DA MONTAGEM NO TINKERCAD E, SE TIVEREM, CAD


E/OU DESENHO ESQUEMÁTICO DO PROTÓTIPO REAL (PARA O
PROTÓTIPO REAL SERÁ CRÉDITO EXTRA: VALE 10% DA NOTA DO
PROJETO A MAIS - TIROU 80? GANHARÁ 88)

7. CÓDIGO COMENTADO E LINK DO TINKERCAD

7.1 Código comentado

// Declaração das variáveis

#include <Servo.h>

// Servo motor

Servo servo_10;

//Distância medida pelo sensor de proximidade

float Distancia = 0;
// Posição do servo motor

float Graus = 0;

// Led na porta 3

int Led = 3;

// intensidade luminosa do led

float Brilho = 0;

// sensor de temperatura do ambiente

float sensorAmbiente = A0;

// sensor de temperatura da água

float sensorAgua = A1;

// Leitura do sensor de temperatura do ambiente

float temperaturaAmbiente = 0;

// Temperatura ideal para o banho

float temperaturaIdeal = 0;

// Leitura do sensor de temperatura da água

float temperaturaSaida = 0;

void setup(){

Serial.begin(9600);

// Definindo Servo motor no pino 10

servo_10.attach(10, 500, 2500);

// Definindo o Led como saída

pinMode(Led , OUTPUT);

// Definindo Sensor de temperatura ambiente como entrada

pinMode(sensorAmbiente , INPUT);

// Definindo Sensor de temperatura da água como entrada

pinMode(sensorAgua , INPUT);

}
// Função para ler o sensor ultrassônico de proximidade

long readUltrasonicDistance(int triggerPin, int echoPin) {

// Definir pino trigger como saída

pinMode(triggerPin, OUTPUT);

// Setar pino trigger como desligado

digitalWrite(triggerPin, LOW);

delayMicroseconds(2);

// Setar pino trigger como ligado por 10 microsegundos

digitalWrite(triggerPin, HIGH);

delayMicroseconds(10);

digitalWrite(triggerPin, LOW);

// Definir pino echo como entrada

pinMode(echoPin, INPUT);

// Ler o pino echo e retornar o tempo de viajem da onda sonora em microsegundos

return pulseIn(echoPin, HIGH);

// programação do servo em relação ao sensor de proximidade

void Movimenta_Servo(float D, float G) {

if (D <= 100) {

servo_10.write(90);

} else {

servo_10.write(0);

G = servo_10.read();

Serial.print("distancia: ");

Serial.println(D);

delay(500);

Serial.print("graus do servo: ");

Serial.println(G);
delay(1000);

// Correção da Potência (Brilho do Led)

void Corrigir_Potencia(float b , float ts , float tm , int L , float tamb, float dist) {

// Correção da potência caso temperatura de saída menor do que a requerida

if(ts < tm) {

if(b < 255) {

do {

b = b + 1;

analogWrite (L, b);

Mostrar_Dados_Monitor_Serial(b, tamb, tm, ts);

ts = map(((analogRead(sensorAgua) - 20) * 3.04) , 0 , 1023 , -40 , 125);

dist = 0.01723 * readUltrasonicDistance(2, 5);

if (dist >= 100) {

delay(500);

break;

delay(1000);

while(ts < tm);

else {

b = 255;

analogWrite (L, b);

Mostrar_Dados_Monitor_Serial(b, tamb, tm, ts);

ts = map(((analogRead(sensorAgua) - 20) * 3.04) , 0 , 1023 , -40 , 125);

delay(1000);

}
}

// Correção da potência caso temperatura de saída maior do que a requerida

else if (ts > tm) {

if(b > 0) {

do {

b = b - 1;

analogWrite (L, b);

Mostrar_Dados_Monitor_Serial(b, tamb, tm, ts);

ts = map(((analogRead(sensorAgua) - 20) * 3.04) , 0 , 1023 , -40 , 125);

dist = 0.01723 * readUltrasonicDistance(2, 5);

if (dist >= 100) {

delay(500);

break;

};

delay(1000);

while(ts > tm);

else {

b = 0;

analogWrite (L, b);

Mostrar_Dados_Monitor_Serial(b, tamb, tm, ts);

ts = map(((analogRead(sensorAgua) - 20) * 3.04) , 0 , 1023 , -40 , 125);

delay(1000);

}
//Print no monitor serial para verificar os dados

void Mostrar_Dados_Monitor_Serial(float br , float temp, float tempm, float temps) {

Serial.print("Brilho: ");

Serial.println(br);

delay(500);

Serial.print("Temperatura ambiente: ");

Serial.println(temp);

delay(500);

Serial.print("Temperatura da agua ideal: ");

Serial.println(tempm);

delay(500);

Serial.print("Temperatura sensor da agua: ");

Serial.println(temps);

delay(500);

void loop() {

// descrição dos dados do servo motor e do sensor de proximidade

Distancia = 0.01723 * readUltrasonicDistance(2, 5);

Graus = servo_10.read();

Movimenta_Servo(Distancia, Graus);

delay(2000);

// Se o Servo motor estiver liberando o fluxo de água

if (Graus == 90) {

do {
// Leitura dos sensores da temperatura ambiente e da temperatura de saída da água,
respectivamente:

temperaturaAmbiente = map(((analogRead(sensorAmbiente) - 20) * 3.04) , 0 , 1023 ,


-40 , 125);

temperaturaSaida = map(((analogRead(sensorAgua) - 20) * 3.04) , 0 , 1023 , -40 ,


125);

//Para temperatura ambiente maior do que 30 graus

if (temperaturaAmbiente >= 30){

temperaturaIdeal = 33;

// A potência necessária para esquentar a água pode ser obtida através da seguinte
função:

// P = Rm * c * (Ts - Te), onde Rm é a vazão mássica; c é o calor específico da água e

// Te é a temperatura de entrada da água e Ts é a temperatura de saída

// Nesse caso, P será representado pelo brilho do Led

// c = 4186 J/(kg*k)

// Rm = 0.2 kg/s

//O brilho do Led varia em uma faixa de 0 a 255, já a potência do chuveiro varia de 0
a 33500 watts

//(potência necessária para aquecer a água a 40 graus em uma temperatura


ambiente de 0 graus).

//Então a função a baixo transforma os valores de potência para uma faixa de 0 a


255

Brilho = (0.2*4186*(temperaturaIdeal - temperaturaAmbiente))/131.3255;

if (Brilho < 0) {

Brilho = 0;

else if (Brilho > 255) {

Brilho = 255;

analogWrite (Led, Brilho);


Corrigir_Potencia(Brilho, temperaturaSaida, temperaturaIdeal, Led,
temperaturaAmbiente, Distancia);

delay(5000);

Distancia = 0.01723 * readUltrasonicDistance(2, 5);

if (Distancia >= 100) {

delay(500);

break;

//Para temperatura ambiente menor do que 10 graus

else if (temperaturaAmbiente < 10){

temperaturaIdeal = 40;

Brilho = (0.2*4186*(temperaturaIdeal - temperaturaAmbiente))/131.3255;

if (Brilho < 0) {

Brilho = 0;

else if (Brilho > 255) {

Brilho = 255;

analogWrite (Led, Brilho);

Corrigir_Potencia(Brilho, temperaturaSaida, temperaturaIdeal, Led,


temperaturaAmbiente, Distancia);

delay(5000);

Distancia = 0.01723 * readUltrasonicDistance(2, 5);

if (Distancia >= 100) {

delay(500);

break;

//Para temperatura ambiente maior do que 10 graus e menor do que 30 graus


else {

temperaturaIdeal = (-0.35) * temperaturaAmbiente + 43.5;

Brilho = (0.2*4186*(temperaturaIdeal - temperaturaAmbiente))/131.3255;

if (Brilho < 0) {

Brilho = 0;

else if (Brilho > 255) {

Brilho = 255;

analogWrite (Led, Brilho);

Corrigir_Potencia(Brilho, temperaturaSaida, temperaturaIdeal, Led,


temperaturaAmbiente, Distancia);

delay(5000);

Distancia = 0.01723 * readUltrasonicDistance(2, 5);

if (Distancia >= 100) {

delay(500);

break;

Distancia = 0.01723 * readUltrasonicDistance(2, 5);

Movimenta_Servo(Distancia, Graus);

delay(1000)

while (Graus == 90);

// Se o Servo motor não estiver liberando o fluxo de água

else {

do {

Brilho = 0;
analogWrite (Led, Brilho);

Serial.println("Aquecimento desligado");

delay(400);

Serial.print("Brilho: ");

Serial.println(Brilho);

Distancia = 0.01723 * readUltrasonicDistance(2, 5);

if (Distancia <= 100) {

delay(500);

break;

Movimenta_Servo(Distancia, Graus);

delay(500);

while (Graus == 0);

7.2 Link para acesso ao código do Tinkercad

O código está disponível em: https://www.tinkercad.com/things/aTe8Dj3IZIB

Você também pode gostar