Ir ao conteúdo
  • Cadastre-se

wixxos

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

0
  1. @aphawk Eu já havia conseguido conversar com o MAX6675 e ler as temperaturas de maneira eficiente, porém sem a utilização do Mux. O meu maior problema é quando vou inserir o mux nessa equação, não consigo fazer as duas coisas (sensor MAX e multiplexer) funcionarem ao mesmo tempo com o Arduino, e não sei se isso é questão de código ou de conexão. @.if Entendo que se usasse o Mux com sinais analógicos diretamente do termopar isso seria mais eficiente para o Mux, porém, eu ainda precisaria fazer a conversão de cada tensão oferecida por cada termopar no meu projeto para temperatura, ainda consertando o que cada termopar deveria ler como 0V. Para pular essa parte do trabalho, usar 1 sensor MAX6675 completo (que na compra já vem termopar + chip) facilita isso tudo, pois o chip incluído já faz essa conversão e já corrige o 0V. Sei que não é um sensor tão barato, mas a ideia era implementar um mesmo circuito e projeto já existentes num laboratório parceiro do nosso, porém a pessoa que fez esse projeto nesse outro lab não organizou absolutamente nada e ainda fez uma placa de circuito que queimou um dos sensores. Agora estou eu corrigindo estes problemas e tentando debugar o código para entender tudo que está acontecendo. Sou leigo nessas coisas, é o meu segundo projeto com arduino (o primeiro foi usar servo-motores para mover espelhos no nosso experimento), então ainda tem muita coisa que não entendo Em tempo, fiz a compra destes sensores neste site: https://www.curtocircuito.com.br/sensor-de-temperatura-termopar-tipo-k.html, o preço total está 9 dólares, com a promoção sai por 7.42$, o que ajuda no fator custo hahahah. ps: o código que consigo fazer a leitura de temperatura é esse, caso ajude em algo: #include <max6675.h> #include <ESP8266WiFi.h> /* Definições: GPIOs do Arduino utilizado na comunicação com o MAX6675 */ #define GPIO_SO 5 //D1; #define GPIO_CS 4 //D2; #define GPIO_CLK 13 //D7; /* Definição: baudrate da comunicação com Serial Monitor */ #define BAUDRATE_SERIAL_MONITOR 115200 /* Definição: tempo entre leituras do MAX6675 */ #define TEMPO_ENTRE_LEITURAS 1000 //ms /* Criação de objeto para comunicação com termopar */ MAX6675 termopar(GPIO_CLK, GPIO_CS, GPIO_SO); void setup() { Serial.begin(BAUDRATE_SERIAL_MONITOR); } /* Programa principal */ void loop() { Serial.print("Temperatura: "); Serial.print(termopar.readCelsius()); Serial.println("C"); delay(TEMPO_ENTRE_LEITURAS); }
  2. Talvez eu tenha complicado as coisas ao tentar explicar o projeto por completo. Hoje fiz novos testes, e enviando somente um sinal analógico (1V fornecido por uma fonte que temos no lab), consegui ler esse 1V através do multiplexer em todos os pinos que queria. Para isso, usei esse código: /*Teste para tentar ler 1V de sinal no Arduino através do Multiplexer*/ /*Bibliotecas*/ #include <ESP8266WiFi.h> /*existe biblioteca para multiplexer?*/ #define TEMPO_ENTRE_LEITURAS 1000 //ms float pVoltage[3]; void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(12, OUTPUT); //D6 pinMode(14, OUTPUT); //D5 pinMode(0, OUTPUT); //D3 pinMode(2, OUTPUT); //D4 } void loop() { // put your main code here, to run repeatedly: mux (0,1,1,1); //(0,0,0,0) Set the multiplexer to door 0 delay(2000); pVoltage[0] = analogRead(A0)*5.0/1024.0; // analog sensor is 5v-0v Serial.print("Sinal 1: "); Serial.print(pVoltage[0]); Serial.println("V"); mux (0,1,1,0); delay(2000); pVoltage[1] = analogRead(A0)*5.0/1024.0; // analog sensor is 5v-0v Serial.print("Sinal 2: "); Serial.print(pVoltage[1]); Serial.println("V"); mux (0,1,0,1); delay(2000); pVoltage[2] = analogRead(A0)*5.0/1024.0; // analog sensor is 5v-0v Serial.print("Sinal 3: "); Serial.print(pVoltage[2]); Serial.println("V"); delay(TEMPO_ENTRE_LEITURAS); } void mux (int state1,int state2,int state3,int state4){ digitalWrite(12, state1); //D6 digitalWrite(14, state2); //D5 digitalWrite(2, state3); //D4 digitalWrite(0, state4); //D3 } Após conseguir isso, o que tentei foi passar para o próximo nível: ler a temperatura pelo sensor MAX6675. Tentei utilizar esse código: /*Teste para tentar ler temperatura no Arduino através do Multiplexer*/ /*Bibliotecas*/ #include <ESP8266WiFi.h> #include <max6675.h> /*existe biblioteca para multiplexer?*/ #define TEMPO_ENTRE_LEITURAS 1000 //ms #define pin_SO 5 //D1 #define pin_CLK 4 //D2 float pin_Temp[3]; MAX6675 termopar(pin_CLK, pin_Temp[3], pin_SO); void setup() { // put your setup code here, to run once: Serial.begin(115200); pinMode(12, OUTPUT); //D6 pinMode(14, OUTPUT); //D5 pinMode(0, OUTPUT); //D3 pinMode(2, OUTPUT); //D4 pinMode(13, INPUT); //D7 } void loop() { // put your main code here, to run repeatedly: mux (0,1,1,1); //(0,0,0,0) Set the multiplexer to door 0 delay(2000); //pin_Temp[0] = termopar.readCelsius(); Serial.print("Temperatura 1: "); Serial.print(termopar.readCelsius()); Serial.println("C"); mux (0,1,1,0); //(0,0,0,0) Set the multiplexer to door 0 delay(2000); pin_Temp[1] = termopar.readCelsius(); Serial.print("Temperatura 2: "); Serial.print(pin_Temp[1]); Serial.println("C"); mux (0,1,0,1); //(0,0,0,0) Set the multiplexer to door 0 delay(2000); //pin_Temp[2] = termopar.readCelsius(); Serial.print("Temperatura 3: "); Serial.print(termopar.readCelsius()); Serial.println("C"); delay(TEMPO_ENTRE_LEITURAS); } void mux (int state1,int state2,int state3,int state4){ digitalWrite(12, state1); //D6 digitalWrite(14, state2); //D5 digitalWrite(2, state3); //D4 digitalWrite(0, state4); //D3 digitalRead(13); } Mas tudo que consigo no Serial Monitor do Arduino são leituras de Temperatura 1 = Temperatura 2 = Temperatura 3 = 0.00 ºC. Como se não houvesse qualquer tipo de leitura. Não consigo descobrir onde está o erro. As conexões foram feitas igual está representado no desenho que fiz no paint (existem resistores 10k no caminho do fio amarelo que esqueci de representar).
  3. Olá pessoal, procurei em vários lugares na internet mas sem sucesso uma solução para meu problema. Projeto: medir temperatura de diferentes pontos da sala, utilizando sensores MAX6675, e ler tais temperaturas com um Arduino ESP8266 (devido sua conexão WiFi), o objetivo é usar um multiplexer HEF4067BP para aumentar o número possível de sensores MAX6675. TL;DR: Qual linha de comando coloco no código para que o Arduino leia diferentes sensores de temperatura (em ºC) através do multiplexer? Não está dos melhores, mas na figura 1 eu tentei fazer uma representação física do circuito que acabei criando. Como não tinha o meu multiplexer nem o sensor, acabei substituindo por uma porta lógica e botões respectivamente por pura representação. A ideia básica desse sensor é que, fora a alimentação (não representada mas +V dele no +5V do arduino e o GND todos conectados), temos 3 principais sinais: i) signal output (SO) ii) clock (CLK) iii) CS (que eu não sei o significado mas entendo que é o sinal de saída do sensor, ou seja, o que informa a temperatura - é um sinal digital - ) Os sinais SO e CLK de todos os MAX6675 podem ser ligados no mesmo pino do arduino, pelo menos é o que entendi de todos os tutoriais que vi até agora pela internet, onde somente o CS deve ser ligado separadamente para leitura da temperatura. Se utilizasse somente o Arduino, teria possibilidade para 10 sensores, porém com o multiplexer posso aumentar esse número para 16 (no projeto, quanto mais sensores, melhor). Já no multiplexer, entendo que temos 4 tipos de pinos importantes: i) sinal de micro-controlador: Z ii) sinais de saída: A0, A1, A2 e A3 iii) pino enable iv) sinais de entrada O pino tipo iii) garante que o sistema esteja disponível para uso, onde para que isso aconteça ele deve receber um sinal LOW, por isso, ligo ele ao GND do circuito. Já os pinos do tipo i) e ii) funcionam em conjunto. Enquanto o Arduino envia para o multiplexer qual porta lógica ele quer ler através do pino Z, o multiplexer responde através dos pinos A0, A1, A2 e A3 (ele utiliza linguagem binária para selecionar quais portas irá acessar: 0000 = porta 1, 0001 = porta 2... etc até porta 16). Por fim, o pino tipo iv) são justamente estas portas lógicas, onde em cada uma teremos a resposta de um sensor MAX diferente. Pois bem, nos testes, consigo conectar os sensores ao Arduino, e também consigo fazer essa conexão via WiFi para nosso canal no thingspeak. Porém, quando tentei adicionar o multiplexer, não encontro uma solução para conseguir ler isso. O código que possuo e que funciona sem o multiplexer é o seguinte: /*Inclui as bibliotecas necessárias para os componentes que uso*/ #include <max6675.h> #include <ESP8266WiFi.h> #include <ThingSpeak.h> /*Definições: GPIOs do Arduino utilizado na comunicação com o MAX6675, não seguem o exemplo da figura 1 pois é um sistema mais simples (sem o multiplexer)*/ #define GPIO_SO 5 //D1; #define GPIO_CS 4 //D2; #define GPIO_CLK 0 //D3; /*Comunicação WiFi e ThingSpeak (somente login e passwords para WiFi e ThingSpeak)*/ char ssid[] = "*******"; char pass[] = "*******"; WiFiClient client; unsigned long myChannelNumber = *******; const char *myWriteAPIKey = "********"; /*Definição: baudrate da comunicação com Serial Monitor*/ #define BAUDRATE_SERIAL_MONITOR 115200 /*Definição: tempo entre leituras do MAX6675*/ #define TEMPO_ENTRE_LEITURAS 40000 //ms /*Criação de objeto para comunicação com termopar*/ MAX6675 termopar(GPIO_CLK, GPIO_CS, GPIO_SO); void setup() { Serial.begin(BAUDRATE_SERIAL_MONITOR); WiFi.mode(WIFI_STA); ThingSpeak.begin(client); } /*Programa principal*/ void loop() { if(WiFi.status() != WL_CONNECTED){ while(WiFi.status() != WL_CONNECTED){ WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network //Serial.print("."); delay(5000); } //Serial.println("\nConnected."); } Serial.print("Temperatura: "); Serial.print(termopar.readCelsius()); Serial.println("C"); ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey); ThingSpeak.setField(5,termopar.readCelsius()); delay(TEMPO_ENTRE_LEITURAS); } Mas, quando tento adicionar o multiplexer, a leitura simplesmente não acontece. Tentei seguir esse tutorial: mas sem muito sucesso pois ele realmente usa botões, e não sensores de temperatura, o que apesar de também serem sinais digitais não consigo fazer o .readCelsius necessário, por ex. Alguém tem ideia sobre como proceder? Qual linha de código eu devo usar para conseguir fazer essa comunicação? Se é que ela é possível, digo, pois imagino que talvez meu erro esteja na compreensão do multiplexer. De qualquer forma, tomara que tenha conseguido explicar bem o meu problema. Se estiver postando isso na área errada, por favor algum ADM mova para área certa (primeiro post no fórum, pra mim parecia o mais intuitivo postar aqui). Valeu a ajuda desde já!

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!