Índice:

Fonte de água sem contato: 9 etapas (com fotos)
Fonte de água sem contato: 9 etapas (com fotos)
Anonim
Fonte de água sem contato
Fonte de água sem contato

No final do meu primeiro ano como aluno do MCT, fui incumbido de fazer um projeto que contivesse todas as habilidades que adquiri nos cursos ao longo do ano.

Eu estava procurando um projeto que verificasse todos os requisitos estabelecidos pelos meus professores e ao mesmo tempo fosse divertido para mim fazer. Ao procurar por um assunto, não pude deixar de me sentir inspirado pela Covid-19 (isso foi um pouco antes de ir para um surto mundial). Eu escolhi um bebedouro / dispensador de menos contato, pois ofereceria uma forma de beber água sem tocar em alguns botões antes que a água saia.

Este projeto usa um sensor de distância para detectar se um copo ou copo foi colocado sob a saída de água, a fonte irá então prosseguir com a saída de água por 60 segundos (100ml / minuto). Isso é para torná-lo mais consistente, pois detectar se o vidro foi puxado provou ser uma tarefa muito difícil / lenta, razão pela qual um cronômetro foi colocado no lugar. Depois que seu copo for enchido com 100ml de água você pode esperar 5 segundos e se o copo ainda estiver na frente do sensor de distância ele irá encher outro tempo (isto significa que também há um tempo limite de 5 segundos entre encher dois diferentes Itens).

Suprimentos

Componentes

- 1x RaspberryPi (usei a 4ª versão, mas versões anteriores podem funcionar bem) - 1x transistor S8050 ou 1x transistor PN2222 pode funcionar também - 1x fotoresistor - 1x HC-SR04 (sensor de distância ultrassônico) - 1x RFID-RC522- 3x diferente LEDs de cores (azul, amarelo, vermelho) - 1x LCD1602- 1x campainha ativa- 1x PCF8574- 1x MCP3008- 1x bomba de água (foi usada uma bomba peristáltica de 12v, link para este item)

- 1x fonte de alimentação DC (12v, 600mAh) - 1x power brick com 3 pontos - 3x breadboards (você provavelmente poderia usar menos) - T-cobbler para pinos GPIO RaspberryPi - cabo T-cobbler (para conexão entre pi e cobbler)

Materiais e ferramentas usados

- Uma broca com as seguintes brocas:

- 4mm (para pré-fazer furos para os parafusos) - 15mm (para fazer furos para o sensor de distância)

- Qualquer chave de fenda - 30 parafusos de 45mm de comprimento - 6 parafusos de 20mm - 2 dobradiças para a porta - Uma placa de MDF de cerca de 130cm por 80cm - Algumas limas

Etapa 1: montagem do circuito

Montagem do circuito
Montagem do circuito
Montagem do circuito
Montagem do circuito
Montagem do circuito
Montagem do circuito

Para o circuito temos 2 sensores, um sensor de distância e um fotorresistor. O sensor de distância é usado para detectar se um copo foi colocado ao alcance do bebedouro e opcionalmente adicionei um fotorresistor, este é usado para detectar se a caixa foi aberta por alguém que não deveria abri-la. Além disso, temos um leitor RFID que pode ser usado para autenticar um mecânico que precise abrir a caixa para reabastecer o reservatório de água ou para algum outro problema mecânico.

Para os elementos ativos temos o LCD1602, buzzer ativo e uma bomba peristáltica, o LCD é usado para exibir o status como se a caixa está aberta ou a bomba está funcionando bem como o endereço IP do dispositivo será mostrado, o buzzer é costumava fazer um som alarmante quando a caixa era aberta sem que alguém o autorizasse.

Eu adicionei a placa de ensaio e as visualizações esquemáticas do circuito abaixo.

Etapa 2: Configurando Nosso RaspberryPi

Para configurar o nosso RaspberryPi, vamos baixar o software de imagem do site do Raspberry, com ele você pode baixar a versão do Raspbian que deseja e criar a imagem do seu SDCARD para você. Após esta ferramenta ter feito seu trabalho, você pode abrir o SDCARD no Windows Explorer, você poderá ver a partição de inicialização do seu RaspberryPi. Aqui encontraremos um arquivo chamado cmdline.txt (não abra este arquivo no bloco de notas, abra-o no Bloco de notas ++ ou qualquer outro IDE). Adicionaremos ip = 169.254.10.1 ao final deste arquivo para ter certeza de que podemos conectar ao nosso dispositivo via ethernet (certifique-se de não adicionar nenhum ENTERS no final do seu arquivo ou você terá problemas).

