Índice:
- Suprimentos
- Etapa 1: Configurando seu RPi
- Etapa 2: MCP3008 + TMP36
- Etapa 3: Banco de dados
- Etapa 4: HNT11, para os meninos reais
- Etapa 5: Sensores de gás (apenas legendas)
- Etapa 6: O Shiftregister, 74HC595AG
- Etapa 7: Frontend, uma lição valiosa
- Etapa 8: o back-end
- Etapa 9: Defendendo o caso
- Etapa 10: Avaliação e Conclusão
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
Olá, sou um estudante da Bélgica e este é o meu primeiro grande projeto para o meu bacharelado! Este Instructable é sobre como fazer um medidor de velocidade do ar para salas fechadas, especialmente salas de aula!
Eu ouço você pensando por que esse projeto? Bem, tudo começou quando eu fui para o colégio. À tarde, após um bom almoço e um intervalo, as aulas recomeçam. Mas tem um problema, o professor se esqueceu de abrir a janela enquanto almoçávamos, então está quente, suado e você não consegue se concentrar porque está caindo no sono. Isso porque há muito CO2 no ar.
Meu projeto vai resolver isso e tornar todos os alunos mais concentrados durante as aulas.
Suprimentos
1 xRaspberry Pi 4 (€ 55)
1 x motor de passo com motorista (€ 5)
2 baterias de 12v 6800 mAh (2x € 20)
2 x módulo stepdown (2x € 5)
1 x 16x2 LCD (€ 1,5)
Sensores: 1x MQ8, 1x MQ4, 1x MQ7, 1x MQ135, 1x HNT11, 1x TMP36 (1 x € 23)
ICs: 1x MCP3008, 2x 74hc595AG (1x € 2,30, 2x € 0,40)
LEDs: 2x verdes, 2x vermelhos, 3x amarelos (encontrados em alguns hardwares antigos, normalmente € 0,01 cada)
Conector para as baterias (2 x € 0,35)
40 cabos conectores f para f (€ 1,80)
40 cabos conectores f para m (€ 1,80)
Cabos conectores de 20 m para m (€ 1,80)
2 x PCB para soldar (2x € 0,70)
Ferramentas:
Ferro de soldar (de preferência 60 Watt)
Lata para soldar
Folha de alumínio 50x 20
Invólucro (usei um antigo minicomputador)
Isso poderia facilmente ser algum MDF ou ideias próprias.
Etapa 1: Configurando seu RPi
Portanto, nosso coração, nosso cérebro e nossa alma estão neste produto. Ameace bem, porque pode prejudicá-lo de uma forma ou de outra. Estou usando um RPi 4B 4gb, outros modelos devem servir bem. Você poderia esperar um pouco mais de atraso nos modelos mais antigos.
Nós obtivemos o sistema operacional de nossa escola com alguns softwares pré-instalados, como phpMyAdmin.
Em primeiro lugar, certifique-se de que pode se conectar ao seu Raspberry Pi via ssh, pois precisaremos disso com bastante antecedência.
Portanto, primeiro devemos habilitar o barramento SPI, os pinos GPIO e desabilitar outros barramentos, não precisaremos deles.
Você pode fazer isso no menu raspi-config. Navegue até Interfaces e habilite GPIO e SPI normalmente não será necessário. Enquanto você estiver aqui, expanda seu armazenamento indo para avançado e então pressione Enter para expandir armazenamento.
Agora reinicie. Vamos precisar de algumas extensões para usar o VS Code em nosso pi, para rodar nosso servidor e banco de dados.
O processo de instalação do VS Code Extension pode ser encontrado aqui.
Agora vamos instalar as extensões para nosso servidor e banco de dados. Use o terminal e digite 'python install flask, flask-cors, mysql-python-connector, eventlet' espere até terminar.
Agora podemos começar com a realização do projeto.
Etapa 2: MCP3008 + TMP36
Portanto, temos 6 sensores: 4 gás, 1 umidade + temperatura e 1 sensor de temperatura. É uma tarefa real fazer com que todos funcionem. Todos os sensores são sensores analógicos, portanto, precisamos converter o sinal analógico em um sinal digital. Isso porque o RPi (Rasberry Pi) só pode "entender" sinais digitais. Para mais informações clique aqui.
Para concluir essa tarefa, você precisará de um MCP3008, isso fará o trabalho muito bem!
Possui 16 portas, contando do topo (a bolinha) para a esquerda, para baixo, do outro lado e para cima. Pin1-8 são as entradas para o sinal analógico de nossos sensores. O pino 9 do outro lado é um GND que precisa ser conectado ao GND do circuito completo, caso contrário, não funcionaria. Os pinos 10-13 precisam ser conectados com mais cuidado, pois isso transmitirá dados de e para o RPi. O pino 14 é outro GND e os pinos 15 e 16 são os VCCs; eles devem ser conectados ao lado positivo do circuito.
Este é o layout para a fiação:
- MCP3008 VDD para 3,3 V externo MCP3008 VREF para 3,3 V externo
- MCP3008 AGND para GND externo
- MCP3008 DGND para externalGND
- MCP3008 CLK para Raspberry Pi pino 18
- MCP3008 DOUT para Raspberry Pi pino 23
- MCP3008 DIN para Raspberry Pi pino 24
- MCP3008 CS / SHDN para Raspberry Pi pino 25
Este também é um bom momento para conectar o GND do RPI ao GND externo. Isso fará com que a eletricidade flua do RPi.
Veja como conectá-lo da maneira certa.
Certifique-se de conectar da maneira certa, caso contrário, você pode causar curto-circuito em tudo!
A primeira parte do código deve ser colocada aqui.
Você pode copiar meu código do github do meu projeto em models. Analog_Digital.
Na parte inferior da página, você encontrará o código-fonte para fazê-lo funcionar.
Mas precisamos de nosso primeiro sensor, para que possamos testar.
Precisamos testar nosso sensor para ver se funciona. Conecte uma fonte de alimentação de 3,3 V ou 5 V ao lado positivo do TMP36. Não se esqueça de conectá-lo ao GND também, talvez seja algo estúpido de acontecer, mas acredite em mim. Essa é a realidade;). Você pode testar com seu multímetro a saída do sensor - este é o pino do meio. Com esta equação simples, você pode verificar a temperatura em ° C. ((milivolts * tensão de entrada) -500) / 10 e voila donne! Tchau! Bem, não hahah, precisamos do MCP3008. Conecte o pino analógico do seu TMP36 ao primeiro pino de entrada do MCP3008. Este é o pino 0.
Você pode usar o código de exemplo na parte inferior para esta classe MCP. Ou algo que você encontrará online fará o trabalho bem.
Etapa 3: Banco de dados
Agora que podemos ler nosso primeiro sensor, precisamos registrá-lo em um banco de dados. Esta é a memória do nosso cérebro. Projetei este banco de dados para ser expansível e facilmente modificável para alterações futuras.
Portanto, primeiro precisamos pensar o que obteremos como entradas e se precisamos registrar coisas específicas, como status de certos objetos.
Minha resposta seria: entrada de 6 sensores então precisamos fazer uma tabela de sensores, com esses sensores faremos valores. O que está vinculado a um valor? Para mim, é o status da janela, se está aberta ou fechada enquanto o sensor mede o valor. Mas a localização também é um fator para o meu valor, então vamos adicionar isso. A hora e a data de um valor também são importantes, por isso vou adicioná-los.
Para futura expansão, adicionei uma tabela de usuário.
Então, qual é a minha ideia quanto às tabelas: valores da tabela, endereço da mesa (vinculado ao quarto), sala da mesa (vinculado ao valor), janela da mesa (vinculado ao valor), sensor da tabela (vinculado ao valor) e uma mesa em estado selvagem para Comercial.
Quanto à vinculação das tabelas. Cada valor precisa de um sensor, uma janela, um valor para o sensor, um id para que possamos tornar o valor único, um carimbo de data / hora para quando o valor foi feito e, por último, não precisamos de uma sala, então isso é opcional, mas pode ser adicionado.
Então é assim que parece agora. Isso é o que estou usando para o resto do meu projeto.
Etapa 4: HNT11, para os meninos reais
Então, como não tínhamos permissão para usar qualquer tipo de biblioteca. Devemos programar tudo nós mesmos.
O HNT11 é um sistema de um fio, então isso significa que você tem um GND e VCC como qualquer outro dispositivo eletrônico, mas o pino 3 é um pino de entrada e saída. É meio estranho, mas aprendi muito com isso.
Conecte o VCC ao 3,3 V externo e o GND ao GND externo.
A folha de dados do DHT11 contém tudo para usar esses sensores.
Podemos determinar que um bit alto contém um bit baixo e um bit alto. Mas a duração da parte alta determina o bit de verdade. Se a parte alta for emitida por mais de 100 µs (normalmente 127 µs), o bit é alto. Se o bit for menor que 100 µs (normalmente em torno de 78 µs), o bit é baixo.
Quando o HNT11 for acionado, ele passará a emitir sinais. É sempre 41 bits. Começa com um pouco de início, isso não significa nada, então podemos pular este. Os primeiros 16 bits / 2 bytes são o inteiro e a parte flutuante da umidade. É o mesmo para os últimos 2 bytes, mas agora é para a temperatura.
Portanto, só precisamos calcular a duração de cada bit e pronto.
No código-fonte em DHT11, você encontrará meu método para resolver este problema.
Etapa 5: Sensores de gás (apenas legendas)
Então pensei no início do projeto que seria uma ótima ideia usar vários sensores. Pense antes de agir e comprar localmente, isso vai lhe poupar muitas horas de sono! Porque você pode começar mais cedo e isso fará com que você esteja mais disposto a ir em frente.
Portanto, tenho 4 sensores de gás. MQ135, MQ8, MQ4 e MQ7 todos esses sensores têm gases específicos que medem melhor. Mas todos eles são diferentes em sua configuração.
Então, primeiro usei a folha de dados, isso não me tornou nenhum desejador. Em seguida, procurei exemplos de código. O que encontrei foi uma biblioteca da Adafruit. Tentei replicar da melhor maneira possível. Funcionou com um dos quatro sensores.
Deixei descansar um pouco e voltei ao assunto.
O que fiz para que funcionasse com aquele sensor foi:
- Usei o datasheet para marcar pontos do gás que queria medir. Portanto, 1 ro / rs a 400ppm, 1,2 a 600ppm …
- Então coloquei todos aqueles pontos em excelência e extraí a fórmula da curva. Salvei isso no meu banco de dados.
- Na folha de dados também li a resistência normal e a resistência do ar limpo. Esses valores também foram salvos no banco de dados.
Eu derramei tudo isso em algum código, você pode encontrar isso como as últimas três funções na classe MCP3008. Mas isso ainda não acabou, infelizmente não tive tempo suficiente.
Etapa 6: O Shiftregister, 74HC595AG
Portanto, este é um IC. E faz algo especial, com este dispositivo é possível usar menos saídas GPIO para o mesmo sinal de saída. Usei isso para o LCD (tela de cristal líquido) e meus leds. Vou mostrar o endereço IP no LCD para que todos possam navegar até o site.
Os LEDs são escolhidos sabiamente 2 vermelhos, 3 amarelos e 2 verdes. Isso mostrará a qualquer momento a qualidade do ar na sala.
O shiftregister é um dispositivo de saída paralelo, portanto, não é possível emitir sinais diferentes em um período de tempo. Isso seria possível se programado de fora, mas não foi feito originalmente.
Como usar o IC? Bem, você tem 5 entradas e 9 saídas. 8 saídas lógicas para os 8 pinos e então o 9º pino para enviar os dados restantes para outro registrador de mudança.
Então conectamos o pino 16 ao VCC externo, o próximo pino é a primeira saída, então para o LCD vamos precisar dele. O pino 14 é a linha de dados, para onde enviaremos os dados. O 13º pino é o interruptor ligado, um sinal baixo habilita o IC e um sinal alto é necessário para desligá-lo. O pino 12 é o pino onde podemos determinar quando um bit foi enviado, quando você puxa este pino para baixo de modo que ele leia o status do sinal do pino 13 e o armazene em sua memória de 8 bits. O pino 11 é semelhante quando este pino é definido alto e baixo, ele envia os 8 bits para sua porta. E o último pino, o pino 10 é o reset mestre, este pino deve permanecer alto ou não funcionará. A última conexão é o pino 8 do GND, precisamos conectar este ao GND externo.
Então, agora conecte os alfinetes como quiser ao pi de framboesa. O jeito que eu fiz foi conectá-los o mais próximo possível um do outro para ter certeza de que sabia onde eles estavam.
Quando você obtém uma saída correta. Você pode soldar isso a um PCB com os LEDs. e resistores de 220 Ohm. Solde a saída do IC no led correspondente. Agora você deve ter algo assim.
Você pode encontrar meu código de teste aqui em Shiftregister. Quando você trabalha com um 74HC595N, não precisa do MR, portanto, pode deixá-lo desconectado.
O LCD é praticamente o mesmo. É bastante fácil de usar com o shiftregister porque a entrada para o LCD é exatamente a entrada para o shiftregister.
Para o LCD, há algum outro código para fazê-lo funcionar, mas é praticamente o mesmo que apenas o shifregister. Você pode encontrar o código de teste aqui em LCD.
Etapa 7: Frontend, uma lição valiosa
Então aqui vou vagar, esta seção de como você deve fazer isso. Isso é algo muito valioso que aprendi.
Faça o frontend antes do backend !!!!
Eu fiz o contrário. Fiz chamadas inúteis para meu banco de dados, passo muito tempo nisso.
Na página de destino, eu precisava da temperatura e umidade atuais e dos valores de todos os sensores de gás em um gráfico legal. Também preciso mostrar o endereço ip do RPi.
Na página dos sensores, preciso selecionar um sensor e o tempo de seleção. Escolhi pela seleção de um dia e depois o período daquele dia. Isso tornou muito mais fácil para mim, porque eu poderia controlar mais.
Na página final, a página de configurações é possível gerenciar certos valores, como gases perigosos ou perigosos saudáveis e níveis de temperatura. Você também pode fazer o RPi reinicializar se sentir a necessidade de fazê-lo.
Então, primeiro fiz um design para começar a trabalhar facilmente na parte de codificação. Fui progredindo gradualmente, uma coisa de cada vez. A tarefa era móvel primeiro, então vou me concentrar nisso primeiro. Em seguida, irei para as telas maiores.
Você pode encontrar minhas páginas, css e js em meu Github.
Etapa 8: o back-end
Essa parte é a parte que eu misturei com o frontend. Quando fiz algo para o front-end, fiz funcionar no back-end. Portanto, não precisaria de revisão posterior. Isso foi algo que eu não fiz em primeiro lugar e por isso perdi certamente 2 semanas de tempo. Estúpido de mim! Mas uma lição que eu alegremente levo para outros projetos.
Então, quando você fizer back-end, faça algo que você usará. Mas torne-o à prova de futuro tornando-o reutilizável e não codificado. Então, quando eu precisar dos últimos 50 valores do meu DHT11, verificarei se há valores sendo feitos? Sim, como faço para colocá-los no banco de dados. Como faço para retirá-los do banco de dados. Como faço para mostrar isso? Gráfico, gráfico ou apenas os dados simples? Em seguida, faço uma nova rota com os diferentes parâmetros e propriedades, como datas, nomes de sensores específicos ou o que irei chamar. Quer dizer, devo chamar todos os valores dos sensores MQ ou devo chamar todos os sensores com MQ em seu nome. Então eu coloquei um pouco de tratamento de erros. Quando a solicitação da chamada é o método certo, só então ele pode prosseguir, caso contrário, obterá um bom erro.
Também aqui estão os threads localizados, são peças de software que permitem a execução de código paralelo. Você pode executar as chamadas de sites, a função de criação de valor e o led + shiftregister. Essas funções são executadas de forma totalmente independente uma da outra.
Então, para os liderados. Fiz um valor inferior / saudável para o CO2. Esse valor veio de várias fontes governamentais. O valor saudável para as salas de aula é de menos de 600 ppm de CO2 por metro cúbico. O valor não saudável é tudo acima de 2.000 ppm. Então os LEDs fazem a ponte. Se o valor do sensor MQ4 for 1400, ele será calculado automaticamente em que nível de perigo se encontra. 2000 - 600 = 1400, portanto a faixa total é 1400/7 = 200. Então, quando o valor chega a 550, ele mostra um led verde. 750 mostra 2 leds verdes, 950 1 leds verdes 2 amarelos. E assim por diante.
Quando o valor ultrapassa o meio, a janela é aberta. Usei um motor de passo por causa do alto torque e precisão. E quando o valor ultrapassa 2.000, um pequeno alarme dispara. Isso é para alarmar as pessoas dentro da sala.
Também podemos detectar gases de fumaça quando houver um incêndio. Ele registra isso também. Quando ultrapassa um determinado valor, o alarme dispara e o LED pisca.
O LCD está lá principalmente para mostrar o endereço IP para que você possa navegar até o site.
Você pode encontrar tudo + código dentro do meu Githubin no app.py
Etapa 9: Defendendo o caso
Encontrei um pequeno gabinete de computador para todos os meus componentes.
Cortei uma folha de alumínio no tamanho certo. E fez alguns furos onde a folha iria descansar. Isso corresponde aos orifícios da placa-mãe.
Então eu vi como tudo caberia dentro da caixa. Eu coloquei tudo em ordem e comecei a me mover.
Quando fiquei satisfeito com a forma como iria funcionar, comecei a marcar os furos que precisava para os sensores, RPi, PCBs, módulos de potência e módulo de motor de passo. Os furos são para o impasse da placa de circuito impresso, isso abrirá espaço para que as partes metálicas não entrem em contato com a folha de alumínio. Ele também dá uma aparência bonita.
Peguei de cada IC ou outro dispositivo os cabos e amarrei-os juntos. Isso porque eu pude ver para que servem os cabos. Coloquei tudo bem em alguns espaçadores e usei algumas porcas e parafusos para segurar tudo bem no lugar.
Para alimentar tudo isso usei 2 baterias. Elas fornecem muita energia, mas ainda são baterias, portanto, se esgotarão com o tempo. Montei isso com um pouco de velcro. Usei velcro porque assim poderia facilmente substituir ou me livrar das baterias.
O motor de passo, LCD e LEDs sairão da parte superior do case. Então, coloquei cuidadosamente a tampa da caixa em cima, marquei os orifícios e os fiz com uma broca. Portanto, podemos ver tudo facilmente.
Quando o caso estiver concluído, precisamos fazer a fiação de tudo, aqui você pode encontrar o esquema de fiação.
Etapa 10: Avaliação e Conclusão
Portanto, este é / foi meu primeiro projeto.
Parece bom, eu acho.
Aprendi muitas coisas novas, aprendi o lado bom e o lado ruim do gerenciamento de projetos. Realmente foi uma lição valiosa. Eu aprendi que você não pode esperar, você realmente precisa continuar dando. Você precisa documentar cada movimento (quase todos os movimentos) e que você precisa fazer quando acabou de fazer.
Concentre-se em uma coisa de cada vez. Você quer a temperatura na sua tela? Faça isso, isso e aquilo. Não espere ou tente deixar passar. Não vai ajudar. E você vai perder um tempo tão precioso.
Além disso, 4 semanas parecem muito tempo. Mas menos é verdade. Isso simplesmente não está certo. Você tem apenas 4 semanas. Nas primeiras 2 semanas não há tanta pressão. 3 semanas terminando e as 4 semanas sem dormir à noite. É assim que você não deve fazer.
Eu era talvez um pouco ambicioso: eu era um case super pequeno, sem sensores fáceis de usar, baterias … Torne bem mais simples e depois torne-o cada vez mais difícil, só então você terá um bom protótipo / produto.
Recomendado:
Verificador de temperatura do ar de bolso DIY: 6 etapas
DIY Pocket Air Temperature Checker: Usaremos um visor Nokia 5110, módulo de temperatura digital e um Arduino Uno para fazer isso. Um conector de 9 V com fios, não um barril, também é necessário, junto com uma chave e fios. Pode ser necessário um ferro de solda, mas você também pode apenas torcer os fios
Verificador RPM para Mini Motor Dc: 11 etapas (com imagens)
RPM Checker para Mini Motor Dc: Revolução por minuto, resumidamente é uma velocidade de rotação expressa em rotações minuto. as ferramentas para medir RPM geralmente usam tacômetro. Ano passado achei interessante o projeto feito pela electro18, e é minha inspiração instrutível, ele ficou louco
Faça seu próprio verificador de resistência: 4 etapas
Faça seu próprio verificador de resistência: Coisas de que você precisa: Bateria antiga tipo EGO do tipo TwistO multímetro mais barato que você pode encontrar. (Você pode pegar um por US $ 6,99 na Harbor Freight. Eu ganhei o meu de graça com um cupom em meus anúncios semanais.) Ferramentas de solda (Eu só soldei 2 ou 3 vezes na minha vida. Eu
Verificador de obturador da câmera de filme Arduino: 4 etapas
Arduino Film Camera Shutter Checker: Recentemente comprei duas câmeras de filme usadas. Depois de limpá-los percebi que a velocidade do obturador poderia estar defasada por poeira, corrosão ou falta de óleo, então resolvi fazer algo para medir o tempo real de exposição de qualquer câmera, porque, por m
Verificador de bateria com temperatura e seleção de bateria: 23 etapas (com imagens)
Verificador de bateria com seleção de temperatura e bateria: Testador de capacidade da bateria. Com este dispositivo você pode verificar a capacidade de bateria 18650, ácido e outros (a maior bateria que testei é bateria de ácido 6v 4,2A). O resultado do teste é em miliamperes / horas. Eu crio este dispositivo porque preciso dele para verificar