Índice:
- Etapa 1: como funciona
- Etapa 2: Lista de materiais (BOM)
- Etapa 3: Projeto Mecânico
- Etapa 4: Eletrônica (opções de componentes)
- Etapa 5: Eletrônica (conexões)
- Etapa 6: Programação
- Etapa 7: Possíveis melhorias
- Etapa 8: Fatores limitantes
- Etapa 9: Créditos
Vídeo: Escaninho classificador - Detectar e classificar seu lixo: 9 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Você já viu alguém que não está reciclando ou que o está fazendo de maneira ruim?
Você já desejou uma máquina que reciclasse para você?
Continue lendo nosso projeto, você não se arrependerá!
Sorter bin é um projeto com a motivação clara de ajudar a reciclagem no mundo. Como é sabido, a falta de reciclagem está causando graves problemas em nosso planeta, como o desaparecimento de matérias-primas e a contaminação do mar, entre outros.
Por isso, nossa equipe decidiu desenvolver um projeto em pequena escala: uma caixa seletora capaz de separar o lixo em diferentes recipientes dependendo se o material é metálico ou não metálico. Em versões futuras, essa caixa de classificação poderá ser extrapolada para grande escala, permitindo a divisão do lixo em todos os tipos de materiais (madeira, plástico, metal, orgânico …).
Uma vez que o objetivo principal é distinguir entre metal e não metal, a caixa de classificação será equipada com sensores indutivos, mas também com sensores ultrassônicos para detectar se há algo na caixa. Além disso, a lixeira precisará de um movimento linear para mover o lixo para as duas caixas, portanto, um motor de passo é escolhido.
Nas próximas seções, este projeto será explicado passo a passo.
Etapa 1: como funciona
A caixa classificadora foi projetada para tornar o trabalho relativamente fácil para o usuário: o lixo deve ser introduzido pelo orifício que é colocado na placa superior, o botão amarelo deve ser pressionado e o processo começa, terminando com o lixo em um dos destinatários. Mas a questão agora é … como esse processo funciona internamente?
Uma vez iniciado o processo, o LED verde acende-se. Em seguida, os sensores ultrassônicos, fixados na placa superior por meio de um suporte, iniciam seu trabalho para determinar se há ou não um objeto dentro da caixa.
Se não houver nenhum objeto dentro da caixa, o LED vermelho acende e o verde apaga. Ao contrário, se houver um objeto, os sensores indutivos serão acionados para detectar se o objeto é metálico ou não metálico. Uma vez determinado o tipo de material, os LEDs vermelho e amarelo se acenderão e a caixa se moverá em uma direção ou na direção oposta dependendo do tipo de material, impulsionada pelo motor de passo.
Quando a caixa chegar ao final do traço e o objeto cair no recipiente correto, a caixa voltará à posição inicial. Finalmente, com a caixa na posição inicial, o LED amarelo se apagará. O classificador estará pronto para iniciar novamente com o mesmo procedimento. Este processo descrito nos últimos parágrafos também é mostrado na imagem do gráfico de fluxo de trabalho anexado na Etapa 6: Programação.
Etapa 2: Lista de materiais (BOM)
Partes mecânicas:
-
Peças compradas para a estrutura inferior
- Estrutura metálica [Link]
- Caixa cinza [link]
-
impressora 3d
PLA para todas as peças impressas (outros materiais também podem ser usados, como ABS)
-
Máquina de corte a laser
- MDF 3mm
- Plexiglass 4mm
- Conjunto de rolamentos lineares [Link]
- Rolamento Linear [Link]
- Eixo [Link]
- Suporte do eixo (x2) [Link]
Partes eletrônicas:
-
Motor
Linear Stepper Motor Nema 17 [Link]
- Bateria
Bateria 12 v [Link]
-
Sensores
- 2 Sensor ultrassônico HC-SR04 [Link]
- 2 sensores indutivos LJ30A3-15 [Link]
-
Microcontrolador
1 placa arduino UNO
-
Componentes adicionais
- Driver DRV8825
- 3 LEDs: vermelho, verde e laranja
- 1 botão
- Alguns fios de salto, fios e placas de solda
- Tábua de pão
- Cabo USB (conexão Arduino-PC)
- Capacitor: 100uF
Etapa 3: Projeto Mecânico
Nas fotos anteriores, todas as partes da montagem são mostradas.
Para o projeto mecânico, SolidWorks tem sido usado como um programa CAD. As diferentes partes do conjunto foram projetadas levando em consideração o método de fabricação com que se vão fabricar.
Peças cortadas a laser:
-
MDF 3mm
- Pilares
- Placa superior
- Suporte a sensores ultrassônicos
- Suporte a sensores indutivos
- Caixa de lixo
- Suporte de bateria
- Suporte para breadboard e Arduino
-
Plexiglass 4mm
Plataforma
Peças impressas em 3D:
- Base dos pilares
- Elemento de transmissão de movimento linear do motor de passo
- Motor de passo e suportes de rolamento
- Peças de fixação de paredes para a caixa de lixo
Para a fabricação de cada uma dessas peças, os arquivos. STEP devem ser importados para o formato correto, dependendo da máquina que será utilizada para tal. Nesse caso, os arquivos.dxf foram usados para a máquina de corte a laser e os arquivos.gcode para a impressora 3D (Ultimaker 2).
A montagem mecânica deste projeto pode ser encontrada no arquivo. STEP anexo nesta seção.
Etapa 4: Eletrônica (opções de componentes)
Nesta seção, uma breve descrição dos componentes eletrônicos usados e uma explicação das escolhas dos componentes serão feitas.
Placa Arduino UNO (como o microcontrolador):
Hardware e software de código aberto. Barato, facilmente disponível, fácil de codificar. Esta placa é compatível com todos os componentes que usamos e prontamente você encontrará vários tutoriais e fóruns muito úteis para aprender e resolver problemas.
Motor (Linear Stepper Motor Nema 17):
É um tipo de motor de passo que divide uma rotação completa em um determinado número de etapas. Como consequência, ele é controlado por meio de um certo número de etapas. É robusto e preciso e não precisa de nenhum sensor para controlar sua posição real. A missão do motor é controlar o movimento da caixa que contém o objeto lançado e jogá-lo na lixeira certa.
Para escolher o modelo, você fez alguns cálculos do torque máximo necessário adicionando um fator de segurança. Em relação aos resultados, compramos o modelo que cobre em grande parte o valor calculado.
Driver DRV8825:
Esta placa é usada para controlar um motor de passo bipolar. Ele tem um controle de corrente ajustável que permite definir a saída de corrente máxima com um potenciômetro, bem como seis resoluções de passo diferentes: passo completo, meio passo, 1/4 passo, 1/8 passo, 1/16- step e 1/32 step (finalmente usamos full-step, pois não encontramos nenhuma necessidade de passar para o microstepping, mas ele ainda pode ser usado para melhorar a qualidade do movimento).
Sensores ultrassônicos:
São um tipo de sensores acústicos que convertem um sinal elétrico em ultrassom e vice-versa. Eles usaram a resposta de eco de um sinal acústico inicialmente emitido para calcular a distância a um objeto. Nós os usamos para detectar se há um objeto na caixa ou não. Eles são fáceis de usar e fornecem uma medida precisa.
Embora a saída deste sensor seja um valor (distância), estabelecendo um limite para determinar se um objeto está presente ou não, transformamos
Sensores indutivos:
Com base na lei de Faraday, pertence à categoria de sensor eletrônico de proximidade sem contato. Colocamos no fundo da caixa móvel, sob a plataforma de acrílico que sustenta o objeto. Seu objetivo é diferenciar entre objetos metálicos e não metálicos, dando uma saída digital (0/1).
LEDs (verde, amarelo, vermelho):
Sua missão é se comunicar com o usuário:
- LED verde aceso: o robô está esperando por um objeto.
- LED vermelho aceso: máquina funcionando, não se pode lançar nenhum objeto.
- LED amarelo aceso: um objeto foi detectado.
Bateria de 12 V ou fonte de alimentação de 12 V + alimentação USB de 5 V:
Uma fonte de tensão é necessária para alimentar os sensores e o motor de passo. Uma fonte de alimentação de 5 V é necessária para alimentar o Arduino. Isso pode ser feito por meio da bateria de 12 V, mas é melhor ter uma fonte de alimentação separada de 5 V para o Arduino (como um cabo USB e um adaptador de telefone conectado a uma fonte de alimentação ou a um computador).
Problemas que encontramos:
-
Na detecção do sensor indutivo, não obtivemos a precisão desejada, pois às vezes um objeto metálico mal posicionado não é percebido. Isso se deve a 2 limitações:
- A área coberta pelos sensores dentro da plataforma quadrada representa menos de 50% dela (portanto, pequenos objetos não podem ser detectados). Para resolvê-lo, recomendamos o uso de 3 ou 4 sensores indutivos para garantir que mais de 70% da área seja coberta.
- A distância de detecção dos sensores é limitada a 15 mm, então nos vimos forçados a usar uma plataforma de plexiglass fino. Essa também pode ser outra limitação na detecção de objetos com formas estranhas.
- Detecção ultrassônica: novamente, objetos moldados de forma complexa apresentam problemas, pois o sinal emitido pelos sensores é mal refletido e retorna mais tarde do que deveria para o sensor.
- Bateria: temos alguns problemas para controlar a corrente fornecida pela bateria e para resolvê-los finalmente usamos uma fonte de alimentação. No entanto, outras soluções, como o uso de um diodo, podem ser executadas.
Etapa 5: Eletrônica (conexões)
Esta seção mostra a fiação dos diferentes componentes juntos. Ele também mostra a qual pino do Arduino cada componente está conectado.
Etapa 6: Programação
Esta seção explicará a lógica de programação por trás da máquina de classificação de bin.
O programa está dividido em 4 etapas, que são as seguintes:
- Inicializar sistema
- Verifique a presença de objetos
- Verifique o tipo de objeto presente
- Move Box
Para uma descrição detalhada de cada etapa, veja abaixo:
Etapa 1; inicializar o sistema
Painel de LED (3) - definir LED de calibração (vermelho) ALTO, LED Pronto (verde) BAIXO, Objeto presente (amarelo) BAIXO
Verifique se o motor de passo está na posição inicial
- Execute o teste do sensor ultrassônico para medir a distância do lado à parede da caixa
- Posição inicial == 0 >> Atualizar valores de LED de prontidão HIGH e LED de calibração BAIXO -> etapa 2
-
Posição inicial! = 0 >> valor de leitura digital dos sensores ultrassônicos e com base nos valores do sensor:
- Atualize o valor do LED em movimento do motor ALTO.
- Execute a caixa de movimentação até que o valor de ambos os sensores ultrassônicos seja <valor limite.
Atualizar o valor da posição inicial = 1 >> Atualizar o valor do LED Ready HIGH e o motor se mover para BAIXO e calibrar para BAIXO >> etapa 2
Passo 2
Verifique a presença de objetos
Executar detecção de objeto ultrassônico
- Objeto presente == 1 >> Atualizar valor do objeto presente LED ALTO >> Passo 3
- Objeto presente == 0 >> Não fazer nada
etapa 3
Verifique o tipo de objeto presente
Executar detecção de sensor indutivo
- inductiveState = 1 >> Etapa 4
- inductiveState = 0 >> Etapa 4
Passo 4
Move Box
Executar operação do motor
-
inductiveState == 1
Atualizar o LED de movimento do motor ALTO >> Fazer o motor se mover para a esquerda, (atualizar a posição inicial = 0), atrasar e voltar para a direita >> Etapa 1
-
inductiveState == 0
Atualize o LED de movimento do motor ALTO >> Faça o motor se mover para a direita (atualizar a posição inicial = 0), atrase e mova para a esquerda >> Etapa 1
Funções
Como pode ser visto pela lógica de programação, o programa funciona executando funções com um objetivo específico. Por exemplo, o primeiro passo é inicializar o sistema que contém a função "Verifique se o motor de passo está na posição inicial". A segunda etapa verifica a presença do objeto que em si é outra função (a função "Detecção ultrassônica de objetos"). E assim por diante.
Após a etapa 4, o programa foi totalmente executado e irá reverter para a etapa 1 antes de ser executado novamente.
As funções utilizadas no corpo principal são definidas a seguir.
Eles são respectivamente:
- inductiveTest ()
- moveBox (inductiveState)
- ultrasonicObjectDetection ()
// Verifique se o objeto é metálico ou não
bool inductiveTest () {if (digitalRead (inductiveSwitchRight) == 1 || digitalRead (inductiveSwitchLeft == 0)) {return true; else {return false; }} void moveBox (bool inductiveState) {// A caixa vai para a esquerda quando o metal é detectado e inductiveState = true if (inductiveState == 0) {stepper.moveTo (etapas); // posição aleatória para terminar para testar stepper.runToPosition (); atraso (1000); stepper.moveTo (0); stepper.runToPosition (); atraso (1000); } else if (inductiveState == 1) {stepper.moveTo (-steps); // posição aleatória para terminar para testar stepper.runToPosition (); atraso (1000); stepper.moveTo (0); // posição aleatória para terminar para testar stepper.runToPosition (); atraso (1000); }} boolean ultrasonicObjectDetection () {long duration1, distance1, durationTemp, distanceTemp, médiaDistance1, médiaDistanceTemp, médiaDistanceOlympian1; // Define o número de medições para fazer long distanceMax = 0; longa distânciaMin = 4000; longa distância total = 0; para (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal + = distanceTemp; } Serial.print ("Sensor1 maxDistance"); Serial.print (distanceMax); Serial.println ("mm"); Serial.print ("Sensor1 minDistance"); Serial.print (distanceMin); Serial.println ("mm"); // Pega a distância média das leituras averageDistance1 = distanceTotal / 10; Serial.print ("Sensor1 distância média1"); Serial.print (distância média1); Serial.println ("mm"); // Remova os valores mais altos e mais baixos das medições para evitar leituras errôneas averageDistanceTemp = distanceTotal - (distanceMax + distanceMin); médiaDistanceOlympian1 = médiaDistanceTemp / 8; Serial.print ("Sensor1 averageDistanceOlympian1"); Serial.print (averageDistanceOlympian1); Serial.println ("mm");
// Redefinir os valores de temperatura
distanceTotal = 0; distanceMax = 0; distanceMin = 4000; longa duração2, distância2, distância média2, distância médiaOlympian2; // Define o número de medições a serem tomadas para (int i = 0; i distanceMax) {distanceMax = distanceTemp; } if (distanceTemp <distanceMin) {distanceMin = distanceTemp; } distanceTotal + = distanceTemp; } Serial.print ("Sensor2 maxDistance"); Serial.print (distanceMax); Serial.println ("mm"); Serial.print ("Sensor2 minDistance"); Serial.print (distanceMin); Serial.println ("mm"); // Pega a distância média das leituras averageDistance2 = distanceTotal / 10; Serial.print ("Sensor2 distância média2"); Serial.print (distância média2); Serial.println ("mm"); // Remova os valores mais altos e mais baixos das medições para evitar leituras errôneas averageDistanceTemp = distanceTotal - (distanceMax + distanceMin); médiaDistanceOlympian2 = médiaDistanceTemp / 8; Serial.print ("Sensor2 averageDistanceOlympian2"); Serial.print (averageDistanceOlympian2); Serial.println ("mm"); // Redefine os valores de temp distanceTotal = 0; distanceMax = 0; distanceMin = 4000; if (distânciaMédiaOlympian1 + distânciaMédiaOlympian2 <emptyBoxDistance) {return true; } else {return false; }}
Corpo Principal
O corpo principal contém a mesma lógica explicada no início desta seção, mas escrita em código. O arquivo está disponível para download abaixo.
Aviso
Muitos testes foram realizados para encontrar as constantes: emptyBoxDistance, passos e velocidade máxima e aceleração na configuração.
Etapa 7: Possíveis melhorias
- Precisamos de feedback sobre a posição da caixa para garantir que ela esteja sempre na posição certa para pegar o objeto no início. Diferentes opções estão disponíveis para resolver o problema, mas uma mais fácil seria copiar o sistema que encontramos nas impressoras 3D usando um switch em uma das extremidades do caminho da caixa.
-Devido aos problemas que encontramos com a detecção ultrassônica, podemos buscar algumas alternativas para essa função: Laser KY-008 e Detector Laser (imagem), sensores capacitivos.
Etapa 8: Fatores limitantes
Este projeto funciona conforme descrito nas instruções, mas cuidados especiais devem ser tomados durante as seguintes etapas:
Calibração de sensores ultrassônicos
O ângulo em que os sensores ultrassônicos são colocados em relação ao objeto que devem detectar é de fundamental importância para o correto funcionamento do protótipo. Para este projeto, um ângulo de 12,5 ° ao normal foi escolhido para orientação dos sensores ultrassônicos, mas o melhor ângulo deve ser determinado experimentalmente, registrando as leituras de distância usando vários objetos.
Fonte de energia
A potência necessária para o driver do motor de passo DRV8825 é de 12 V e está entre 0,2 e 1 Amp. O arduino também pode ser alimentado por no máximo 12 V e 0,2 Amp usando a entrada do conector no Arduino. No entanto, cuidado especial deve ser tomado ao usar a mesma fonte de alimentação para o Arduino e o driver do motor de passo. Se for alimentado por uma tomada comum usando, por exemplo, uma fonte de alimentação do adaptador 12V / 2A AC / DC, deve haver um regulador de tensão e diodos no circuito antes que a energia seja alimentada no arduino e no driver do motor de passo.
Homing the Box
Embora este projeto use um motor de passo que em condições normais retorna à sua posição inicial com alta precisão, é uma boa prática ter um mecanismo de homing no caso de ocorrer um erro. O projeto como está não possui um mecanismo de homing, mas é bastante simples de implementar. Para isso, uma chave mecânica na posição inicial da caixa deve ser adicionada de forma que, quando a caixa acertar a chave, saiba que está em sua posição inicial.
Ajuste do driver de passo DRV8825
O driver de passo requer ajuste para funcionar com o motor de passo. Isso é feito experimentalmente girando o potenciômetro (parafuso) no chip DRV8825 para que a quantidade adequada de corrente seja fornecida ao motor. Então, girando o parafuso do potenciômetro levemente até que o motor atue de forma enxuta.
Etapa 9: Créditos
Este projeto foi realizado no âmbito de um curso de mecatrônica durante o ano letivo 2018-2019 para o Bruface Master na Université Libre de Bruxelles (ULB) - Vrije Universiteit Brussel (VUB).
Os autores são:
Maxime Decleire
Lidia Gomez
Markus Poder
Adriana Puentes
Narjisse Snoussi
Agradecimentos especiais ao nosso supervisor Albert de Beir que também nos ajudou ao longo do projeto.
Recomendado:
Faça um classificador de lixo de Pi com ML !: 8 etapas (com imagens)
Faça um Classificador Pi Trash com ML !: O projeto Trash Classifier, carinhosamente conhecido como " Para onde vai?! &Quot;, foi projetado para tornar o descarte de coisas mais rápido e confiável.Este projeto usa um modelo de aprendizado de máquina (ML) treinado em Lobe, amigável para iniciantes (sem código!)
Escaninho inteligente: 9 etapas
Smart Bin: por que Smart Bin? Todo mundo tem lixo. E muito provavelmente, todos já passaram pela dolorosa discussão sobre quem deveria levar o lixo para fora e quando. Recentemente, tivemos uma discussão dessas em nossas próprias casas e decidimos que era hora de acabar com esta madne
Escaninho inteligente: 5 etapas
Smart Bin: nosso Smart Bin permite que os usuários façam o check-in com um passe especial vinculado a uma conta pessoal. Depois de fazer o check-in, qualquer lixo jogado na lixeira concederá ao usuário um ponto. Esses pontos podem ser usados para comprar vários presentes na cidade de t
Classificador de lixo CPE 133: 14 etapas
Classificador de lixo CPE 133: Para nossa classe CPE 133 na Cal Poly, fomos instruídos a criar um projeto VHDL / Basys 3 que ajudasse o meio ambiente e era simples o suficiente para que pudéssemos implementá-lo com nosso novo conhecimento de design digital. A ideia por trás do nosso projeto que, em geral
Twitchy, seu amigo do lixo eletrônico: 11 etapas (com fotos)
Twitchy, seu amigo lixo eletrônico: Ele é mais limpo do que um hamster, tem mais personalidade do que a maioria dos répteis e é muito mais inteligente do que esse cachorro que eu costumava ter. Além disso, ele é feito de lixo e é muito divertido de construir. A população humana pode ser (e provavelmente deve ser) dividida em