Índice:

Mini estação meteorológica com Attiny85: 6 etapas (com fotos)
Mini estação meteorológica com Attiny85: 6 etapas (com fotos)

Vídeo: Mini estação meteorológica com Attiny85: 6 etapas (com fotos)

Vídeo: Mini estação meteorológica com Attiny85: 6 etapas (com fotos)
Vídeo: Regador Automático de plantas com sensor de umidade e arduino 2024, Julho
Anonim
Mini estação meteorológica com Attiny85
Mini estação meteorológica com Attiny85
Mini estação meteorológica com Attiny85
Mini estação meteorológica com Attiny85
Mini estação meteorológica com Attiny85
Mini estação meteorológica com Attiny85

Em um recente instrutível Indigod0g descreveu uma mini estação meteorológica que funciona muito bem, usando dois Arduinos. Talvez nem todo mundo queira sacrificar 2 Arduinos para obter leituras de umidade e temperatura e eu comentei que deveria ser possível fazer uma função semelhante com dois Attiny85's. Acho que falar é fácil, então é melhor eu colocar meu dinheiro onde minha boca está.

Na verdade, se eu combinar dois instructables anteriores, escrevi:

Interface LCD de 2 fios para Arduino ou Attiny e recebimento e envio de dados entre Attiny85 (Arduino IDE 1.06), então a maior parte do trabalho já está feita. Só preciso adaptar um pouco o software.

Eu escolhi uma solução de lcd de dois fios com um registro de deslocamento, em vez de um LCD I2C porque no Attiny o registro de deslocamento é mais fácil de implementar do que o barramento I2C. No entanto … se você, por exemplo, quiser ler um sensor de pressão BMP180 ou BMP085, você precisa de I2C para isso de qualquer maneira, então você também pode usar um LCD I2C também. TinyWireM é uma boa biblioteca para I2C em um Attiny (mas requer espaço extra).

BOM O transmissor: DHT11 Attiny85 resistor de 10 k módulo transmissor de 433 MHz

O receptor Attiny85 10k resistor 433 MHz módulo receptor

O display 74LS164 shift register 1N4148 diodo resistor 2x1k resistor variável 1x1k e display LCD 2x16

Etapa 1: Mini estação meteorológica com Attiny85: o transmissor

Mini estação meteorológica com Attiny85: o transmissor
Mini estação meteorológica com Attiny85: o transmissor
Mini estação meteorológica com Attiny85: o transmissor
Mini estação meteorológica com Attiny85: o transmissor
Mini estação meteorológica com Attiny85: o transmissor
Mini estação meteorológica com Attiny85: o transmissor
Mini estação meteorológica com Attiny85: o transmissor
Mini estação meteorológica com Attiny85: o transmissor

O transmissor é uma configuração muito básica do Attiny85 com um resistor pull up na linha de reset. Um módulo transmissor é conectado ao pino digital '0' e o pino de dados DHT11 é conectado ao pino digital 4. Conecte um fio de 17,2 cm como antena (para uma antena muito melhor, consulte a etapa 5). O software é o seguinte:

// funcionará no Attiny // RF433 = D0 pino 5

// DHT11 = D4 pino 3 // bibliotecas #include // De Rob Tillaart #include dht DHT11; #define DHT11PIN 4 #define TX_PIN 0 // pino onde seu transmissor está conectado // variáveis float h = 0; float t = 0; int transmit_t = 0; int transmitir_h = 0; int transmit_data = 0; void setup () {pinMode (1, INPUT); man.setupTransmit (TX_PIN, MAN_1200); } loop vazio () {int chk = DHT11.read11 (DHT11PIN); h = DHT11.umidade; t = DHT11.temperatura; // Eu sei, estou usando 3 variáveis inteiras aqui // onde poderia estar usando 1 // mas isso é apenas para que seja mais fácil seguir transmit_h = 100 * (int) h; transmit_t = (int) t; transmit_data = transmit_h + transmit_t; man.transmit (transmit_data); atraso (500); }