Agora você pode colocar seu SDCARD no RaspberryPi e inicializá-lo, conectar o Pi ao seu computador e usar o Putty para conectar ao seu Pi por SSH. Eu uso o seguinte comando para me conectar ao meu Pi em vez de usar o Putty. "ssh [email protected]" isso pode expirar, então seja paciente e espere o Pi inicializar. Assim que for solicitada uma senha, preencheremos a senha padrão "raspberry". Certifique-se de alterar esta senha após o login para evitar que qualquer pessoa mal intencionada acesse seu Raspberry Pi.

Agora vamos configurar nosso Pi para fornecer a funcionalidade necessária para nosso código. Use "sudo raspi-config" para abrir o menu de configuração e aqui iremos para Opções de interface.

Aqui, alternaremos as seguintes opções para LIGADO: - SPI- I2C

Siga este guia para configurar uma conexão de internet sem fio em seu Pi, depois de fazer isso com sucesso, podemos instalar nossos pacotes necessários.

Pacotes: (execute os comandos na ordem em que são indicados aqui)

O seguinte para obter as atualizações mais recentes para nosso Pisudo apt update && apt upgrade -y

Instale nosso servidor MySQL e webserver- sudo apt install mariadb-server apache2

Estarei usando o MySQL Workbench para configurar o banco de dados posteriormente neste guia, se você não usar isso e preferir phpmyadmin, você pode instalá-lo com o seguinte comando, você está livre para usar qualquer outro cliente MySQL, contanto que você é capaz de importar o banco de dados adequadamente. sudo apt install phpmyadmin

Depois de fazer tudo isso, precisamos criar um usuário para nosso banco de dados. Use "sudo mysql -u root" para fazer login em seu servidor MySQL, aqui criaremos um usuário chamado db_admin com sua respectiva senha, mantenha esta senha anotada em algum lugar para mais tarde nas instruções. GRANT ALL PRIVILEGES ON *. * TO "db_admin" @ "%" IDENTIFICADO POR "yourPasswordHere" COM OPÇÃO DE CONCESSÃO;

Use o comando "\ q" para sair do terminal MySQL.

Pacotes Python: Ainda precisamos instalar alguns pacotes Python antes de continuar, execute o comando abaixo para ter certeza de que tudo está lá para uma experiência perfeita.

sudo pip3 install Flask Flask-Cors Flask-SocketIO gevent gevent-websocket greenlet spi SPI-Pyspidev

Bem como os seguintes pacotes de conexão do MySQL python, também apt install python3-mysql.connector -y

Se tudo deu certo, agora você pode visitar seu Pi em seu navegador com o seguinte endereço

Etapa 3: Configurando o back-end

Configurando o Backend
Configurando o Backend

Aqui vou explicar como você pode configurar o backend sozinho, primeiro baixe o arquivo rar abaixo, descompacte-o em algum diretório temporário. Conecte-se ao RaspberryPi com FileZilla ou WinSCP com as seguintes credenciais:

IP: 169.254.10.1 Usuário: piPassword: raspberry (se você alterou a senha, altere aqui também)

Em seguida, você pode prosseguir com a transferência dos arquivos descompactados para qualquer diretório que desejar no diretório inicial do usuário pi. Para simplificar, assumiremos nesta configuração que carregamos todos os nossos arquivos no diretório de documentos.

Mantenha seu programa de FTP aberto para a próxima etapa!

Agora abra seu prompt de comando novamente com sua conexão SSH porque vamos precisar fazer algumas mudanças no servidor web para que o front-end possa se comunicar com o backend. Vamos abrir o arquivo de configuração padrão do Apache2 e modificá-lo ligeiramente: sudo nano /etc/apache2/sites-available/000-default.conf

Adicione as seguintes linhas abaixo de DocumentRoot no arquivo de configuração que acabamos de abrir: ProxyPass / api / https://127.0.0.1:5000/api/ProxyPassReverse / api /

Você pode dar uma olhada na imagem anexada para um exemplo.

Etapa 4: configurar o front-end

Antes de transferir nossos arquivos, teremos que fazer algo antes de começar a transferir nossos arquivos de front-end. Abra seu prompt de comando com a conexão SSH que você fez anteriormente e use o comando abaixo para alternar para o usuário root do nosso RaspberryPi: "sudo su -"

Depois disso, podemos alterar a senha de nosso usuário root com o seguinte comando: "passwd" Isso solicitará que você insira uma nova senha. Depois de fazer isso, você pode voltar ao seu programa de FTP e fazer o login com suas credenciais de root:

IP: 169.254.10.1 Usuário: rootPassword:

Baixe o arquivo rar abaixo e descompacte-o em uma pasta temporária. Você pode mover esses arquivos para o seu RaspberryPi para o seguinte diretório / var / www / html /, depois de fazer isso, você pode visitar o frontend em http: / /169.254.10.1, você não pode interagir ainda porque o back-end ainda não está em execução. Vou mostrar a você mais tarde neste guia como fazer isso.

Etapa 5: importando o banco de dados para nosso projeto

