Jump to content
Sign in to follow this  
Perks

Thermopar

Recommended Posts

Finalmente após umas semanas lá tive uma horita livre para começar algo que andava na cabeça

queria fazer um medidor de temperatura, mas algo mais fiável e para temperaturas mais altas, tipo monitorizar um PC sempre ligado, um conjunto de placas a minar (como os nossos amigos ali do tópico do lado  })) ou até o grelhador para o churrasco :-.., ok no meu caso não vai ser para nenhuma destas coisas, mas ok

 

esta solução é standalone não necessitando de qualquer hub, é uma app para o telefone e está feito, com gráfico de históricos e notificação de temperatura quando esta ultrapassa o valor definido

o material utilizado:

nodemcu 2,64USD

termopar max6675  2,72USD com uma sonda tipo K, dependendo da temperatura que quiserem monitorizar podem comprar a sonda à parte (esta chega aos 800ºC ), mas a menos que queiram fornos industriais ou parecido não vejo porque precisem de mais, Este módulo tem uma tolerância de cerca de 0,25ºC pelo que deve ser mais que suficiente para não queimar a posta à mirandesa 

este projecto usa o blynk.cc pelo que não necessita de mais nada para funcionar, são as placas e um telemóvel onde receber notificações e está feito

anyway, já montado

9hMiLK5.jpg

 

 

Se houver interessados avisem que montamos isto, não se esqueçam que a placa de oferta ainda está disponível 

  • Like 3

Share this post


Link to post
Share on other sites

entretanto adicionei um slider onde é possível configurar a temperatura a partir da qual queremos receber a notificação, deixei-o também ligado desde e portou-se como um campeão

 

sZrtHYU.png

 

e o código, a library usada do sensor 

https://github.com/mcleng/MAX6675-Library

 

o exemplo base foi este

https://github.com/mcleng/MAX6675-Library/blob/master/examples/read_temp/read_temp.pde

 

o código completo

 

Share this post


Link to post
Share on other sites

A patroa não ficou fã, ironicamente do led de aviso, alterei isto tudo

Meti a fazer check de notificação de 10 em 10 segundos, não precisa de mais

Meti hipótese de enviar por mail o alerta também

Meti os led a acender quando passa o valor definido de notificação no slider. Quando a temperatura for inferior ao valor do slider apaga os Leds totalmente

 


 

E o código

 

/*
  Single_Temp.pde - Example using the MAX6675 Library.
  Created by Ryan McLaughlin <ryanjmclaughlin@gmail.com>

  This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
  http://creativecommons.org/licenses/by-sa/3.0/
  https://github.com/mcleng/MAX6675-Library
  */
//#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "token do Blynk";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Rede wireless";
char pass[] = "pass rede";

#include <MAX6675.h>
#include <SPI.h>
// esquerda para a direita GND - VCC - NCK - CS - SO
int MaxSO = D6;    // SO pin do MAX6675
int MaxCS = D5;    // CS pin do MAX6675
int MaxSCK = D7;   // SCK pin do MAX6675 
int Maxunits = 1;  // Unidade de temp (0 = raw, 1 = ˚C, 2 = ˚F)
float t = 0.00;    // variavel de output da Temperatura
bool TempNotified = false; //variável que armazena se existiu notificações
int SliderValue; //variável que amazena temperatura a partir da qual há notificação
BlynkTimer timer;

// Initialize the MAX6675 Library for our chip
// MAX6675 Library already sets pin modes for MAX6675 chip!
MAX6675 temp(MaxCS,MaxSO,MaxSCK,Maxunits); 

BLYNK_CONNECTED() {
  // Request Blynk server to re-send latest values for all pins
  //Blynk.syncAll();

  // You can also update individual virtual pins like this:
  Blynk.syncVirtual(V22, V23);

  // Let's write your hardware uptime to Virtual Pin 2
  int value = millis() / 1000;
  Blynk.virtualWrite(V23, value);
}

BLYNK_WRITE(V22)
{
  // Use of syncAll() will cause this function to be called
  // Parameter holds last slider value
  SliderValue = param.asInt();
  TempNotified = false;
  digitalWrite(LED_BUILTIN, HIGH);
  digitalWrite(2, HIGH);
  //Serial.println(SliderValue);
  //Serial.println(TempNotified);
}

BLYNK_WRITE(V23)
{ 
  // You'll get uptime value here as result of syncAll()
  int uptime = param.asInt();
}