O software usa o código Manchester para enviar os dados. Ele lê o DHT11 e armazena a temperatura e a umidade em 2 flutuadores separados. Como o código Manchester não envia flutuantes, mas um inteiro, tenho várias opções: 1- dividir os flutuantes em dois inteiros cada e enviá-los2- enviar cada flutuante como um inteiro3- enviar os dois flutuantes como um inteiro Com a opção 1, preciso combinar os inteiros em flutuadores novamente no receptor e eu tenho que identificar qual inteiro é o quê, tornando o código longo windedWith opção 2 eu ainda preciso identificar qual inteiro é para umidade e qual é para temperatura. Eu não posso ir pela sequência sozinho no caso de um inteiro ser perdido na transmissão, então eu precisaria enviar um identificador anexado ao inteiro. Com a opção 3, posso enviar apenas um inteiro. Obviamente, isso torna as leituras um pouco menos precisas - dentro de 1 grau - e não se pode enviar temperaturas abaixo de zero, mas é apenas um código simples e existem maneiras de contornar isso. Por enquanto é apenas sobre o princípio. Então o que eu faço é transformar os flutuadores em inteiros e multiplicar a umidade por 100. Em seguida, adiciono a temperatura à umidade multiplicada. Dado o fato de que a umidade nunca será de 100%, O número máximo que receberei é 9900. Dado o fato de que a temperatura também não estará acima de 100 graus, o número máximo será 99, portanto, o número mais alto que enviarei é 9999 e é fácil de separar no lado do receptor. meu cálculo em que uso 3 inteiros é exagero, pois poderia ser feito facilmente com 1 variável. Eu só queria tornar o código mais fácil de seguir. O código agora é compilado como:

Tamanho do esboço binário: 2, 836 bytes (de um máximo de 8, 192 bytes) para que caiba em um Attiny 45 ou 85 NOTA que a biblioteca dht.h que uso é a de Rob Tillaart. Essa biblioteca também é adequada para um DHT22. Estou usando a versão 1.08. No entanto, o Attiny85 pode ter problemas ao ler um DHT22 com versões anteriores da biblioteca. Foi confirmado para mim que o 1.08 e o 1.14 - embora funcionem em um Arduino normal - têm problemas para ler um DHT22 no Attiny85. Se você quiser usar um DHT22 no Attiny85, use a versão 1.20 desta biblioteca. Tudo tem que ver com o tempo. A versão 1.20 da biblioteca possui uma leitura mais rápida. (Obrigado pela experiência do usuário Jeroen)

Etapa 2: Mini estação meteorológica com Attiny85: o receptor

Mini estação meteorológica com Attiny85: o receptor
Mini estação meteorológica com Attiny85: o receptor

Mais uma vez, o Attiny85 é usado em uma configuração básica com o pino de Reset elevado com um resistor de 10 k. O módulo receptor é conectado ao pino digital 1 (pino 6 no chip). O LCD é conectado aos pinos digitais 0 e dois. Conecte um fio de 17,2 cm como antena. O código é o seguinte:

#incluir

#include LiquidCrystal_SR lcd (0, 2, TWO_WIRE); # define RX_PIN 1 // = pino físico 6 void setup () {lcd.begin (16, 2); lcd.home (); man.setupReceive (RX_PIN, MAN_1200); man.beginReceive (); } void loop () {if (man.receiveComplete ()) {uint16_t m = man.getMessage (); man.beginReceive (); lcd.print ("Úmido:"); lcd.print (m / 100); lcd.setCursor (0, 1); lcd.print ("Temp"); lcd.print (m% 100); }}

