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