void temperatura(){
  t = temp.read_temp();  // ler a temperatura do MAX6675
  Blynk.virtualWrite(V21, t);
  //t = t + 0.1;
   if((t > SliderValue) && (TempNotified == false)){    
    Blynk.notify( String("Alerta - Temperatura maior que ") + SliderValue + String("°C - Temperatura actual ") + t + String("°C"));
    //Blynk.email("Subject: Alerta de temperatura", "a temperatura está acima de...");
    digitalWrite(LED_BUILTIN, LOW);
    digitalWrite(2, LOW);
    TempNotified = true;
  }
  if((t <= SliderValue) && (TempNotified == true)){
    TempNotified = false;
 
  }
}

void setup() {
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
  t = 0;
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(2, OUTPUT);
  timer.setInterval(10000L, temperatura);
  digitalWrite(LED_BUILTIN, HIGH);
  digitalWrite(2, HIGH);
}

void loop(){
  Blynk.run();
  timer.run();
}

 

  • Like 2

Share this post


Link to post
Share on other sites

@Perks arranja-me a tua pasta das libraries, estou farto de bater em paredes. Nunca tinha programado arduinos ou semelhantes portanto não tinha nenhuma library.

Depois até que percebesse que o gajo é case sensitive e que #include <MAX6675.h> é diferente de #include <max6675.h>... Agora está a queixar-se que as variáveis não estão declaradas, e só passei este ponto porque tive que martelar o meu max6675.cpp senão tinha um erro parvo, No such file or directory #include <util/delay.h>.

Resumindo, talvez fosse mais fácil forneceres a pasta das libraries que usaste para compilar este código.

Share this post


Link to post
Share on other sites

Já tinha visto, foi a primeira que testei. Com essa tenho o erro:

Arduino: 1.8.4 (Windows 10), Board: "Generic ESP8266 Module, 80 MHz, 40MHz, DIO, 115200, 512K (64K SPIFFS), ck, Disabled, None"

sketch_sep01a:25: error: 'D6' was not declared in this scope

 int MaxSO = D6;    // SO pin do MAX6675

             ^

sketch_sep01a:26: error: 'D5' was not declared in this scope

 int MaxCS = D5;    // CS pin do MAX6675

             ^

sketch_sep01a:27: error: 'D7' was not declared in this scope

 int MaxSCK = D7;   // SCK pin do MAX6675 

              ^

C:\Users\Username\Documents\Arduino\sketch_sep01a\sketch_sep01a.ino: In function 'void setup()':

sketch_sep01a:92: error: redefinition of 'void setup()'

 void setup() {

      ^

sketch_sep01a:39: error: 'void setup()' previously defined here

 void setup() {

      ^

exit status 1
'D6' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

 

Edited by Ilusi0n

Share this post


Link to post
Share on other sites

Estás com a board errada seleccionada no arduino ide

Estás com um esp01 que não têm esses pins

Tens de selecionar o nodemcu 1.0 

Já agora o qr para na app do blynk instalar isto como tenho

Depois podes alterar à tua vontade

 
2T1DTwI.png

 

  • Like 1

Share this post


Link to post
Share on other sites

Ok, com essa alteração de board funcionou. Pensei que fosse genérica, nem reparei que havia mesmo este modelo.

Agora, o teu código tem erros e não compilava. Estás a declarar void setup() 2 vezes. Só quando removi o primeiro é que o gajo compilou.

Share this post


Link to post
Share on other sites

Oh @Perks tu és cheio de armadilhas :-.. Na tua foto o cabo laranja está ligado ao D4 que não faz nada e estava-me a seguir pela foto. Quando o mudei para o D7, lá começou tudo a funcionar!

Deu algum trabalho, mas foi um noite bem perdida.

Share this post


Link to post
Share on other sites

Os comentários estão lá para ajudar :P

esquerda para a direita GND - VCC - NCK - CS - SO
int MaxSO = D6;    // SO pin do MAX6675
int MaxCS = D5;    // CS pin do MAX6675
int MaxSCK = D7;   // SCK pin do MAX6675 
int Maxunits = 1;  // Unidade de temp (0 = raw, 1 = ˚C, 2 = ˚F)

Mas inicialmente estava no D4 mas o led também está  para o d4 na minha placa, tive de mudar

 

Btw mandei vir isto para tentar juntar ;)

http://s.aliexpress.com/eUjQJFnQ 

Ainda não chegou, mas estou a aguardar

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.