O código é bastante simples: o inteiro transmitido é recebido e armazenado na variável 'm'. Ele é dividido por 100 para fornecer a umidade e o módulo de 100 fornece a temperatura. Portanto, suponha que o número inteiro recebido foi 33253325/100 = 333325% 100 = 25 Este código é compilado como 3380 bytes e, portanto, só pode ser usado com attiny85, não com 45

Etapa 3: Mini estação meteorológica com Attiny85 / 45: a tela

Mini estação meteorológica com Attiny85 / 45: o visor
Mini estação meteorológica com Attiny85 / 45: o visor
Mini estação meteorológica com Attiny85 / 45: o visor
Mini estação meteorológica com Attiny85 / 45: o visor

Para o display, é melhor que eu me refira ao meu instrutível em um display de dois fios. Em suma, um display 16x2 comum usa um shiftregister para que possa operar com dois pinos digitais. Claro, se você preferir usar um display I2C pronto, isto é possível também, mas então você precisa implementar um protocolo I2C no Attiny. O protocolo Tinywire pode fazer isso. Embora algumas fontes digam que isso espera um clock de 1 Mhz, eu não tive nenhum problema (em outro projeto) para usá-lo em 8Mhz. De qualquer forma, eu simplesmente não me incomodei aqui e usei um registrador de deslocamento.

Etapa 4: Mini estação meteorológica com Attiny85 / 45: possibilidades / conclusões

Mini estação meteorológica com Attiny85 / 45: possibilidades / conclusões
Mini estação meteorológica com Attiny85 / 45: possibilidades / conclusões
Mini estação meteorológica com Attiny85 / 45: possibilidades / conclusões
Mini estação meteorológica com Attiny85 / 45: possibilidades / conclusões
Mini estação meteorológica com Attiny85 / 45: possibilidades / conclusões
Mini estação meteorológica com Attiny85 / 45: possibilidades / conclusões

Como disse, fiz isso instrutível para mostrar que se pode fazer uma mini estação meteorológica com duas attiny85's (mesmo com uma attiny85 + 1 attiny45). Ela só envia umidade e temperatura, usando um DHT11. Porém, o Attiny tem 5 pinos digitais para usar, 6 mesmo com alguns truques. Portanto, é possível enviar dados de mais sensores. No meu projeto - como visto nas fotos no stripboard e em um PCB profissional (OSHPark) - eu envio / recebo dados de um DHT11, de um LDR e de um PIR, todos usando dois attiny85's A limitação em usar um attiny85 como receptor é a apresentação dos dados em um estilo chamativo. Como a memória é limitada: textos como 'Temperatura, Umidade, nível de luz, assunto se aproximando' preencherão muito rápido espaço valioso na memória. No entanto, não há razão para usar dois Arduino apenas para enviar / receber temperatura e umidade. Além disso, é possível fazer o transmissor dormir e apenas acordar para enviar dados, digamos a cada 10 minutos e, assim, alimentá-lo de uma célula-botão. Obviamente, não apenas dados de temperatura ou umidade podem ser enviados, mas pode-se ter uma série de pequenos transmissores enviando leituras de umidade do solo também, ou adicionar um anemômetro ou medidor de chuva

Etapa 5: Mini estação meteorológica: a antena

Mini estação meteorológica: a antena
Mini estação meteorológica: a antena

A antena é uma parte importante de qualquer configuração de 433Mhz. Eu experimentei com a antena 'haste' padrão de 17,2 cm e tive um breve flerte com uma antena em espiral. O que parecia funcionar melhor é uma antena carregada em espiral que é fácil de fazer. O design é de Ben Schueler e aparentemente foi publicado na revista 'Elektor'. Um PDF com a descrição desta 'Antena de 433 MHz resfriada a ar' é fácil de seguir. (O link desapareceu, verifique aqui)

Etapa 6: Adicionando um BMP180

Adicionando um BMP180
Adicionando um BMP180

Quer adicionar um sensor de pressão barométrica como o BMP180? verifique meu outro instrutível sobre isso.

Recomendado: