Resultados da busca - %E6%81%92%E8%BE%BE%E7%99%BB%E5%BD%95%E7%94%A8%E6%88%B7%E5%90%8D%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%E3%80%90%E2%94%83%E5%A5%BD%E8%AE%A1%E5%88%922%E2%92%8F7%E2%92%8F01705%7B%EF%BC%B1%E3%80%91%E3%80%91
ea industrial que não foi muito longe pois existe muitos obstáculos para a rede mas também fiz e em uma area residencial consegui da a volta no meu quarteirão tranquilo sem perda de dados o ponto mais longe foi de 200 metros de um Esp32LoRa da Heltec do outro
Mas isto eu fiz configurando um como Receptor e outro como Transmissor, mas eu queria utiliza-los como os 2 sendo Receptor e Transmissor para fazer uma comunicação de mão dupla os 2 mandam informações e os 2 recebe informações
Tentei simplesmente misturar os 2 programas o do Receptor com Transmissor mas parece que não estou conseguindo configura-lo... Fiquei ate na duvida se e possível mesmo fazer com mão dupla ?
Alguém teria alguma ideia de como fazer ?
PROGRAMA DO RECEPTOR
/* This is a simple example show the Heltec.LoRa recived data in OLED.
The onboard OLED display is SSD1306 driver and I2C interface. In order to make the OLED correctly operation, you should output a high-low-high(1-0-1) signal by soft- ware to OLED's reset pin, the low-level signal at least 5ms.
OLED pins to ESP32 GPIOs via this connecthin: OLED_SDA -- GPIO4 OLED_SCL -- GPIO15 OLED_RST -- GPIO16
by Aaron.Lee from HelTec AutoMation, ChengDu, China 成都惠利特自动化科技有限公司 www.heltec.cn
This project is also available on GitHub: https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series */ #include "heltec.h"
#define BAND 915E6 //you can set band here directly,e.g. 868E6,915E6,433E6 String rssi = "RSSI --"; String packSize = "--"; String packet ;
void LoRaData() { Heltec.display->clear(); Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT); Heltec.display->setFont(ArialMT_Plain_10); Heltec.display->drawString(0 , 15 , "Recebido " + packSize + " bytes"); Heltec.display->drawStringMaxWidth(0 , 26 , 128, packet); Heltec.display->drawString(0, 0, rssi); Heltec.display->display(); }
void cbk(int packetSize) { packet = ""; packSize = String(packetSize, DEC); for (int i = 0; i < packetSize; i++) { packet += (char) LoRa.read(); } rssi = "RSSI " + String(LoRa.packetRssi(), DEC) ; LoRaData();
}
void setup() {
Serial.begin(115200); //WIFI Kit series V1 not support Vext control Heltec.begin(true /*DisplayEnable Enable*/, true /*Heltec.Heltec.Heltec.LoRa Disable*/, true /*Serial Enable*/, true /*PABOOST Enable*/, BAND /*long BAND*/);
Heltec.display->init(); Heltec.display->flipScreenVertically(); Heltec.display->setFont(ArialMT_Plain_10); delay(1500); Heltec.display->clear();
Heltec.display->drawString(0, 0, "CNCTEX.Lora Iniciado!"); Heltec.display->drawString(0, 10, "Espere o dado recebido ..."); Heltec.display->display(); delay(1000); //LoRa.onReceive(cbk); LoRa.receive(); }
void loop() { int packetSize = LoRa.parsePacket(); if (packetSize) { cbk(packetSize); } }
PROGRAMA DO TRANSMISSOR
/* This is a simple example show the Heltec.LoRa sended data in OLED.
The onboard OLED display is SSD1306 driver and I2C interface. In order to make the OLED correctly operation, you should output a high-low-high(1-0-1) signal by soft- ware to OLED's reset pin, the low-level signal at least 5ms.
OLED pins to ESP32 GPIOs via this connecthin: OLED_SDA -- GPIO4 OLED_SCL -- GPIO15 OLED_RST -- GPIO16
by Aaron.Lee from HelTec AutoMation, ChengDu, China 成都惠利特自动化科技有限公司 https://heltec.org
this project also realess in GitHub: https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series */
#include "heltec.h"
#define BAND 915E6 //you can set band here directly,e.g. 868E6,915E6,433E6
unsigned int counter = 0; String rssi = "RSSI --"; String packSize = "--"; String packet ;
void setup() { //WIFI Kit series V1 not support Vext control Heltec.begin(true /*DisplayEnable Enable*/, true /*Heltec.Heltec.Heltec.LoRa Disable*/, true /*Serial Enable*/, true /*PABOOST Enable*/, BAND /*long BAND*/);
Heltec.display->init(); Heltec.display->flipScreenVertically(); Heltec.display->setFont(ArialMT_Plain_10); delay(1500); Heltec.display->clear();
Heltec.display->drawString(0, 0, "CNCTEX.Lora Iniciado!"); Heltec.display->display(); delay(1000); } void loop() { Heltec.display->clear(); Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT); Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->drawString(0, 0, "Sending packet: "); Heltec.display->drawString(90, 0, String(counter)); Heltec.display->display();
// send packet LoRa.beginPacket(); /* LoRa.setTxPower(txPower,RFOUT_pin); txPower -- 0 ~ 20 RFOUT_pin could be RF_PACONFIG_PASELECT_PABOOST or RF_PACONFIG_PASELECT_RFO - RF_PACONFIG_PASELECT_PABOOST -- LoRa single output via PABOOST, maximum output 20dBm - RF_PACONFIG_PASELECT_RFO -- LoRa single output via RFO_HF / RFO_LF, maximum output 14dBm */ LoRa.setTxPower(14, RF_PACONFIG_PASELECT_PABOOST); LoRa.print("Hello "); LoRa.print(counter); LoRa.endPacket();
counter++; digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level) delay(10); // wait for a second digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW delay(10); // wait for a second }// =========================================================== //
RESOLVIDO
Eu mudei o código para facilitar, ao invés de mandar informações escrita no display fiz ele apenas com 2 botoes e 2 leds um acedendo um lede do outro
Um liga o led do outro com um interruptor que eu fiz pelo software usando um micro swith
lembrando os botoes tem que esta cons resistores pro pull down
PROGRAMA DO TRANSMISSOR RECEPTOR (so passar esse programa no 2 microcontrolador)
/*This is a simple example show the Heltec.LoRa sended data in OLED.
The onboard OLED display is SSD1306 driver and I2C interface. In order to make theOLED correctly operation, you should output a high-low-high(1-0-1) signal by soft-ware to OLED's reset pin, the low-level signal at least 5ms.
OLED pins to ESP32 GPIOs via this connecthin:OLED_SDA -- GPIO4OLED_SCL -- GPIO15OLED_RST -- GPIO16
by Aaron.Lee from HelTec AutoMation, ChengDu, China成都惠利特自动化科技有限公司https://heltec.org
this project also realess in GitHub:https://github.com/Heltec-Aaron-Lee/WiFi_Kit_series*/
#include "heltec.h"
#define BAND 915E6 //you can set band here directly,e.g. 868E6,915E6,433E6
#define botao 36#define led 12
boolean status_Botao = LOW;boolean statusAnt_Botao = LOW;boolean sinal = 0;String packSize = "--";String packet ;
void cbk(int packetSize) { // recebe e converte dos dados recebidos em texto para facilitar o manuzeiopacket = "";packSize = String(packetSize, DEC);for (int i = 0; i < packetSize; i++) {packet += (char) LoRa.read();}}
void setup() {
pinMode (botao, INPUT);pinMode (led , OUTPUT);
//WIFI Kit series V1 not support Vext controlHeltec.begin(true /*DisplayEnable Enable*/, true /*Heltec.Heltec.Heltec.LoRa Disable*/, true /*Serial Enable*/, true /*PABOOST Enable*/, BAND /*long BAND*/);LoRa.receive();}void loop() {
status_Botao = digitalRead (botao);delay(5);if (status_Botao == HIGH) statusAnt_Botao = HIGH;if (status_Botao == LOW && statusAnt_Botao == HIGH) {sinal = !sinal;statusAnt_Botao = LOW;LoRa.beginPacket(); // liga o envioLoRa.setTxPower(14, RF_PACONFIG_PASELECT_PABOOST);LoRa.print(sinal);LoRa.endPacket(); // deliga o envio}
// LoRa.onReceive(cbk);
int packetSize = LoRa.parsePacket();if (packetSize) {cbk(packetSize);}
if (packet == "1") {digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)//delay(10); // wait for a second}
if (packet == "0") {digitalWrite(led, LOW); // turn the LED off by making the voltage LOW//delay(10);}}…
Adicionado por Vitor S Costa ao 10:11 em 30 julho 2020
/Pinos digitais onde o lcd esté conetado 12, 11, 5, 4, 3, 2
//-----------------Definir mudança do LCD-------------------------------------------------------------------------------------- #define SWITCH 10 //Ligação do Switch no pino digital 10 #define NUM_MENUS 2 //exemplo, 2 menus... unsigned char var_menus = 0; unsigned char encrava = 0; unsigned long refresh = 0;
//------------------Defenir variáveis para sensor de 45A------------------------------------------------------------------------ unsigned long antes45 = 0; int valor45 = 0; long corrente45 = 0; float minimo45 =0; //Valor minimo do map() float maximo45 =0; //Valor máximo do map()
//------------------Defenir vaiáveis para sensor de 100A------------------------------------------------------------------------- unsigned long antes100 = 0; int valor100 = 0; float corrente100 = 0; float minimo100 =0; //Valor minimo do map() float maximo100 =0; //Valor máximo do map()
//------------------Defenir variáveis para sensor de 235A------------------------------------------------------------------------- unsigned long antes235 = 0; int valor235 = 0; float corrente235 = 0; float minimo235 =0; //Valor minimo do map() float maximo235 =0; //Valor máximo do map()
//-------------------Definir variáveis de tensão(V)-------------------------------------------------------------------------------- int TAC = 230; //Tensão de AC int TRC = 12 ; //Tensão do regulador de Carga int TBAT = 12; //Tensão das baterias
//------------------Definir Variáveis de Potência(W)------------------------------------------------------------------------------- int PAC ; //Potência em AC int PRC ; //Potência no regulador de carga int PBAT; //Potência nas baterias/*//---------------Declarando os Sensores de temperatura----------------------------------------------------------------------------- int SENSOR1 = A0; // Sensor 1 está no pino Analógico 0 int SENSOR2 = A1; // Sensor 2 está no pino Analógico 1 int SENSOR3 = A2; // Sensor 3 está no pino Analógico 3 float A = 0; // Sensor 1 float B = 0; // Sensor 1 float C = 0; // Sensor 2 float D = 0; // Sensor 2 float E = 0; // Sensor 3 float F = 0; // Sensor 3 *///----------------------------------------------------------------------------------------------------------------------------------
void setup(){ lcd.begin(20, 4); // LCD 20x4 Serial.begin(9600); // Saída para o Serial Monitor pinMode(SWITCH, INPUT); //Switch funciona como entrada }
/* //----------------------Sensor de Temperatura 1 ----------------------------------------------------------------------------------- { lcd.setCursor(0, 0); // Sensor de temperatura 1 Coluna 0 linha 0 lcd.print("T1-"); // Sensor de temperatura 1 lcd.setCursor(3, 0); // Colocando o cursor na coluna 0 e linha 1 A = analogRead(SENSOR1); B = (A * 500.0)/1024.0; // Calculo da temperatura Serial.println("T1-"); // Sensor de temperatura 1 Serial.print(B); // Apresentação do resultado/temperatura no Serial Monitor Serial.println("C"); lcd.print(B); // Apresentação do resultado/temperatura no LCD lcd.print("C"); delay(2000); // Atualização dos dados a cada 1 segundo } //---------------------Sensor de Temperatura 2 ------------------------------------------------------------------------------------- { lcd.setCursor(0, 1); // Sensor de temperatura 2 Coluna 0 linha 1 lcd.print("T2-"); // Sensor de temperatura 2 lcd.setCursor(3, 1); // Colocando o cursor na coluna 7 e linha 2 C= analogRead(SENSOR2); D = (C * 500.0)/1024.0; // Calculo da temperatura Serial.println("T2-"); // Sensor de temperatura 2 Serial.print(D); // Apresentação do resultado/temperatura no Serial Monitor Serial.println("C"); lcd.print(D); // Apresentação do resultado/temperatura no LCD lcd.print("C"); delay(2000); // Atualização dos dados a cada 1 segundo } //----------------------Sensor de Temperatura 3 ------------------------------------------------------------------------------------- { lcd.setCursor(0, 2); // Sensor de temperatura 3 Coluna 0 linha 2 lcd.print("T3-"); // Sensor de temperatura 3 lcd.setCursor(3, 2); // Colocando o cursor na coluna 7 e linha 2 E= analogRead(SENSOR3); F = (E * 500.0)/1024.0; // Calculo da temperatura Serial.println("T3-"); // Sensor de temperatura 3 Serial.print(F); // Apresentação do resultado/temperatura no Serial Monitor Serial.println("C"); lcd.print(F); // Apresentação do resultado/temperatura no LCD lcd.print("C"); delay(2000); // Atualização dos dados a cada 1 segundo */
//------------------------Arreio com os valores instantaneos-------------------------------------------------------------------------- void vinstantaneo() { //-------------------------------Estrutura do LCD----------------------------------------------------------------------------------- lcd.setCursor(2,0); // Linha vertical na coluna 2 lcd.print("|"); lcd.setCursor(2,1); // Linha vertical na coluna 2 lcd.print("|"); lcd.setCursor(2,2); // Linha vertical na coluna 2 lcd.print("|"); lcd.setCursor(2,3); // Linha vertical na coluna 2 lcd.print("|"); lcd.setCursor(8,0); // Linha vertical na coluna 8 lcd.print("|"); lcd.setCursor(8,1); // Linha vertical na coluna 8 lcd.print("|"); lcd.setCursor(8,2); // Linha vertical na coluna 8 lcd.print("|"); lcd.setCursor(8,3); // Linha vertical na coluna 8 lcd.print("|"); lcd.setCursor(13,0); // Linha vertical na coluna 13 lcd.print("|"); lcd.setCursor(13,1); // Linha vertical na coluna 13 lcd.print("|"); lcd.setCursor(13,2); // Linha vertical na coluna 13 lcd.print("|"); lcd.setCursor(13,3); // Linha vertical na coluna 13 lcd.print("|");
lcd.setCursor(18,0); // Linha vertical na coluna 18 lcd.print("|"); lcd.setCursor(18,1); // Linha vertical na coluna 18 lcd.print("|"); lcd.setCursor(18,2); // Linha vertical na coluna 18 lcd.print("|"); lcd.setCursor(18,3); // Linha vertical na coluna 18 lcd.print("|");
// ----------------------------------- 1ªLinha ---------------------------------------------------------------------------------- lcd.setCursor(0, 0); // Coluna 0,1 linha 0(com traços)para criação de tabelas lcd.print("__"); lcd.setCursor(3, 0); // Coluna 4,5,6 Linha 0 (BAT) lcd.print("_BAT_"); lcd.setCursor(9,0); // Coluna 10,11 Linha 0 (AC) lcd.print("_AC_"); lcd.setCursor(14,0); // Coluna 15,16 Linha 0 (RC) lcd.print("_RC_");
//-------------------------------------1ªColuna---------------------------------------------------------------------------------- lcd.setCursor(0,1); // Coluna 0,1 Linha 0 (V) lcd.print("V="); lcd.setCursor(0,2); // Coluna 0,1 Linha 1 (I) lcd.print("I="); lcd.setCursor(0,3); // Coluna 0.1 Linha 2 (P) lcd.print("P=");
//-------------------------------------Coluna 19--------------------------------------------------------------------------------- lcd.setCursor(19,0); // Linha 0 (__) lcd.print("_"); lcd.setCursor(19,1); // Linha 1 (V) lcd.print("V"); lcd.setCursor(19,2); // Linha 2 (A) lcd.print("A"); lcd.setCursor(19,3); // Linha 3 (W) lcd.print("W");
//----------------------------------Sensor de corrente 45A(AC)-------------------------------------------------------------------- /* lcd.setCursor(9,1); // Local no Lcd onde vai ser apresentada a tensão de AC lcd.print("230"); // Valor da Tensão em AC
valor45 = analogRead(A5); // Valor do pino Analógico 3 //Sinal entre 1V e 3V //5V=1024 1V = (1.02*1024)/5 = 208.896 ~ 209 // 1.96-(0.045*4.5)=1.02 //5V=1024 3V = (2.9*1024)/5 = 593.92 ~ 594 // 1.96+(0.045*9.4)=2.9 minimo45=((1.96-(0.045*12))*1024/5); // Calculo do valor minimo maximo45=((1.96+(0.045*12))*1024/5); // Calculo do valor máximo corrente45 = map(valor45, minimo45, maximo45, -45, 45); // Calculo corrente Serial.print("AC:"); // Apresentação da sigla de AC no Serial Monitor Serial.print(corrente45); // Apresentação dos resultados da corrente de AC no serial monitor Serial.println("A"); // Grandeza fisica(A) declarada no serial monitor lcd.setCursor(9, 2); // Local no LCD onde se vi iniciar o resultado da corrente de AC lcd.print(" "); // Limpeza do LCD dos resultados anteriores lcd.setCursor(9, 2); // Local onde se vai iniciar no LCD o resultado da corrente em AC lcd.print(corrente45); // Apresentação da corrente de AC no LCD
PAC=TAC*corrente45; // Calculo da potência de AC lcd.setCursor(9,3); // Local no LCD onde se vai iniciar a (limpeza) da Potência em AC lcd.print(" "); // Limpeza do resultado anterior da potência em AC lcd.setCursor(9,3); // Local no LCD onde se vi iniciar o resultado da Potência em AC lcd.print(PAC); // Aprsentação do resultado da potência do regulador de carga no LCD delay(2000); // Tempo em milisegundos do refresh dos dados*/ //-----------------------Sensor de corrente 100A(RC)---------------------------------------------------------------------------------------- lcd.setCursor(14,1); // Local no Lcd onde vai der apresentada a tensão do regulador lcd.print(12); // Valor da Tensão no regulador de carga
valor100 = analogRead(A4); // Valor do pino Analógico 4 //Sinal entre 1V e 3V //5V=1024 1V = (0.97*1023)/5 = 198.656 ~ 199 // 1.95-(0.1*9.4)=0.97 //5V=1024 3V = (2.85*1023)/5 = 583.68 ~ 584 // 1.95+(0.1*9.4)=2.85 minimo100=((1.9175-(0.1*9.7515))*1024/5); // Calculo do valor minimo maximo100=((1.9175+(0.1*9.7515))*1024/5); // Calculo do valor máximo corrente100 = map(valor100, minimo100, maximo100, -10000, 10000);// Calculo da corrente corrente100 = corrente100/10000; /* if 1.9765 <= 0*/ Serial.print("RC:"); // Apresentação da sigla do regulador de carga no Serial Monitor Serial.print(corrente100); // Apresentação dos resultados da corrente no serial monitor Serial.println("A"); // Grandeza fisica(A) declarada no serial monitor lcd.setCursor(14,2); // Local no LCD onde se vi iniciar o resultado da corrente do regulador de carga lcd.print(" "); // Limpeza do LCD dos resultados anteriores lcd.setCursor(14, 2); // Local onde se vi iniciar no LCD o resultado da corrente no regulador de carga lcd.print(corrente100); // Apresentação da corrente do regulador de carga no LCD PRC=TRC*corrente100; // Calculo da potência de RC lcd.setCursor(14,3); // Local no LCD onde se vai iniciar a (limpeza) da Potência do regulador de carga lcd.print(" "); // Limpeza do resultado anterior da potência do regulador de carga lcd.setCursor(14,3); // Local no LCD onde se vi iniciar o resultado da Potência do regulador de carga lcd.print(PRC); // Aprsentação do resultado da potência do regulador de carga no LCD delay(500);
//-----------------------Sensor de corrente 235A(BAT)------------------------------------------------------------------------------------------ lcd.setCursor(3,1); // Local no Lcd onde vai der apresentada a tensão da bateria lcd.print(12); // Valor de tensão na bateria
valor235 = analogRead(A3); // Valor do pino Analógico 5 //Sinal entre 1V e 3V //5V=1024 1.47mV = (0.8085*1024)/5 = 165.5808 // 1.96-(0.235*4.9)=0.8085 //5V=1024 2.45mV = (3.115*1024)/5 = 638,952 ~639 // 1.96+(0.235*4.9)=3.115 minimo235=((1.9700-(0.235*4.8265))*1024/5); // Calculo do valor minimo maximo235=((1.9700+(0.235*4.8265))*1024/5); // Calculo do valor máximo corrente235 = map(valor235, minimo235, maximo235, -23500, 23500);// Calculo da corrente corrente235 = corrente235/10000; Serial.print("BAT:"); // Apresentação da sigla da bateria no Serial Monitor Serial.print(corrente235); // Apresentação dos resultados da corrente no serial monitor Serial.println("A"); // Grandeza fisica(A) declarada no serial monitor lcd.setCursor(3, 2); // Local no LCD onde se vi iniciar o resultado da corrente da bateria lcd.print(" "); // Limpeza do LCD dos resultados anteriores lcd.setCursor(3, 2); // Local onde se vi iniciar no LCD o resultado da corrente na batreria lcd.print(corrente235); // Apresentação da corrente no LCD
PBAT=TBAT*corrente235; // Calculo da potência da bateria lcd.setCursor(3,3); // Local no LCD onde se vai iniciar a (limpeza) da Potência da bateria lcd.print(" "); // Limpeza do resultado anterior da potência da bateria lcd.setCursor(3,3); // Local no LCD onde se vi iniciar o resultado da Potência da bateria lcd.print(PBAT); // Apresentação resultado da Potência da bateria delay(500); // Tempo em milisegundos do refresh dos dados }//-----------------------------------------------------------------------------------------------------------------------------------------------
//----------------Arrio com valores hora----------------------------------------------------------------------------------------------------------
void vhora(){
//-------------------------------Estrutura do LCD-------------------------------------------------------------------------------------------------- lcd.setCursor(2,0); // Linha vertical na coluna 2 lcd.print("|"); lcd.setCursor(2,1); // Linha vertical na coluna 2 lcd.print("|"); lcd.setCursor(2,2); // Linha vertical na coluna 2 lcd.print("|"); lcd.setCursor(2,3); // Linha vertical na coluna 2 lcd.print("|"); lcd.setCursor(8,0); // Linha vertical na coluna 8 lcd.print("|"); lcd.setCursor(8,1); // Linha vertical na coluna 8 lcd.print("|"); lcd.setCursor(8,2); // Linha vertical na coluna 8 lcd.print("|"); lcd.setCursor(8,3); // Linha vertical na coluna 8 lcd.print("|"); lcd.setCursor(13,0); // Linha vertical na coluna 13 lcd.print("|"); lcd.setCursor(13,1); // Linha vertical na coluna 13 lcd.print("|"); lcd.setCursor(13,2); // Linha vertical na coluna 13 lcd.print("|"); lcd.setCursor(13,3); // Linha vertical na coluna 13 lcd.print("|");
lcd.setCursor(18,0); // Linha vertical na coluna 18 lcd.print("|"); lcd.setCursor(18,1); // Linha vertical na coluna 18 lcd.print("|"); lcd.setCursor(18,2); // Linha vertical na coluna 18 lcd.print("|"); lcd.setCursor(18,3); // Linha vertical na coluna 18 lcd.print("|");
// ----------------------------------- 1ªLinha ------------------------------------------------------------------------------------------------ lcd.setCursor(0, 0); // Coluna 0,1 linha 0(com traços)para criação de tabelas lcd.print("__"); lcd.setCursor(3, 0); // Coluna 4,5,6 Linha 0 (BAT) lcd.print("_BAT-"); lcd.setCursor(9,0); // Coluna 10,11 Linha 0 (AC) lcd.print("_AC_"); lcd.setCursor(14,0); // Coluna 15,16 Linha 0 (RC) lcd.print("_RC_");
//-------------------------------------1ªColuna------------------------------------------------------------------------------------------------- lcd.setCursor(0,1); // Coluna 0,1 Linha 0 (V) lcd.print("V="); lcd.setCursor(0,2); // Coluna 0,1 Linha 1 (I) lcd.print("I="); lcd.setCursor(0,3); // Coluna 0.1 Linha 2 (P) lcd.print("P=");
//-------------------------------------Coluna 19------------------------------------------------------------------------------------------------ lcd.setCursor(19,0); // Linha 0 (__) lcd.print("_"); lcd.setCursor(19,1); // Linha 1 (V) lcd.print("V"); lcd.setCursor(19,2); // Linha 2 (A) lcd.print("A"); lcd.setCursor(19,3); // Linha 3 (W) lcd.print("W");
//----------------------------------Sensor de corrente 45A(AC)----------------------------------------------------------------------------------- /* lcd.setCursor(9,1); // Local no Lcd onde vai ser apresentada a tensão de AC lcd.print("230"); // Valor da Tensão em AC
valor45 = analogRead(A5); // Valor do pino Analógico 3 //Sinal entre 1V e 3V //5V=1024 1V = (1.02*1024)/5 = 208.896 ~ 209 // 1.96-(0.045*4.5)=1.02 //5V=1024 3V = (2.9*1024)/5 = 593.92 ~ 594 // 1.96+(0.045*9.4)=2.9 minimo45=((1.96-(0.045*12))*1024/5); // Calculo do valor minimo maximo45=((1.96+(0.045*12))*1024/5); // Calculo do valor máximo corrente45 = map(valor45, minimo45, maximo45, -45, 45); // Calculo corrente Serial.print("AC:"); // Apresentação da sigla de AC no Serial Monitor Serial.print(corrente45); // Apresentação dos resultados da corrente de AC no serial monitor Serial.println("A"); // Grandeza fisica(A) declarada no serial monitor lcd.setCursor(9, 2); // Local no LCD onde se vi iniciar o resultado da corrente de AC lcd.print(" "); // Limpeza do LCD dos resultados anteriores lcd.setCursor(9, 2); // Local onde se vai iniciar no LCD o resultado da corrente em AC lcd.print(corrente45); // Apresentação da corrente de AC no LCD
PAC=TAC*corrente45; // Calculo da potência de AC lcd.setCursor(9,3); // Local no LCD onde se vai iniciar a (limpeza) da Potência em AC lcd.print(" "); // Limpeza do resultado anterior da potência em AC lcd.setCursor(9,3); // Local no LCD onde se vi iniciar o resultado da Potência em AC lcd.print(PAC); // Aprsentação do resultado da potência do regulador de carga no LCD delay(2000); // Tempo em milisegundos do refresh dos dados*/ //-----------------------Sensor de corrente 100A(RC)----------------------------------------------------------------------------------------- lcd.setCursor(14,1); // Local no Lcd onde vai der apresentada a tensão do regulador lcd.print(12); // Valor da Tensão no regulador de carga
valor100 = analogRead(A4); // Valor do pino Analógico 4 //Sinal entre 1V e 3V //5V=1024 1V = (0.97*1023)/5 = 198.656 ~ 199 // 1.95-(0.1*9.4)=0.97 //5V=1024 3V = (2.85*1023)/5 = 583.68 ~ 584 // 1.95+(0.1*9.4)=2.85 minimo100=((1.9175-(0.1*9.7515))*1024/5); // Calculo do valor minimo maximo100=((1.9175+(0.1*9.7515))*1024/5); // Calculo do valor máximo corrente100 = map(valor100, minimo100, maximo100, -10000, 10000);// Calculo da corrente corrente100 = corrente100/10000; /* if 1.9765 <= 0*/ Serial.print("RC:"); // Apresentação da sigla do regulador de carga no Serial Monitor Serial.print(corrente100); // Apresentação dos resultados da corrente no serial monitor Serial.println("A"); // Grandeza fisica(A) declarada no serial monitor lcd.setCursor(14,2); // Local no LCD onde se vi iniciar o resultado da corrente do regulador de carga lcd.print(" "); // Limpeza do LCD dos resultados anteriores lcd.setCursor(14, 2); // Local onde se vi iniciar no LCD o resultado da corrente no regulador de carga lcd.print(corrente100); // Apresentação da corrente do regulador de carga no LCD PRC=TRC*corrente100; // Calculo da potência de RC lcd.setCursor(14,3); // Local no LCD onde se vai iniciar a (limpeza) da Potência do regulador de carga lcd.print(" "); // Limpeza do resultado anterior da potência do regulador de carga lcd.setCursor(14,3); // Local no LCD onde se vi iniciar o resultado da Potência do regulador de carga lcd.print(PRC); // Aprsentação do resultado da potência do regulador de carga no LCD delay(500);
//-----------------------Sensor de corrente 235A(BAT)------------------------------------------------------------------------------------------ lcd.setCursor(3,1); // Local no Lcd onde vai der apresentada a tensão da bateria lcd.print(12); // Valor de tensão na bateria
valor235 = analogRead(A3); // Valor do pino Analógico 5 //Sinal entre 1V e 3V //5V=1024 1.47mV = (0.8085*1024)/5 = 165.5808 // 1.96-(0.235*4.9)=0.8085 //5V=1024 2.45mV = (3.115*1024)/5 = 638,952 ~639 // 1.96+(0.235*4.9)=3.115 minimo235=((1.9700-(0.235*4.8265))*1024/5); // Calculo do valor minimo maximo235=((1.9700+(0.235*4.8265))*1024/5); // Calculo do valor máximo corrente235 = map(valor235, minimo235, maximo235, -23500, 23500);// Calculo da corrente corrente235 = corrente235/10000; Serial.print("BAT:"); // Apresentação da sigla da bateria no Serial Monitor Serial.print(corrente235); // Apresentação dos resultados da corrente no serial monitor Serial.println("A"); // Grandeza fisica(A) declarada no serial monitor lcd.setCursor(3, 2); // Local no LCD onde se vi iniciar o resultado da corrente da bateria lcd.print(" "); // Limpeza do LCD dos resultados anteriores lcd.setCursor(3, 2); // Local onde se vi iniciar no LCD o resultado da corrente na batreria lcd.print(corrente235); // Apresentação da corrente no LCD
PBAT=TBAT*corrente235; // Calculo da potência da bateria lcd.setCursor(3,3); // Local no LCD onde se vai iniciar a (limpeza) da Potência da bateria lcd.print(" "); // Limpeza do resultado anterior da potência da bateria lcd.setCursor(3,3); // Local no LCD onde se vi iniciar o resultado da Potência da bateria lcd.print(PBAT); // Apresentação resultado da Potência da bateria delay(500); // Tempo em milisegundos do refresh dos dados }//------------------------------------------------------------------------------------------------------------------------------------------ void loop() { if (digitalRead(SWITCH) == HIGH && encrava == 0){ var_menus++; trata_lcd(); encrava = 1; }if (digitalRead(SWITCH) == LOW) encrava = 0;
//refresca o LCD de segundo a segundo. if (millis() - refresh >= 1000) { trata_lcd(); refresh = millis(); //actualiza a contagem. }
}
void trata_lcd() {switch(var_menus%NUM_MENUS) {
case 0: lcd.clear(); lcd.print(vinstantaneo()); break;
case 1: lcd.clear(); lcd.print(vhora()); break;}}
…
desativada a interrupção do dimmer também funciona:
Exemplo: if (bufferSerial == "A"){detachInterrupt(0);irsend.send(1,0x2FD48B7,32); attachInterrupt(0, zero_crosss_int, RISING); enviou =1; delay(5);} // código NEC(1) TV para ligar
A conexão serial com a placa é feita pelo modulo BT HC-05.
Grato pelo interesse.
#include <IRLib.h>#include <IRLibMatch.h>#include <IRLibRData.h>#include <IRLibTimer.h>
//definições dimmerint ZERO = 2; // pino de interrupção do zero crossint AC_LOAD = 10; // Output para o Triacvolatile int dimming = 100; // Dimming level (0-128) 0 = ON, 128 = OFFString ValorDimmer;
//definições do Receptor IRIRsend irsend; //instância para enviar IR const int led = 8; // pino do led de indicação de envio IR const int ledIR = 3; //pino do emissor IR
//variaveis do temporizador para temperaturaint savedTime;int totalTime = 0;
//variaveis leitura serialString bufferSerial = "";int numero; //contador para alterar a potencia do dimmerint enviou; //flag para indicar que foi enviado codigo IR
void setup(){Serial.begin(9600);
//irpinMode(led, OUTPUT); // saida led pinMode(ledIR ,OUTPUT); // saída do infravermelho
//dimmerpinMode(ZERO, INPUT);pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as outputattachInterrupt(0, zero_crosss_int, RISING); //zero-crossing - interrupçãonumero = dimming; //inicializa a leitura da serial com o mesmo valor do dimming
//inicia temporizador que atualiza temperaturasavedTime = millis();delay(100);
}
void loop(){ //atualiza temperatura no intervalo de "totaltime" int passedTime = millis() - savedTime; if (passedTime > totalTime) { //temperatura LM35 int sum=0; for (int i = 0; i < 50; i++) sum += analogRead(A5); int media = (sum * 0.48875855) / 50; savedTime = millis(); // totalTime = 5000; //Seta para 5seg } bufferSerial = ""; while (Serial.available()>0) { enviou = 0; char c = Serial.read(); // Lê byte do buffer serial; bufferSerial.concat(c); // Concatena valores delay(5); if (c == '@') break; // se leu o caracter @ sai do loop. Este caracter é enviado pela rotina do celular }
if (bufferSerial.length()>0 && bufferSerial.length()<2 && !enviou) { //verifica se informação que chegou esta entre 1 e 2 caracteres (para futuras implementações)
digitalWrite(led, HIGH); //acende o led indicador de envio de IR / comando
if (bufferSerial == "A"){irsend.send(1,0x2FD48B7,32); enviou =1; delay(5);} // código NEC(1) TV para ligar if (bufferSerial == "B"){irsend.send(1,0x2FD7887,32); enviou =1; delay(5);} // código NEC(1) TV para diminuir o volume if (bufferSerial == "C"){irsend.send(1,0x2FD58A7,32); enviou =1; delay(5);}// código NEC(1) TV para aumentar o volume if (bufferSerial == "D"){irsend.send(1,0x2FDA857,32); enviou =1; delay(5);}// código NEC(1) TV para timer if (bufferSerial == "E"){irsend.send(1,0x2FD08F7,32); enviou =1; delay(5);}// código NEC(1) TV para mute if (bufferSerial == "M"){irsend.send(7,0x34347887,32);enviou =1; delay(5);} // código NECx(7) HTLG para ligar/desligar if (bufferSerial == "N"){irsend.send(7,0x34346897,32);enviou =1; delay(5);} // código NECx(7) HTLG para baixar o volume if (bufferSerial == "O"){irsend.send(7,0x3434e817,32);enviou =1; delay(5);}// código NECx(7) HTLG para aumentar o volume if (bufferSerial == "P"){irsend.send(7,0x343451AE,32);enviou =1; delay(5);}// código NECx(7) HTLG para selecionar o source if (bufferSerial == "Q"){irsend.send(7,0x343459A6,32);enviou =1; delay(5);}// código NECx(7) HTLG para abrir o deck if (bufferSerial == "R"){irsend.send(7,0x343415EA,32);enviou =1; delay(5);} // código NECx(7) HTLG para mudar de estação / seleção - if (bufferSerial == "S"){irsend.send(7,0x3434956A,32);enviou =1; delay(5);} // código NECx(7) HTLG para mudar de estação / seleção + if (bufferSerial == "T"){irsend.send(7,0x343455AA,32);enviou =1; delay(5);}// código NECx(7) HTLG como enter if (bufferSerial == "U"){irsend.send(7,0x343420DF,32);enviou =1; delay(5);}// código NECx(7) HTLG como play if (bufferSerial == "V"){irsend.send(7,0x3434F20D,32);enviou =1; delay(5);}// código NECx(7) HTLG como pause if (bufferSerial == "X"){irsend.send(7,0x3434609F,32);enviou =1; delay(5);} // código NECx(7) HTLG como skip - if (bufferSerial == "Y"){irsend.send(7,0x3434E01F,32);enviou =1; delay(5);}// código NECx(7) HTLG como skip + }
//se o comando possui mais de 2 caracteres então é para o dimmer if (bufferSerial.length()>2){ bufferSerial.trim(); //elimina possiveis espaços if (bufferSerial.substring(0,2) == "#L") numero = numero+5; //incrementa contador do dimmer para diminuir potencia if (bufferSerial.substring(0,2) == "#H") numero = numero-5; //decrementa contador do dimmer para aumentar potencia if (numero >= 15 && numero <= 128) //se contador estiver abaixo ou acima dos limites do dimmer mantém a ultima leitura dimming=numero; else dimming=dimming; } digitalWrite(led, LOW); //apaga o led indicador de envio de IR / comando }
// função disparada pelo zero-crossingvoid zero_crosss_int() {int dimtime = (65*dimming); // For 60Hz =>65 delayMicroseconds(dimtime); // Off cycledigitalWrite(AC_LOAD, HIGH); // triac firingdelayMicroseconds(8.33); // triac On propogation delay 10ms for 60Hz use 8.33)digitalWrite(AC_LOAD, LOW); // triac Off}…
Adicionado por Fernando Souza ao 10:53 em 10 novembro 2014
ada digital que não esteja sendo usado pelo Ethernet Shield, senão conflitos irão ocorrer. Há no mercado uma variedade de implementações do Ethernet Shield, e embora praticamente todas usem o W5100 e tenham um receptáculo para Cartão SD, há quase sempre ligeiras diferenças entre estas implementações. O ideal é que vc tivesse o esquemático do exato modelo do Shield que está usando, para poder conferir quais "pinos" estão livres. Outra possibilidade, é você analisar o código da Lib específica, e por lá descobrir quais pinos são usados.
No entanto, como a maioria delas usa a interface SPI do Arduino, tanto para se comunicar com o W5100 quanto Cartão SD, podemos considerar que há vários sinais digitais do Arduino que estão livres. Eu analisei dois esquemáticos (os quais são sempre desenhados de forma péssima), e pude verificar que certamente o pino digital "7" do Arduino está livre nestes esquemáticos. Então acho que ele poderia ser um boa opção para você usar.
Observe que os "pinos" A0 até A5 do Arduino são originalmente pinos digitais da CPU Atmega328. No entanto evita-se usar estes pinos, porque eles são os únicos pinos que podem ser entradas Analógicas, e caso vc precise dessas entradas, elas estarão disponíveis. Mas são 6 entradas, e mesmo que vc venha a precisar de uma entrada Analógica posteriormente, ainda assim haverá uma ou outra disponível, caso você precise usar uma ou mais delas como pinos digitais.
Na figura a seguir, você pode ver a conexão do seu sensor magnético ao Arduino UNO (no caso ao pino "7"):
Observe que não há resistor externo ligado entre o pino "7" e o 5V do Arduino. Isto significa que você deverá obrigatoriamente configurar a entrada digital "7", como sendo do tipo "INPUT_PULLUP". A linha de código para isso seria:
pinMode ( 7, INPUT_PULLUP );
Mas caso você queira colocar um resistor externo, então a entrada deve ser configurada apenas como "INPUT", e o valor do resistor pode ser de 10k.
Outro ponto importante, é o capacitor de 100 kpF ligado entre o pino "7" e o GND do Arduino. Este capacitor evita que ruídos espúrios possam "enganar" seu alarme. Se vc não tiver um de 100 kpF, pode usar um valor maior, como 220, 330, 470 kpF, e até mesmo 1uF. Use capacitores de cerâmica. Eletrolítico de Alumínio, nem pensar!!!). Não deixe de incluir o capacitor, principalmente se o cabo do seu sensor for relativamente longo. O capacitor deve estar fisicamente o mais próximo possível do Arduino (e não do sensor!!!), preferencialmente quase junto da placa do UNO.
Veja que o que seu programa precisa, é apenas detectar quando a entrada "7" do Arduino, está em "HIGH". Isto porque quando o outro lado do sensor (a parte do imã) está encostada no sensor ligado ao pino "7", a chave está fechada, e portanto o valor lido será "LOW". Ao se afastar o imã, a chave abre, e o valor lido passa a ser "HIGH", indicando que a janela foi aberta.
Como seu perfil indica que vc é da área de Eletrônica, acredito que não será um problema para vc implementar isso, além do próprio programa no Arduino para detectar o acionamento do sensor (que é uma chave simples, apenas magnética), e a sinalização correspondente. Caso tenha, avise aqui que ajudamos você.
Informação final: caso vc precise instalar vários sensores, monitorados pelo mesmo Arduino, mesmo que não existam pinos suficientes sobrando no Arduino, há diversas formas de se fazer isso. Se precisar, também avise aqui que vamos te auxiliar.
Sucesso com sua implementação.
Abrçs,
Elcids
…
Adicionado por Elcids Chagas ao 18:11 em 20 maio 2018
ara consumo próprio e de amigos, sem fins lucrativos:
o projetinho original tinha mais botões, por isso é que tem 4 botões declarados, como só uso 2, deixeis o restante declarado para não ter problema.
O que estou buscando ajuda seria alterar o valor de delay da linha abaixo usando o LCD dentro de uma nova janela onde a chamaria de SETUP. criar a nova janela eu já consigo fazer sozinho.
digitalWrite(aliviol,HIGH); // fecha escape lentodelay(10000);
pois caso no meio do envase eu tenha que reduzir ou aumentar este tempo, tenho que conectar o note e transferir o código.
// --- Bibliotecas Auxiliares ---#include <LiquidCrystal.h> //Biblioteca para o display LCD
// ATENCAO PARA TROCAR AS PORTAS DO LCD
// --- Mapeamento de Hardware --- #define butUp 10 //Botão para selecionar tela acima no digital 12#define butDown 12 //Botão para selecionar tela abaixo no digital 11 #define butP 11 //Botão de ajuste mais no digital 10#define butM 13 //Botão de ajuste menos no digital 9#define co2 A0 //Saída para rele co2 no A0 (será usado como digital)#define beer A1 //Saída para rele beer no A1 (será usado como digital)#define alivior A2 //Saída para rele alivio rapido no A2 (será usado como digital)#define aliviol A3 //Saída para rele alivio lento no A3 (será usado como digital) #define buzzer A4 //Saída para buzzer anuncio garrafa cheia (será usada como digital)
// --- Protótipo das Funções Auxiliares ---void changeMenu(); //Função para modificar o menu atualvoid dispMenu(); //Função para mostrar o menu atualvoid GARRAFA300ML(); //Função 3void GARRAFA500ML(); //Função 4
// --- Variáveis Globais ---char menu = 0x01; //Variável para selecionar o menuchar set1 = 0x00, set2 = 0x00; //Controle das lâmpadasboolean t_butUp, t_butDown, t_butP, t_butM; //Flags para armazenar o estado dos botões
// --- Hardware do LCD ---LiquidCrystal disp(7, //RS no digital 7 8, //EN no digital 8 6, //D4 no digital 6 5, //D5 no digital 5 4, //D6 no digital 4 3); //D7 no digital 3
// --- Configurações Iniciais ---void setup(){ disp.begin(16,2); //Inicializa LCD 16 x 2 for(char i=9; i<13; i++) pinMode(i, INPUT_PULLUP); //Entrada para os botões (digitais 9 a 12) com pull-ups internos pinMode(co2, OUTPUT); //Configura saída para rele co2 pinMode(beer, OUTPUT); //Configura saída para rele beer pinMode(alivior, OUTPUT); //Configura saída para rele alivio r pinMode(aliviol, OUTPUT); //Configura saída para rele alivio l pinMode(buzzer, OUTPUT); t_butUp = 0x00; //limpa flag do botão Up t_butDown = 0x00; //limpa flag do botão Down t_butP = 0x00; //limpa flag do botão P t_butM = 0x00; //limpa flag do botão M digitalWrite(co2, HIGH); //Lâmpada 1 inicia apagada digitalWrite(beer, HIGH); //Lâmpada 2 inicia apagada digitalWrite(alivior, HIGH); //Lâmpada 1 inicia apagada digitalWrite(aliviol, HIGH); //Lâmpada 2 inicia apagada digitalWrite(buzzer, LOW);} //end setup
// --- Loop Infinito ---void loop(){ changeMenu(); dispMenu();
} //end loop
//****************************************** Desenvolvimento das Funções Auxiliares********************************************************
void changeMenu() //Modifica o menu atual{ if(!digitalRead(butUp)) t_butUp = 0x01; //Botão Up pressionado? Seta flag if(!digitalRead(butDown)) t_butDown = 0x01; //Botão Down pressionado? Seta flag if(digitalRead(butUp) && t_butUp) //Botão Up solto e flag setada? { //Sim... t_butUp = 0x00; //Limpa flag disp.clear(); //Limpa display menu++; //Incrementa menu if(menu > 0x06) menu = 0x01; //Se menu maior que 6, volta a ser 1 } //end butUp if(digitalRead(butDown) && t_butDown) //Botão Down solto e flag setada? { //Sim... t_butDown = 0x00; //Limpa flag disp.clear(); //Limpa display menu--; //Decrementa menu if(menu < 0x01) menu = 0x06; //Se menu menor que 1, volta a ser 6 } //end butDown
} //end changeMenu
//******************************* CONTROLE DOS MENUS **********************************************************************************************************************
void dispMenu() //Mostra o menu atual{
disp.setCursor(4,1); //Posiciona cursor na coluna 4, linha 1disp.print("FULL JAZZ"); //Imprime mensagemdelay(100);
switch(menu) //Controle da variável menu { case 0x01: //Caso 1 GARRAFA300ML(); //GARRAFA 300ML break; //break
case 0x02: //Caso 2 GARRAFA500ML(); //GARRAFA 500ML break; //break
} //end switch menu
} //end dispMenu
// *************************************** GARRAFAS DE 300ML*****************************************************************************************************************************
void GARRAFA300ML() { disp.setCursor(0,0); //Posiciona cursor na coluna 1, linha 1 disp.print("GARRAFA 300ML"); //Imprime mensagem do menu 3 if(!digitalRead(butP)) t_butP = 0x01; //Botão P pressionado? Seta flag if(!digitalRead(butM)) t_butM = 0x01; //Botão M pressionado? Seta flag if(digitalRead(butP) && t_butP) //Botão P solto e flag setada? { //Sim... t_butP = 0x00; //Limpa flag set1++; //Incrementa set1 if(set1 > 2) set1 = 0x01; //Se maior que 2, volta a ser 1 switch(set1) //Controle do set1 { case 0x01: //Caso 1 // disp.setCursor(4,1); //Posiciona cursor na coluna 1, linha 2 // disp.print("ENCHENDO....."); //Imprime mensagem
disp.clear();
disp.setCursor(0,0);disp.print(" REMOVE OXIGENIO");
digitalWrite(co2,LOW); //liga co2delay(2000);
digitalWrite(co2,HIGH); // fecha co2delay(500);
digitalWrite(alivior,LOW); // abre escape rapidodelay(2000); digitalWrite(alivior,HIGH); // fecha escape rapidodelay(500);disp.clear();
// ******** GARRAFA SEM O2
disp.setCursor(0,0);disp.print(" INJETA CO2");digitalWrite(co2,LOW); // liga co2 delay(2000);digitalWrite(co2,HIGH); // fecha co2delay(1000);disp.clear();
// ******* GARRAFA PRESSURIZADA COM CO2
digitalWrite(beer,LOW); // abre beerdelay(3000);disp.setCursor(0,0);disp.print("ENCHENDO....");digitalWrite(aliviol,LOW); // abre escape lentodelay(24000);
disp.clear();disp.setCursor(0,0); disp.print("GARRAFA CHEIA");
digitalWrite(aliviol,HIGH); // fecha escape lentodelay(10000);
digitalWrite(beer,HIGH); // fecha beerdelay(1000);disp.clear();disp.setCursor(0,0); disp.print("AGUARDE");
digitalWrite(alivior,LOW); // abre escape rapidodelay(3000); digitalWrite(alivior,HIGH); // fecha escape rapidodelay(500); digitalWrite(buzzer,HIGH); delay(500); digitalWrite(buzzer,LOW); delay(500);
digitalWrite(buzzer,HIGH); delay(500); digitalWrite(buzzer,LOW); delay(500);
digitalWrite(buzzer,HIGH); delay(500); digitalWrite(buzzer,LOW); delay(500);
digitalWrite(buzzer,HIGH); delay(50); digitalWrite(buzzer,LOW); delay(50);
digitalWrite(buzzer,HIGH); delay(50); digitalWrite(buzzer,LOW); delay(50);
digitalWrite(buzzer,HIGH); delay(50); digitalWrite(buzzer,LOW); delay(50);
digitalWrite(buzzer,HIGH); delay(50); digitalWrite(buzzer,LOW); delay(50);
disp.clear(); disp.print("PROXIMA GARRAFA"); delay(5000); disp.clear();
//******** GARRAFA CHEIA break; //Break
} //end switch set1 } //end butM
} // FECHA ETAPA 300ML //************************************************************GARRAFAS DE 500ML************************************************************************************************************
void GARRAFA500ML() { disp.setCursor(0,0); //Posiciona cursor na coluna 1, linha 1 disp.print("GARRAFA 500ML"); //Imprime mensagem do menu 3 if(!digitalRead(butP)) t_butP = 0x01; //Botão P pressionado? Seta flag if(!digitalRead(butM)) t_butM = 0x01; //Botão M pressionado? Seta flag if(digitalRead(butP) && t_butP) //Botão P solto e flag setada? { //Sim... t_butP = 0x00; //Limpa flag set1++; //Incrementa set1 if(set1 > 2) set1 = 0x01; //Se maior que 2, volta a ser 1 switch(set1) //Controle do set1 { case 0x01: //Caso 1 // disp.setCursor(4,1); //Posiciona cursor na coluna 1, linha 2 // disp.print("ENCHENDO....."); //Imprime mensagem
disp.clear();
disp.setCursor(0,0);disp.print(" REMOVE OXIGENIO");
digitalWrite(co2,LOW); //liga co2delay(2000);
digitalWrite(co2,HIGH); // fecha co2delay(500);
digitalWrite(alivior,LOW); // abre escape rapidodelay(4000); digitalWrite(alivior,HIGH); // fecha escape rapidodelay(500);disp.clear();
// ******** GARRAFA SEM O2
disp.setCursor(0,0);disp.print(" INJETA CO2");digitalWrite(co2,LOW); // liga co2 delay(2000);digitalWrite(co2,HIGH); // fecha co2delay(1000);disp.clear();
// ******* GARRAFA PRESSURIZADA COM CO2
digitalWrite(beer,LOW); // abre beerdelay(500);disp.setCursor(0,0);disp.print("ENCHENDO....");digitalWrite(alivior,LOW); // abre escape lentodelay(20000);disp.clear();
disp.setCursor(0,0); disp.print("AGUARDE");
digitalWrite(beer,HIGH); // fecha beerdelay(2000);digitalWrite(alivior,HIGH); // fecha escape lentodelay(400); disp.clear();
delay(500);disp.setCursor(0,0); disp.print("GARRAFA CHEIA"); digitalWrite(buzzer,HIGH); delay(500); digitalWrite(buzzer,LOW); delay(50); delay(500); digitalWrite(buzzer,HIGH); delay(500); digitalWrite(buzzer,LOW); delay(50); disp.clear(); disp.print("PROXIMA GARRAFA"); delay(3000); disp.clear();
//******** GARRAFA CHEIA break; //Break
} //end switch set1 } //end butM
} // FECHA ETAPA 500ML
…
scolares(e estudante vive sempre duro ha ha ha) a coisa pega ! Acabei de comprar ontem 4 sensores ultrasonicos pra uma montagem usando os 4 ao mesmo tempo que um amigo tá fazendo, cada sensor foi comprado por apenas R$ 6,50.
MASSSSSSSSSS... Já que o assunto é trazer teorias de nível de caixa d'agua, lá vai mais uma.
Em minha casa eu tenho um sistema de irrigação controlado por arduino, tentei usar essas boias de caixa d'agua e com o tempo elas sempre davam pau, resultado criei o que chamei de BOIA DIGITAL PASSIVA (depois descobri que muita gente usa, mas a minha eu tirei da cabeça).
Com essa boia e um arduino dá pra medir até SEIS NÍVEIS diferentes, pois cada nível é ligado a uma porta analogica do arduino, e ele tem 6 portas, obvio que se vocÊ usar um mega, a historia é outra.
VAMOS A MONTAGEM DA BOIA DIGITAL PASSIVA:
1º- Consiga uma placa de plastico(pode-se até usar outros materiais como madeira, mas não recomendo, o plastico é o ideal) que seja do tamanho da profundidade de sua caixa d'agua.
2º- Consiga fios ou fita inox (eu usei dessas fitas que é utilizada pelas companhias eletricas para prender coisas aos postes, elas são baratas e faceis de achar, no meu caso eu achei e só reciclei)
3º- Fios com o numero de pernas relativos ao numero de sensores que você deseja ter ( no meu caso só pus 2, um em cima e um em baixo, dai usei fio com 3 pernas)
4º- Um arduino ( fica ao gosto do cliente )
MONTAGEM:
a) Pegue a placa de plastico e prenda com arrebite um pedaço da fita de aço no tamanho que vá do topo a base da placa, mas sem topar em baixo.
b) agora dê aproximadamente 1,5cm de distancia e coloque uma segunda fita inox, dessa vez do topo até o ponto mais baixo onde você deseja que seja indicado o fundo da caixa d'agua.
c) agora vá dando 1,5cm de distancia e vá colocando quantas fitas inox quiser cada uma saindo do topo e indo até um ponto, formando uma especie de escada.
d) pegue o fio e ligue cada uma das penas em cada uma das pontas da fita que fica no topo, vocÊ pode soldar ou só fixar nos arrebites.
A LIGAÇÃO:
O primeiro fio, que esta ligado na primeira fita que vai até o fundo, deverá ser ligado nos 5v do arduino.
Cada um dos demais fios, ligados a uma fita que vai até uma profundidade deverá ser ligado a uma porta analogica do arduino.
PROGRAMANDO:
Abra a IDE do arduino, vá em examples, basics e abra o AnalogReadSerial.
Onde há: int sensorValue = AnalogRead(A0); copie a linha e replique pelo numero de pontos desejado, por exemplo:
int sensorValue1 = AnalogRead(A1);
int sensorValue2 = AnalogRead(A2);
int sensorValue3 = AnalogRead(A3);
e pro ultimo faça o mesmo na parte que manda aparecer o resultado na serial:
Serialprintln(sensorValue1);
Serialprintln(sensorValue2);
Serialprintln(sensorValue3);
TESTANDO:
Ligue o SENSOR DIGITAL PASSIVO no arduino e leve ele até a caixa d'agua que para teste deverá estar cheia.
Abra um terminal serial e veja que os resultados deverão estar 0, se não tiver ligue um RESISTOR DE PULL DOWN em cada uma das portas.
Por ultimo vá submergindo o SENSOR DIGITAL PASSIVO dentro da caixa e você notará que quando chegar em cada fita que a água tocar nele, automaticamente o valor aumentará.
TÁ PRONTO ! a partir daqui é só programação.
espero que tenham gostado, esse eu já tô usando a mais de um ano e a precisão é absoluta, não rola falhas.
Outro fato legal desse "Sensor" é que ele é "passivo" ou seja, não existem partes móveis, ativas ou eletrônicas, são apenas astes de inox, que o unico trabalho que você terá de tempos em tempos é passar um pano pra limpar alguma sujeita que esteja alterando a condutividade.
Resumindo, o troço não quebra.
…
Adicionado por Weider Duarte ao 10:38 em 29 julho 2014
ude <LiquidCrystal.h> //Inclui a biblioteca do LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Configura os pinos do Arduino para se comunicar com o LCDint LDR; //declara variavel int ledPin1=10;//escrevi led, mas e o buzzer int ledPin2=6;//escrevi led, mas e o buzzer int ledPin3=7;//escrevi led, mas e o buzzer int LDR1; int LDR2; int LDR3; int VLDR1; int VLDR2; int VLDR3; int temp1; //Inicia uma variável inteira(temp), para escrever no LCD a contagem do tempofloat VLDR; int temp2; //Inicia uma variável inteira(temp), para escrever no LCD a contagem do tempofloat VLDR; int temp3; //Inicia uma variável inteira(temp), para escrever no LCD a contagem do tempofloat VLDR;//------------------------------------------- void setup() { lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas) Serial.begin(9600); pinMode(A0, INPUT);// entrada A0 pinMode(10,OUTPUT); // define o pino 10 como saida }//------------------------------------------- void Rotina1() { lcd.setCursor(13, 1); //Posiciona o cursor na décima quarta coluna(13) e na segunda linha(1) do LCD lcd.print(temp1); //Escreve o valor atual da variável de contagem no LCD delay(1000); //Aguarda 1 segundo temp1++; //Incrementa variável de contagem if(temp1 == 600) //Se a variável temp chegar em 600(10 Minutos),... { lcd.print(" "); // Limpa display temp1 = 0; //...zera a variável de contagem } LDR1 = analogRead(A0); VLDR1=LDR1*5.00000/1024; Serial.println(LDR1); delay(100); if (LDR1 > 1000) { lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD lcd.print("LDR 1"); //Escreve no LCD lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD lcd.print("cozinha"); //Escreve no LCD tone(10,200); delay(50); tone(10,100); delay(50); } else { lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD lcd.print(" "); //Escreve no LCD lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD lcd.print(" "); //Escreve no LCD noTone(10); } }//------------------------------------------- void Rotina2() { lcd.setCursor(13, 1); //Posiciona o cursor na décima quarta coluna(13) e na segunda linha(1) do LCD lcd.print(temp2); //Escreve o valor atual da variável de contagem no LCD delay(1000); //Aguarda 1 segundo temp2++; //Incrementa variável de contagem if(temp2 == 600) //Se a variável temp chegar em 600(10 Minutos),... { lcd.print(" "); // Limpa display temp2 = 0; //...zera a variável de contagem } LDR2 = analogRead(A1); VLDR2=LDR2*5.00000/1024; Serial.println(LDR2); delay(100); if (LDR2 > 1000) { lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD lcd.print("LDR 2"); //Escreve no LCD lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD lcd.print("Sala"); //Escreve no LCD tone(10,200); delay(50); tone(10,100); delay(50); } else { lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD lcd.print(" "); //Escreve no LCD lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD lcd.print(" "); //Escreve no LCD noTone(10); } }//------------------------------------------- void Rotina3() { lcd.setCursor(13, 1); //Posiciona o cursor na décima quarta coluna(13) e na segunda linha(1) do LCD lcd.print(temp3); //Escreve o valor atual da variável de contagem no LCD delay(1000); //Aguarda 1 segundo temp3++; //Incrementa variável de contagem if(temp3 == 600) //Se a variável temp chegar em 600(10 Minutos),... { lcd.print(" "); // Limpa display temp3 = 0; //...zera a variável de contagem } LDR3 = analogRead(A2); VLDR3=LDR3*5.00000/1024; Serial.println(LDR3); delay(100); if (LDR3 > 1000) { lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD lcd.print("LDR 3"); //Escreve no LCD lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD lcd.print("Quarto"); //Escreve no LCD tone(10,200); delay(50); tone(10,100); delay(50); } else { lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD lcd.print(" "); //Escreve no LCD lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD lcd.print(" "); //Escreve no LCD noTone(10); } }//------------------------------------ void loop() { Rotina1(); Rotina2(); Rotina3(); }…
Adicionado por mineirin RV ao 19:24 em 8 junho 2015
3 aumenta e diminui o valor da temperatura pra sair desta tela mais um toque na tecla4
menu tela principal mostra a temperatura do sensor e a umidade
menu1 ajusta a temperatura / saida a rele liga resistencia
menu2 ajusta umidade / sida rele liga secador
menu3 ajusta tempo de virar saida rele liga motor
menu4 ajusta horas minutos
menu5 ajusta dias ligado
estou anexando o programa para ajuda tentei fazer mais sou leigo em arduino to comessando agora
*/ #include <LiquidCrystal.h> // Inclui a biblioteca do LCD #include "DHT.h" // Inclui a biblioteca do DHT11 #define DHTPIN A1 // pino que estamos conectado #define DHTTYPE DHT11 // DHT 11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd( 7, 8, 9, 10, 11, 12); // Pinos do LCD const int Rele = 13; // Pino de Saída const int Up = 2; // Pino do switch de Up const int Dn = 3; // Pino do switch de Dn const int DMenu = 4; // Pino do switch de Dn float TempProg = 27; // Variavel com temperatura programada long debouncing_time = 15; // Debouncing Time in Milliseconds volatile unsigned long last_micros; // Variavel para deboucing float celsius; // Varialvel para guardar valor de temperatura byte humidade; // Varialvel para guardar valor de humidade
int contador = 0; // essa variavel vai controlar o loop do menu andando por ele opcões 0->1->2->3->0 int quantMenu = 3; // define quantas opcoes vao ter no menu void setup() { lcd.begin(16, 2); // Inicia o LCD com dimensões 16x2(Colunas x Linhas) pinMode(Rele, OUTPUT); // Port como saída digitalWrite(Rele, LOW); // Desliga Rele pinMode(DMenu, INPUT); pinMode(Up, INPUT_PULLUP); // Port do switch Up como entrada e Pull-Up pinMode(Dn, INPUT_PULLUP); // Port do switch Dn como entrada e Pull-Up dht.begin(); // inicializa o Sensor delay(1000); // Aguarda 1 seg antes de acessar as informações do sensor attachInterrupt(1, PressUp, RISING); // Interrupt de botão ao ficar HIGH o pino 3 attachInterrupt(0, PressDn, RISING); // Interrupt de botão ao ficar HIGH o pino 2 }
//*************** Rotina PressUp ***************** void botaoMenu() // Rotina chamada pela interrupcao do botão de aumento { if((long)(micros() - contador) >= debouncing_time * 1000) // Tempo de debouncing { contador = contador + 1; // Incrementa temperatura em 0,01 oC last_micros = micros(); // Tempo de debouncing } } //*************** Rotina PressUp ***************** void PressUp() // Rotina chamada pela interrupcao do botão de aumento { if((long)(micros() - last_micros) >= debouncing_time * 1000) // Tempo de debouncing { TempProg = TempProg + 0.1; // Incrementa temperatura em 0,01 oC lcd.setCursor(11, 1); // Seleciona posição 0 da linha 0 lcd.print(TempProg); // Imprime variavel last_micros = micros(); // Tempo de debouncing } } //*************** Rotina PressDn ***************** void PressDn() // Rotina chamada pela interrupcao do botão de reducao { if((long)(micros() - last_micros) >= debouncing_time * 1000) // Tempo de debouncing { TempProg = TempProg - 0.1; // Decrementa temperatura em 0,01 oC lcd.setCursor(11, 1); // Seleciona posição 0 da linha 0 lcd.print(TempProg); // Imprime variavel last_micros = micros(); // Tempo de debouncing } } //*********************** Loop ******************** void loop() { celsius = dht.readTemperature(); // Le temperatura no DHT11 humidade = dht.readHumidity(); // Le humidade no DHT11 switch(contador){ case 0: inicio(); break; case 1: opcao1(); break; case 2: opcao2(); break; case 3: opcao3(); break; } // Fim di Switch delay(250); } // Fim do LOOP
// Inicio das opcoes do Menu void inicio() { lcd.setCursor(11, 0); // Seleciona posição 0 da linha 0 lcd.print("H "); // Imprime texto lcd.print(humidade); // Imprime humidade if (celsius >= TempProg) // Faça se a temperatura for menor que a programada digitalWrite(Rele, LOW); // Desliga Rele como entrada e Pull-Up else // Ou se não for digitalWrite(Rele, HIGH); // Liga Rele como entrada e Pull-Up lcd.setCursor(0, 1); // Seleciona posição 0 da linha 0 lcd.print(celsius); // Imprime a gemperatura lcd.setCursor(6, 1); // Seleciona posição 6 da linha 0 if (digitalRead(Rele) == 1) // Faça se o rele tiver operado lcd.print("Lig "); // Imprime texto else // Ou se não tiver lcd.print("Desl"); // Imprime texto delay(200); }
// Funcao da opcao 1 void opcao1(){ lcd.clear(); lcd.setCursor(0,0); lcd.print("jose"); lcd.setCursor(0,1); lcd.print("menu1 "); }
// Funcao da opcao 2 void opcao2(){ lcd.clear(); lcd.setCursor(0,0); lcd.print("jose"); lcd.setCursor(0,1); lcd.print("menu2 "); }
// Funcao da opcao 3 void opcao3(){ lcd.clear(); lcd.setCursor(0,0); lcd.print("jose"); lcd.setCursor(0,1); lcd.print("menu3 "); }
…
DHT 11
// Conecte pino 1 do sensor (esquerda) ao +5V
// Conecte pino 2 do sensor ao pino de dados definido em seu Arduino
// Conecte pino 4 do sensor ao GND
// Conecte o resistor de 10K entre pin 2 (dados)
// e ao pino 1 (VCC) do sensor
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
}
void loop()
{
// A leitura da temperatura e umidade pode levar 250ms!
// O atraso do sensor pode chegar a 2 segundos.
float h = dht.readHumidity();
float t = dht.readTemperature();
// testa se retorno é valido, caso contrário algo está errado.
if (isnan(t) || isnan(h))
{
Serial.println("Failed to read from DHT");
}
else
{
Serial.print("Umidade: ");
Serial.print(h);
Serial.print(" %t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" *C");
}
}
…