AlexandreBr
Member
- Joined
- Mar 18, 2015
- Messages
- 23
- Reaction score
- 5
Fala galera, tudo bem?
Me chamo Alexandre e estou a meio caminho do meu curso de Engenharia de Controle e Automação. E resolvi compartilhar esse meu pequeno projetinho
Esse aqui é um DIY para fazer o controle de temperatura do frigobar/freezer utilizando um Arduino.
Bom, primeira coisa, é bom ter um pouco de conhecimento elétrico e eletrônico para isso, apesar de bem básico.
Materiais:
1- Arduino (eu fiz o meu com um Uno, mas acho que com qualquer um consegue).
1- Sensor temperatura DS18B20
1 - Display LCD, 16x2.
1 - Capacitor 47nF 400v
1 - Triac BTA26600B - 25A
1 - MOC3043 (ou qualquer um equivalente que possua algo chamado Zero Cross)
1 - Placa Padrão perfurada.
1 - LED.
1 - Potenciometro 10k (para o display)
2- resistores 10k
2 - Botões Push-up
5 - Resistores 330 ohms
1 - resistor de 470 ohms
1 - resistor 4K7
1 - Multimetro digital.
Tempo e paciência.
Bom, com isso tudo em mãos a gente pode começar. Tenha em mente o seguinte: esses materiais são listados pelo jeito que eu fiz. Mas, uma vez que você tenha conseguido fazer funcionar, você é livre para modificar e customizar do jeito que bem entender.
Arduino:
Bom, o código do Arduino é bastante simples.. Nós vamos usar 4 bibliotecas: EEPROM, OneWire, DallasTemperature e LiquidCrystal. A primeira e a ultima são nativas do Arduino, então não tem que se preocupar com isso.
A Dallas você encontra aqui: http://www.hacktronics.com/code/DallasTemperature.zip
E a OneWire aqui: http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip
O código em si ocupa 168 linhas e possui 3 funções além da setup e loop.
Primeira coisa é as declarações de variáveis:
Na função de setup nós incializamos e configuramos algumas coisas:
Basicamente, incializamos o display, configuramos os pinos para entradas e saidas e localizamos o sensor de temperatura (altamente necessário caso contrário não funciona).
Feito isso, vamos para as funções adicionais, começando pela do sensor
Essa é bem simples e não precisa muita explicação, basicamente ele só pega o endereço do sensor e imprime isso na tela.
Agora, para uma das funções mais importantes, setar a temperatura.
Em meu projeto eu usei dois botões: 1 de set e 1 de ok. O botão "OK" é utilizado tanto para chamar, quanto para sair da função de setar a temperatura. Ou seja, para essa função nós temos que usar uma máquina de estado, a fim de prender o programa na função até ser dado o comando para o contrário. Algo parecido com isso:
Por fim, temos que salvar a temperatura que queremos na memória do Arduino, para isso precisamos usar a função EEPROM. Porém, a EEPROM do Arduino tem ciclos limitados.. então para evitar que fique se escrevendo lá toda hora que acessar a função, colocamos uma linha para fazer isso apenas quando o valor for diferente:
Com isso feito, iremos para a ultima função, comparar as temperaturas. Essa função é bem curta. Basicamente ela recebe o valor de temperatura que setamos, o valor lido pelo sensor e compara os dois valores.
Agora, por último, vamos para o código do loop. Esse código é o "corpo" do programa, vai ficar rodando e vai ser o responsável por chamar as outras funções. Para chamar a função de set temperatura eu fiz uma lógica que precisa que o botão "OK" fique apertado por +/- 5 segundos. Para isso, de novo, usamos uma máquina de estados. Note que isso tem que ir no começo do loop, para ser sempre a "prioridade" do código:
Notem também que chamei a temperatura do sensor lá no começo. Tive que fazer desta forma por que, caso contrário, a temperatura ficava piscando no display o tempo inteiro.. não muito ideal. Finalizando o código do loop temos a linha que imprime na tela a temperatura e chama a comparação entre ela e a salva:
A esse ponto, recomendo baixarem o código para o Arduino e montar o circuito, usando um LED para simular a parte do frigobar (liga_bta no código). Isso é importante para duas coisas: 1 - já ter parte do circuito pronto e sem falhas. e 2 - para entender o código e seu funcionamento, dessa forma fica mais facil procurar eventuais erros e efetuar alguma mudança. Outra coisa bem importante, monte essa parte do circuito em uma placa separada do outro, seja numa protoboard ou em uma outra placa perfurada.. Isso também é importante por que a outra parte do circuito vai ser lidada com 220V e é extremamente perigosa.
Provavelmente ficará algo assim:
Notem que o LED conectado na porta 5 do arduino será removido posteriormente e substituido pela próxima parte que falaremos a seguir.
Com essa parte feita, vamos para a outra e mais importante parte: O circuito AC 220.
O Arduino, obviamente, por si só não tem condições de acionar um freezer, ele fornece apenas 5V de saída e no máximo 30 ou 40mA por saída.. Porém, ele consegue acionar um circuito que acione o freezer. Só que como as tensões e correntes de um circuito desses são muito elevadas, isso torraria nosso pobre arduino.
Então é preciso isola-lo daquele circuito, porém ainda comunicar um com o outro. Para isso nós vamos usar o MOC 3043 (ou equivalente, com Zero Cross), que é um opto acoplador. Basicamente, é um CI que tem um LED infra vermelho que aciona um TRIAC interno que faz o outro circuito andar. Esse MOC é especifico por possuir o Zero Cross. Zero Cross é uma detecção de borda. Isso impede que o circuito acione "de soco", torna as coisas um pouco mais suaves e seguras, ameniza o impacto no motor do freezer.
O MOC tem suas características próprias, por exemplo, ele tem que ser acionado com no máximo 1.5V e 5mA. ATENÇÃO: Isso varia de modelo a modelo, pesquisem sobre seus componentes antes de fazer qualquer coisa.
Para fazer o Arduino reduzir sua tensão de saída e corrente, ligaremos 2 resistores de 330 em série (totalizando 660 ohms de resistência), no meu caso ainda liguei um Diodo na porta do arduino, apenas por precaução extra.
Esse conjunto (saida arduino - diodo - resistor) será ligado ao pino 1 do MOC, enquanto que o pino 2 será ligado ao GND (terra). Essa é a parte referente ao Arduino. Agora faremos a parte do TRIAC.
O TRIAC é um Triodo, especifico para AC (por isso o nome). O funcionamento dele é parecido com o de um Transistor: uma base (chamada de gate), um emissor (chamado de A1) e um coletor (A2). E, como um Transistor, a gente tem que alimentar ele externamente, nesse caso, com 220V. A fim de isso ficar mais claro, aqui está o simbolo dele:
O Pino A1 será onde será colocada a carga (freezer). Para isso, eu recomendo usar algo chamado borne que são pequenos conectorzinhos de plástico, reguláveis com uma chave, simples e eficaz. A carga é ligada em série com o TRIAC. Em paralelo à carga a gente liga o resistor de 470 e o capacitor de 47nF, isso ajuda a filtrar eventuais picos e da mais segurança ao motor e também ao circuito. Ou seja, no pino A1 ligamos um dos terminais do borne que vai para a carga e um dos terminais daquele conjunto resistor-capacitor. O outro terminal disso vai para a rede.
Já no pino A2 do TRIAC ligaremos o pino 6 do nosso MOC em série com um resistor de 330 e fecharemos o circuito da rede, apenas isso.
No pino G (gate), ligaremos o pino 4 do MOC em série com um resistor de 330 também.
Aqui está o esquema elétrico desenhado, para ficar um pouco mais claro:
Algumas dicas:
- Uma coisa interessante é usar uma régua (de tomadas), para ligar ao borne e ligar o freezer nessa régua, dessa forma não tem que destruir a flecha do seu freezer.
- Não se preocupe com espaçamento do circuito, é de extrema importância soldar os componentes bem e evitar curto circuitos, por motivos óbvios. Utilize bem de seus recursos, como o multímetro para detectar curtos e etc.
-Lembre-se de ter paciência, o circuito é de alta tensão. Tem que ficar sempre o mais bem feito possível.
- Antes de ligar qualquer coisa, tome todas precauções devidas, como se isolar, verificar se esta tudo OK sem curto.. essas coisas. Ultima coisa que queremos é tomar um choque desses, não é?
- De novo, procure entender o circuito e seu funcionamento, tornará as coisas mais fáceis.
Aqui um link de um pequeno vídeo demonstrando o meu circuito final, ligado ao freezer em funcionamento. Como pretendo evoluir este circuito mais adiante ele ainda está meio bagunçado (Pelo menos a parte do Arduino), pretendo melhorar isso com o tempo (próximo passo é permitir trabalhar com isso via Wireless por exemplo):
https://youtu.be/YqcXJrGKAa8
Por enquanto, acho que é isso gurizada. É um projetinho meio básico, mas a vantagem deste tipo de sensor é que ele é a prova d'água e um projeto assim nos da liberdade de fazer o que bem entendermos, imaginação é o limite. No total, sem contar o arduino, eu acredito que gastei em torno de 70 reais, mas comprei algumas coisas pela internet, então o custo aumenta um pouco.
Fico à disposição de vocês para dúvidas, sugestões e afins. Se preferirem, este é o meu Facebook, podem me contatar por lá: https://www.facebook.com/aleeebrito
Espero que tenham gostado.
Cheers!
Me chamo Alexandre e estou a meio caminho do meu curso de Engenharia de Controle e Automação. E resolvi compartilhar esse meu pequeno projetinho
Esse aqui é um DIY para fazer o controle de temperatura do frigobar/freezer utilizando um Arduino.
Bom, primeira coisa, é bom ter um pouco de conhecimento elétrico e eletrônico para isso, apesar de bem básico.
Materiais:
1- Arduino (eu fiz o meu com um Uno, mas acho que com qualquer um consegue).
1- Sensor temperatura DS18B20
1 - Display LCD, 16x2.
1 - Capacitor 47nF 400v
1 - Triac BTA26600B - 25A
1 - MOC3043 (ou qualquer um equivalente que possua algo chamado Zero Cross)
1 - Placa Padrão perfurada.
1 - LED.
1 - Potenciometro 10k (para o display)
2- resistores 10k
2 - Botões Push-up
5 - Resistores 330 ohms
1 - resistor de 470 ohms
1 - resistor 4K7
1 - Multimetro digital.
Tempo e paciência.
Bom, com isso tudo em mãos a gente pode começar. Tenha em mente o seguinte: esses materiais são listados pelo jeito que eu fiz. Mas, uma vez que você tenha conseguido fazer funcionar, você é livre para modificar e customizar do jeito que bem entender.
Arduino:
Bom, o código do Arduino é bastante simples.. Nós vamos usar 4 bibliotecas: EEPROM, OneWire, DallasTemperature e LiquidCrystal. A primeira e a ultima são nativas do Arduino, então não tem que se preocupar com isso.
A Dallas você encontra aqui: http://www.hacktronics.com/code/DallasTemperature.zip
E a OneWire aqui: http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip
O código em si ocupa 168 linhas e possui 3 funções além da setup e loop.
Primeira coisa é as declarações de variáveis:
Code:
#define ONE_WIRE_BUS 2
#define press_on 1
#define press_out 0
OneWire oneWire(ONE_WIRE_BUS);
LiquidCrystal lcd ( 13, 12, 11, 10, 9, 8);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1;
const int set = 3;
const int ok = 4;
const int liga_bta = 5;
const int led_bta = 6;
int state = 0;
int buttonState = 0;
float temp = 0;
float temp_sens1 = 0;
int contador = 0;
Na função de setup nós incializamos e configuramos algumas coisas:
Code:
void setup() {
sensors.begin();
lcd.begin(16, 2);
pinMode(set, INPUT);
pinMode(ok, INPUT);
pinMode(liga_bta, OUTPUT);
pinMode(led_bta, OUTPUT);
lcd.print("Localizando sensores DS18B20...");
delay(500);
lcd.clear();
lcd.print("Foram encontrados ");
lcd.print(sensors.getDeviceCount(), DEC);
lcd.print(" sensores.");
if (!sensors.getAddress(sensor1, 0))
Serial.println("Sensores nao encontrados !");
// Mostra o endereco do sensor encontrado no barramento
delay(500);
lcd.clear();
lcd.print("Endereco sensor: ");
lcd.setCursor(0,1);
mostra_endereco_sensor(sensor1);
delay(3000);
// put your setup code here, to run once:
}
Feito isso, vamos para as funções adicionais, começando pela do sensor
Code:
void mostra_endereco_sensor(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++)
{
// Adiciona zeros se necessário
if (deviceAddress[i] < 16) lcd.print("0");
lcd.print(deviceAddress[i]);
}
}
Agora, para uma das funções mais importantes, setar a temperatura.
Code:
void set_temp() {
float temperatura = 0;
int butstate = 0;
int butstate1 = 0;
int state = 0;
lcd.clear();
lcd.print("Set Temperatura");
delay(5000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(0, 1);
EEPROM.get(0, temperatura);
lcd.print(temperatura);
Code:
do {
lcd.setCursor(0, 1);
lcd.print(temperatura);
butstate = digitalRead(set);
if (butstate == HIGH)
{
if (temperatura < 24)
{
temperatura = temperatura + 0.5;
delay(100);
}
else
{
temperatura = 0;
}
}
delay (50);
butstate1 = digitalRead(ok);
if (butstate1 == HIGH)
{
state = 1;
}
delay(50);
} while (state == 0);
Code:
if (EEPROM.read(0) != temperatura) {
EEPROM.put(0, temperatura);
}
return;
}
Code:
void comp_temp(float temp_in, float temp_out) {
if (temp_out >= (temp_in + 0.5)) //compara temperaturas com margem de 0.5 a mais.
{
digitalWrite(liga_bta, HIGH); //liga motor
digitalWrite(led_bta, HIGH);
}
if (temp_out <= temp_in) {
digitalWrite(liga_bta, LOW);//desliga motor
digitalWrite(led_bta, LOW);
}
return;
}
Agora, por último, vamos para o código do loop. Esse código é o "corpo" do programa, vai ficar rodando e vai ser o responsável por chamar as outras funções. Para chamar a função de set temperatura eu fiz uma lógica que precisa que o botão "OK" fique apertado por +/- 5 segundos. Para isso, de novo, usamos uma máquina de estados. Note que isso tem que ir no começo do loop, para ser sempre a "prioridade" do código:
Code:
void loop() {
// put your main code here, to run repeatedly:
sensors.requestTemperatures(); //comando p/ pegar temperatura do sensor
buttonState = digitalRead(ok);
if (buttonState == HIGH)
{
state = 1;
contador = 0;
}
else
{
state = 0;
}
if (state == 1) {
do {
buttonState = digitalRead (ok);
if ( buttonState == LOW)
{
state = 0;
}
delay(50); //delay necessário para contar o tempo certo
contador ++;
if (contador == 90)
{
set_temp();
state = 0;
contador = 0;
}
} while (state == 1);
}
Code:
EEPROM.get(0, temp);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(5, 1);
lcd.write(223);
lcd.print("C");
lcd.setCursor(0, 1);
temp_sens1 = sensors.getTempC(sensor1);
lcd.print(temp_sens1);
delay(500);
comp_temp(temp, temp_sens1);
delay(3000);
}
Provavelmente ficará algo assim:
Notem que o LED conectado na porta 5 do arduino será removido posteriormente e substituido pela próxima parte que falaremos a seguir.
Com essa parte feita, vamos para a outra e mais importante parte: O circuito AC 220.
O Arduino, obviamente, por si só não tem condições de acionar um freezer, ele fornece apenas 5V de saída e no máximo 30 ou 40mA por saída.. Porém, ele consegue acionar um circuito que acione o freezer. Só que como as tensões e correntes de um circuito desses são muito elevadas, isso torraria nosso pobre arduino.
Então é preciso isola-lo daquele circuito, porém ainda comunicar um com o outro. Para isso nós vamos usar o MOC 3043 (ou equivalente, com Zero Cross), que é um opto acoplador. Basicamente, é um CI que tem um LED infra vermelho que aciona um TRIAC interno que faz o outro circuito andar. Esse MOC é especifico por possuir o Zero Cross. Zero Cross é uma detecção de borda. Isso impede que o circuito acione "de soco", torna as coisas um pouco mais suaves e seguras, ameniza o impacto no motor do freezer.
O MOC tem suas características próprias, por exemplo, ele tem que ser acionado com no máximo 1.5V e 5mA. ATENÇÃO: Isso varia de modelo a modelo, pesquisem sobre seus componentes antes de fazer qualquer coisa.
Para fazer o Arduino reduzir sua tensão de saída e corrente, ligaremos 2 resistores de 330 em série (totalizando 660 ohms de resistência), no meu caso ainda liguei um Diodo na porta do arduino, apenas por precaução extra.
Esse conjunto (saida arduino - diodo - resistor) será ligado ao pino 1 do MOC, enquanto que o pino 2 será ligado ao GND (terra). Essa é a parte referente ao Arduino. Agora faremos a parte do TRIAC.
O TRIAC é um Triodo, especifico para AC (por isso o nome). O funcionamento dele é parecido com o de um Transistor: uma base (chamada de gate), um emissor (chamado de A1) e um coletor (A2). E, como um Transistor, a gente tem que alimentar ele externamente, nesse caso, com 220V. A fim de isso ficar mais claro, aqui está o simbolo dele:
O Pino A1 será onde será colocada a carga (freezer). Para isso, eu recomendo usar algo chamado borne que são pequenos conectorzinhos de plástico, reguláveis com uma chave, simples e eficaz. A carga é ligada em série com o TRIAC. Em paralelo à carga a gente liga o resistor de 470 e o capacitor de 47nF, isso ajuda a filtrar eventuais picos e da mais segurança ao motor e também ao circuito. Ou seja, no pino A1 ligamos um dos terminais do borne que vai para a carga e um dos terminais daquele conjunto resistor-capacitor. O outro terminal disso vai para a rede.
Já no pino A2 do TRIAC ligaremos o pino 6 do nosso MOC em série com um resistor de 330 e fecharemos o circuito da rede, apenas isso.
No pino G (gate), ligaremos o pino 4 do MOC em série com um resistor de 330 também.
Aqui está o esquema elétrico desenhado, para ficar um pouco mais claro:
Algumas dicas:
- Uma coisa interessante é usar uma régua (de tomadas), para ligar ao borne e ligar o freezer nessa régua, dessa forma não tem que destruir a flecha do seu freezer.
- Não se preocupe com espaçamento do circuito, é de extrema importância soldar os componentes bem e evitar curto circuitos, por motivos óbvios. Utilize bem de seus recursos, como o multímetro para detectar curtos e etc.
-Lembre-se de ter paciência, o circuito é de alta tensão. Tem que ficar sempre o mais bem feito possível.
- Antes de ligar qualquer coisa, tome todas precauções devidas, como se isolar, verificar se esta tudo OK sem curto.. essas coisas. Ultima coisa que queremos é tomar um choque desses, não é?
- De novo, procure entender o circuito e seu funcionamento, tornará as coisas mais fáceis.
Aqui um link de um pequeno vídeo demonstrando o meu circuito final, ligado ao freezer em funcionamento. Como pretendo evoluir este circuito mais adiante ele ainda está meio bagunçado (Pelo menos a parte do Arduino), pretendo melhorar isso com o tempo (próximo passo é permitir trabalhar com isso via Wireless por exemplo):
https://youtu.be/YqcXJrGKAa8
Por enquanto, acho que é isso gurizada. É um projetinho meio básico, mas a vantagem deste tipo de sensor é que ele é a prova d'água e um projeto assim nos da liberdade de fazer o que bem entendermos, imaginação é o limite. No total, sem contar o arduino, eu acredito que gastei em torno de 70 reais, mas comprei algumas coisas pela internet, então o custo aumenta um pouco.
Fico à disposição de vocês para dúvidas, sugestões e afins. Se preferirem, este é o meu Facebook, podem me contatar por lá: https://www.facebook.com/aleeebrito
Espero que tenham gostado.
Cheers!