Importando o Banco de Dados para Nosso Projeto
Importando o Banco de Dados para Nosso Projeto
Importando o Banco de Dados para Nosso Projeto
Importando o Banco de Dados para Nosso Projeto

Abra seu programa de gerenciamento de servidor MySQL favorito e conecte-se ao Raspberry Pi com as credenciais que criamos na Etapa 2.

Baixe o dump do banco de dados abaixo e importe-o como faria normalmente, MySQL workbench você iria em File> Open SQL Script e selecione o dump do banco de dados que você baixou. Em seguida, pressione CTRL + SHIFT + ENTER e o script SQL deve ser executado e a estrutura para o banco de dados deve ser criado.

Eu adicionei as credenciais que usei para o meu RaspberryPi como exemplo abaixo, bem como várias fotos da estrutura do Banco de Dados, você pode dar uma olhada e tentar ter uma ideia geral de como tudo funciona.

Etapa 6: Iniciando Nosso Projeto

Iniciando Nosso Projeto
Iniciando Nosso Projeto
Iniciando Nosso Projeto
Iniciando Nosso Projeto

Antes de iniciarmos nosso projeto, precisamos alterar as credenciais do banco de dados no arquivo config.py. Se você seguiu as instruções exatamente como este guia disse, você pode encontrá-las em /home/pi/Documents/Backend/src/config.py aqui você precisa alterar as credenciais da variável db_config para corresponder às que criamos anteriormente para nosso banco de dados. Eu adicionei um exemplo do que você verá neste arquivo abaixo.

Depois disso, você adicionará um arquivo.service. Este arquivo garantirá que nosso projeto seja iniciado quando o RaspberryPi for iniciado, certifique-se de alterar o diretório de onde instalou os arquivos de backend. Use o seguinte comando para criar o arquivo de serviço: sudo nano /etc/systemd/system/dispenser.service Isso criará um arquivo de serviço e copiará e cole o código abaixo neste arquivo.

[Unit] Description = Water DispenserAfter = mysql.service

[Serviço] Type = simpleRestart = alwaysRestartSec = 1User = piExecStart = / usr / bin / python3 /home/pi/Documents/Backend/index.py

[Instalar] WantedBy = multi-user.target

Modifique a linha onde diz /home/pi/Documents/Backend/index.py para onde você instalou seus arquivos de backend, se você não fizer isso corretamente, o projeto não será iniciado corretamente! Vou adicionar um arquivo de exemplo abaixo.

Depois de fazer isso e sair do editor de texto, podemos habilitar o serviço com os seguintes comandos: - sudo systemctl daemon-reload- sudo systemctl enable dispenser- sudo systemctl start dispenser

E como um extra, podemos executar: sudo systemctl status dispenser Isso mostrará algumas informações sobre nosso serviço, se ele está ativo ou não,…

Etapa 7: o caso

O caso
O caso
O caso
O caso
O caso
O caso
O caso
O caso

Parabéns, estamos quase lá, vou adicionar algumas fotos que vão mostrar com precisão as dimensões que usei para o meu projeto, usei placas de MDF de 18mm de espessura, você pode opcionalmente usar uma espessura diferente. Meu case pode ser usado como um guia para projetar o seu ou você pode recriar o que eu fiz. (Se você usar uma espessura diferente de MDF meus desenhos não permitirão mais que você faça meu desenho, certifique-se de adaptá-lo!) Os painéis que fiz: - 2 painéis de 32cm por 42cm (painéis laterais) - 1 painel de 24cm por 32 cm (placa inferior) - 2 painéis de 16 cm por 24 cm (placa frontal onde fica o LCD e placa vizinha) - 1 painel de 28 cm por 24 cm (placa do meio vista de frente) - 1 painel de 30 cm por 24 cm (placa superior)

Etapa 8: Admire o produto final

Admire o produto final
Admire o produto final
Admire o produto final
Admire o produto final

Você chegou ao fim e, a esta altura, espero que tenha conseguido tornar tudo isso realidade. Se você é apenas um transeunte lendo, também seja bem-vindo, agradeço a leitura até a última etapa!

Gastei muito sangue, suor e lágrimas neste projeto, então agradeceria se você deixasse um comentário, qualquer crítica sobre como melhorá-lo é bem-vinda!

Etapa 9: Os problemas

Eu colocaria o projeto em seu estado atual como um protótipo funcional que pode ver muito mais melhorias.

A base de código do back-end é estruturada de forma que uma relação mestre-escravo possa ser perfeitamente criada, onde uma fonte atuaria como a interface principal e todas as outras fontes enviariam dados e alterações sobre a api REST do mestre. Também há resquícios de um sistema de token de API no código, pois foi planejado para ser implementado, mas eliminado posteriormente devido a restrições de tempo.

Eu carreguei meu código para meu servidor Gitlab e lá você pode dar uma olhada no código como um todo:

Recomendado: