Ir ao conteúdo
  • Cadastre-se

TECHNOSAT

Membro Pleno
  • Posts

    50
  • Cadastrado em

  • Última visita

Tudo que TECHNOSAT postou

  1. Boa tarde a todos. Posto abaixo "dois pares de códigos" que elaborei para o Arduíno usando em ambos o "Módulo RF Wireless HC-12" com apoio de um LCD I2C 16x2. Trata-se do melhor módulo RF que já encontrei para trabalhar com o Arduíno, que alcança distância de mais de 1000 metros e sua programação é bem simples, utilizando uma biblioteca nativa do Arduíno chamada "SoftwareSerial". Os programas abaixo funcionam perfeitamente e podem auxiliar àqueles que, como eu, estão a procura de uma comunicação RF potente e de simples programação. O primeiro código faz a leitura remota de temperatura em um LM35 pelo HC12-transmissor e é recebida por outro HC12-receptor, sendo impressa no LCD 16x2. Todas as informações para ligação ao hardware estão no próprio programa. O segundo código ascende e apaga 02 leds no HC12-receptor (simulando a lâmpadas de uma casa) com apenas dois botões que são acionados no HC12-transmissor, que imprime o estado das lâmpadas no LCD-I2C. O grande diferencial deste projeto á a comunicação de confirmação mantida entre os módulos,de forma que, além de atuar (ascendo ou apagando), os módulos RFs emitem confirmação uma ao outro de que receberam a ordem para executar alguma ação. Todas as informações para ligação ao hardware estão no próprio programa. O que ainda ainda não consegui, e neste ponto gostaria de alguma ajuda, é unir os dois códigos de forma que: em repouso, no LCD fique registrado continuamente a temperatura (c/ backlight apagado p/ economizar) e quando os botões forem acionados, as mensagens sobre a iluminação seja impressa por dois segundos no LCD (sobre escrevendo a temperatura) , retornando logo após ao registro contínuo da temperatura. Talvez eu não esteja compreendendo por completo a comunicação serial e por isso não tive exito em juntar os dois programas. 1) Transmissor Temperatura HC12/LM35: //Transmissor de temperatura com LM35 HC12. // Autor: Odair José Gomes //LIGAÇÕES LM35: //https://portal.vidadesilicio.com.br/lm35-medindo-temperatura-com-arduino/ const int LM35 = A0; // Define o pino analogico para leitura do LM35. float temperatura; // Variável que armazenará a temperatura medida após a conversão. #include <SoftwareSerial.h> // biblioteca SoftwareSerial (nativa arduino). SoftwareSerial mySerial(2, 3); //RX, TX criado pela biblioteca SoftwareSerial. void setup() { // configurações iniciais Serial.begin(9600); // inicializa a comunicação serial. mySerial.begin(9600); // inicializa Serial do HC12. } void loop() { // laço de repetição temperatura = (float(analogRead(LM35))*5/(1023))/0.01; // converte a leitura pino A0 p/ Cº e armazena na variavel. Serial.println (temperatura, 1); // escreve a leitura convertida na serial do PC c/ 1 digito após a virgula. mySerial.write(analogRead(LM35)); // encaminha a leitura de A0 p/ o HC12 receptor. mySerial.flush(); // faz a limpesa da serial. delay(1000); // espera 1 segundo //FIM } 2) Receptor Temperatura HC12/LCD-I2C: //Receptor de temperatura com LM35 HC12. // Autor: Odair José Gomes //LCD 16x2 I2C: // http://www.arduinoecia.com.br/2014/12/modulo-i2c-display-16x2-arduino.html #include <SoftwareSerial.h> // biblioteca SoftwareSerial (nativa do arduino). SoftwareSerial mySerial(2, 3); //RX, TX criado pela biblioteca SoftwareSerial. #include <Wire.h> // biblioteca I2C p/ uso do modulo I2C com o LCD 16x2. #include <LiquidCrystal_I2C.h> // biblioteca LCD. LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE); // configuração LCD I2C. float temperatura; // Variável que armazenará a temperatura medida após a conversão. void setup() { Serial.begin(9600); // inicializa a comunicação serial do PC mySerial.begin(9600); // inicializa a comunicação serial do HC12. lcd.begin (16,2); // inicia o LCD 16 colunas/02 linhas. } void loop() { if(mySerial.available()>1){ // se houver dados no serial: temperatura = (float(mySerial.read ())*5/(1023))/0.01; // converte a leitura pino A0 p/ Cº e armazena na variavel. lcd.setCursor(3,0); //posiciona o curosr de escrita lcd.print("TEMPERATURA "); // escreve a seguinte frase lcd.setCursor(6,1); //posiciona o cursor de escrita do LCD. lcd.print(temperatura,1); // escreve a leitura convertida no LCD c/ 1 digito após a virgula. mySerial.flush(); // faz a limpesa da serial. } delay(20);//uma pequena espera p/ melhorar a comunicação. } //FIM 1) Automação Iluminação Receptor Arduíno HC12/Leds: //Receiver HC12 com 02 Leds. //Autor Odair José Gomes // HC12: //http://www.arduinoecia.com.br/2016/11/modulo-wireless-hc-12-arduino.html #include <SoftwareSerial.h> // biblioteca SoftwareSerial (nativa do arduino). SoftwareSerial mySerial(2, 3); // RX, TX criados pela biblioteca SoftwareSerial. int ledPin13 = 13; //led no pino 13. int ledPin12 = 12; //led no pino 12. unsigned long last = millis(); //variavel que armazena "millis ()". int input; // variavel que armazena os dados enviados pelo receptor HC12. void setup() { // configurações iniciais. mySerial.begin(9600); // inicia o serial do HC12. Serial.begin (9600); // inicia o serial do PC. pinMode(ledPin13, OUTPUT); //pino led 13 como saida. pinMode(ledPin12, OUTPUT); //pino led 12 como saida. } void loop() { // laço de repetição. boolean ledState13 = digitalRead(ledPin13); //variavel que armazena o estado do led 13. boolean ledState12 = digitalRead(ledPin12); //variavel que armazena o estado do led 12. if(mySerial.available() > 1){ // se houver dados na serial: input = mySerial.parseInt(); //leia a entrada em série e converta em número inteiro (-32,768 a 32,767). if(millis() - last > 250){ //se o tempo agora for 250 milissegundos maior do que a última vez. if(ledState13 == 0 && input == 1111){ //se o LED 13 estiver desligado e o código recebido for 1111. digitalWrite(ledPin13, HIGH); // liga o led pino 13. mySerial.println(1222); //envie um código de confirmação ao HC12 transmissor. Neste caso, 1222. Serial.println ("led13 aceso"); // escreva a frase no serial do PC. }else if(ledState13 == 1 && input == 1111){//se o LED 13 estiver ligado e o código recebido for 1111. digitalWrite(ledPin13, LOW); // desliga o led pino 13. mySerial.println(1333); //envie um código de confirmação ao HC12 transmissor. Neste caso, 1333. Serial.println ("led13 apagado"); // escreva a frase no serial do PC. } if(ledState12 == 0 && input == 2111){ //se o LED 12 estiver desligado e o código recebido for 2111. digitalWrite(ledPin12, HIGH); // liga o led pino 12. mySerial.println(2222); //envie um código de confirmação ao HC12 transmissor. Neste caso, 2222. Serial.println ("led12 aceso"); // escreva a frase no serial do PC. }else if(ledState12 == 1 && input == 2111){//se o LED estiver ligado e o código recebido for 2111. digitalWrite(ledPin12, LOW); // desliga o led pino 12. mySerial.println(2333);//envie um código de confirmação ao HC12 transmissor. Neste caso, 2333. Serial.println ("led12 apagado"); // escreva a frase no serial do PC. } } mySerial.flush();// limpe o buffer serial para entradas indesejadas. last = millis();//reset millis (). } delay(20);//uma pequena pausa para uma melhor comunicação serial. } // FIM 2) Automação Iluminação Transmissor Arduíno HC12/LCD-I2C: //Sender HC12 com 02 Leds. //Autor: Odair Jose Gomes // LCD I2C: http://www.arduinoecia.com.br/2014/12/modulo-i2c-display-16x2-arduino.html // HC12: http://www.arduinoecia.com.br/2016/11/modulo-wireless-hc-12-arduino.html #include <SoftwareSerial.h> // biblioteca SoftwareSerial (nativa do arduino). #include <Wire.h> // biblioteca wire. #include <LiquidCrystal_I2C.h> //biblioteca LCD. LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE); // configuração LCD I2C. SoftwareSerial mySerial(2, 3); // RX, TX criados pela biblioteca SoftwareSerial. int buttonPin8 = 8; // botão no pino 8. int buttonPin9 = 9; // botão no pino 9. int input; // variavel que armazena os dados enviados pelo transmissor HC12. void setup() { // configurações inciais. pinMode(buttonPin8, INPUT); // pino 8 como entrada. pinMode(buttonPin9, INPUT); mySerial.begin(9600); // inicia o serial do HC12. Serial.begin(9600); // inicia o serial do PC. lcd.begin (16,2); // informa que o LCD é 16x2. lcd.setBacklight(LOW); // apaga a luz de fundo do LCD. } void loop() { // laço de repetição. int buttonState8 = digitalRead(buttonPin8); //variável que armazena o estado do botão pino 8. int buttonState9 = digitalRead(buttonPin9); if(buttonState8 == 1){ //se o botão8 foi acionado. mySerial.println(1111); //envie um código exclusivo para o HC12 receptor atuar. Neste caso, 1111. } if(buttonState9 == 1){ //se o botão9 foi acionado. mySerial.println(2111); //envie um código exclusivo para o HC12 receptor atuar. Neste caso 2111. } input = mySerial.parseInt(); //leia a entrada em série e converta em número inteiro (-32,768 a 32,767). if(input == 1222){ //se este código for recebido: Serial.println ("GARAGEM ACESA"); // escreve a palavra no seria do PC. lcd.setBacklight(HIGH); // acende a luz de fundo do LCD. lcd.setCursor(3,0); // movimenta o cursor do LCD. lcd.print("GARAGEM "); // escreve a apalavra no LCD. lcd.setCursor(0,1); // movimenta o cursor do LCD. lcd.print("LAMPADA ACESA "); // escreve a apalavra no LCD. delay (2000); // espera 2 segundos. lcd.clear(); //limpa o LCD. lcd.setBacklight(LOW); // apaga a luz de fundo do LCD. } else if(input == 1333){ Serial.println ("GARAGEM APAGADA"); lcd.setBacklight(HIGH); lcd.setCursor(3,0); lcd.print("GARAGEM "); lcd.setCursor(0,1); lcd.print("LAMPADA APAGADA "); delay (2000); lcd.clear(); lcd.setBacklight(LOW); } if(input == 2222){ Serial.println ("AREA DO FUNDO ACESA"); lcd.setBacklight(HIGH); lcd.setCursor(2,0); lcd.print("AREA DO FUNDO "); lcd.setCursor(2,1); lcd.print("LAMPADA ACESA "); delay (2000); lcd.clear(); lcd.setBacklight(LOW); } else if(input == 2333){ Serial.println ("AREA DO FUNDO APAGADA"); lcd.setBacklight(HIGH); lcd.setCursor(2,0); lcd.print("AREA DO FUNDO "); lcd.setCursor(1,1); lcd.print("LAMPADA APAGADA "); delay (2000); lcd.clear(); lcd.setBacklight(LOW); } delay(20);//espera 20 ms para melhorar a comunicação } //FIM
  2. Caro vtrx... Creio que o video que postei na página anterior corresponda exatamente ao que você pretende fazer. Como pode ser visto, os 74HC164N estão sendo usados para "chavear" o funcionamento dos transitores BCs, estes sim responsáveis pela alimentação direta dos pinos da matriz. Não posso garantir que não haverá algum tipo de perda com seis matrizes ou mais, mas pelo menos com três, que foi o máximo que testei até agora, não percebi qualquer diferença na luminosidade. Paulo, realmente seus argumentos estão absolutamente corretos em relação à superioridade do MAX7219. Não há o que se discutir. Entretanto e vergonhosamente:unsure:, devo confessar que minha, digamos ":unsure:insuficiência de conhecimentos para programações mais complexas:unsure:" me força a procurar soluções mais fáceis e o que encontrei de mais fácil e barato para a matriz de leds foi o 74HC164N. Mas acompanho de perto todas as suas poderações sobre este e outos temas e, caso surja um projeto interessante, também irei montar, independentemente dos componentes que forem usados. No mais estamos acompanhando e torcendo para que daqui surja um projeto que englobe a funções relógio, calendário e termômetro, além de possibilitar rolagens de frases programadas via note ou tablet (sonhar não é proibido ). Seria legal colocar um assim no carro para as crianças irem programando as frases durante uma viagem. Cordialmente. Technosat.
  3. A título de exemplo, segue o projetinho simples que montei e programei com o 16f84A, 74HC164N. Apesar de no vídeo parecer que oscila um pouco, é deficiência da filmagem pois a multiplexação neste caso ficou perfeita, sem oscilações. [ame=http://www.youtube.com/watch?v=phaH24n309A&feature=youtu.be]matriz led - YouTube[/ame] Technosat
  4. Para os que queiram se aventurar na confecção de um relógio matriz de led eis o exemplo: http://www.electronics-lab.com/projects/misc/013/ princípios da Programação Matriz Led: http://www.taringa.net/posts/ciencia-educacion/8653811/Matriz-de-led-8x8.html http://arduinoifsul.blogspot.com.br/2012/10/partir-de-agora-iremos-comecar-um.html#!/2012/10/partir-de-agora-iremos-comecar-um.html http://www.neoteo.com/matriz-de-led-8x8-parte-ii/#_methods=onPlusOne%2C_ready%2C_close%2C_open%2C_resizeMe%2C_renderstart%2Concircled&id=I0_1377733271022&parent=http%3A%2F%2Fwww.neoteo.com&pfname=&rpctoken=80619296 funcionamento Shifter Register (serial p/ paralela): [ame=http://www.youtube.com/watch?v=zR4iHK5DIlQ]Shift-Register (serial p/ paralela) - YouTube[/ame] funcionamento Shifter Register (paralela p/ serial): [ame=http://www.youtube.com/watch?NR=1&v=Xxbax0DRZoo&feature=fvwp]Shift-Register (paralela p/ serial) - YouTube[/ame] Technosat
  5. Salve vtrx.... Tenho feito minhas matrizes com o 74HC164 e gostei muito da simplicidade deste componente. Veja abaixo os exemplos (serialmatrix): http://isisproteus.blogspot.com.br/2012/09/isis-proteus.html#!/2012/09/isis-proteus.html mister nintendo , você tem o hardware proteus completo deste projeto, com todas as matrizes, compenetes e chaves e tudo mais para acerto de data e hora?
  6. Não sei se é o que você precisa mas segue um arquivo. É precido ter o proteus para rodar. Sinto não poder ajudar mais pois programo só em basic e por mero hobby. Mesmo não entendendo nada de C, fiz modificações neste projeto abaixo e escrevi o que eu queria. Não fui eu quem desenvolveu este projeto mas desenvolvi outro parecido em basic no Pic Simulator IDE no qual compreendi totalmente a técnica utilizada na matriz de Led. Boa sorte. http://www.4shared.com/zip/hrnQlYkQ/serialmatrix.html
  7. Saudações VTRX... A princípio, seria apenas uma matriz mesmo. Não é um projeto prático e sim treinamento básico. Preciso entender como funciona com apenas uma matriz para depois partir para algo mais complicado. Quanto à multiplexação, já conheço o conceito tentarei desenvolvê-lo na prática progressivamente. Obrigado por sua ajuda.
  8. Obrigado pela ajuda. Já tinha visto este site e até montei o circuito no Proteus mais ainda não obtive sucesso. Eu queria fazer sem CIs adicionais, só com o pic. A luta continua.
  9. Alguém saberia respoder a dúvida postada neste tópico? http://forum.clubedohardware.com.br/matriz-led-pic/1109455

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!