LEGO-EV3-Scanner de imagem
Scanner de imagens construído com o conjunto LEGO Mindstorms EV3 Education e uma roda extra. Inclui fonte do software Mindstorms EV3 e instruções de construção. Digitaliza papel de 8,5 polegadas de largura, mas pode ser adaptado para tamanhos de página semelhantes.
Entradas
- Botões de tijolo – Para controlar os menus de configuração
- Ultrassom – Detecta quando o papel é inserido
- Sensor de toque – Redefinir a posição do sensor de cor por colisão
- Sensor de luz – Digitalize pixels para criar imagem
Saída
- Imagem em escala de cinza de 44 por 32 pixels e 8 bits
- Arquivo CSV representativo de valores de dados de bitmap de 8 bits em escala de cinza
- Imagem pontilhada na tela
Peças
Esta construção requer peças de um conjunto LEGO MINDSTORMS EV3 e uma roda grande adicional, que pode ser obtida em outro conjunto igual ou em um conjunto de carro.
Detalhes de construção e sensor
- Este robô implementa duas configurações de engrenagem de força, uma para movimentar o sensor de luz no eixo horizontal, através de um monotrilho, a segunda para fornecer um mecanismo de enrolamento do papel que contém a imagem a ser digitalizada.
- Tanto o mecanismo de enrolamento quanto o monotrilho utilizam um motor grande.
- Um contrapeso é usado para alinhar a roda do monotrilho com a força normal exercida pela superfície do monotrilho.
- Perto da bobina está um sensor infravermelho que permite detectar quando o papel é inserido.
- Dois sensores de toque são colocados em cada canto do scanner. Eles são usados para detectar quando o monotrilho chega a uma esquina. Apenas o sensor do lado direito está em uso no momento.
Notas de software
O programa consiste em quatro etapas: UI, Digitalizar, Imprimir imagem, Salvar imagem. A UI é construída adaptando o paradigma MVC à programação sequencial de blocos. Permite n telas de configuração, com um valor a ser configurado por tela. As variáveis usadas posteriormente no programa correspondem a uma configuração cada.
Telas de configuração
- uiPrintScreen : bool – Se verdadeiro, uma imagem pontilhada de 1 bit será impressa na tela do EV3, para se parecer com a imagem em tons de cinza na RAM.
- uiSaveState: bool – Se verdadeiro, um arquivo CSV será gerado a partir dos dados na RAM. Este arquivo se assemelha a um arquivo bitmap e pode ser convertido em bitmap usando um programa externo como A-VEKT Image CSV Converter.
- XStartPos: numérico – Indica a posição inicial em polegadas, no eixo X.
- YStartPos: numérico – Indica a posição inicial em polegadas, no eixo Y.
- largura: numérico – Indica a largura da imagem em polegadas.
- altura: numérico – Indica a altura da imagem em polegadas.
Fase de digitalização
- Antes da digitalização, o usuário é solicitado a inserir o papel a ser digitalizado e a posição do sensor de luz é redefinida para a posição inicial.
- A digitalização consiste em mudar o movimento do sensor de imagem através do monotrilho e do papel através da bobina, para criar uma matriz de pontos digitalizados de forma independente.
- Ao digitalizar, uma linha é digitalizada da direita para a esquerda e a próxima é digitalizada da esquerda para a direita. Isso reduz o tempo de digitalização.
- Assim que a digitalização for concluída, o papel restante será enrolado na parte traseira do scanner.
Fase de impressão
- Esta fase é opcional e habilitada por padrão. Consiste em imprimir a imagem na tela.
- A imagem digitalizada contém dados em escala de cinza, mas a tela do EV3 é preta e branca de 1 bit. Para compensar, cada pixel digitalizado é transformado em um padrão de 4 por 4 pixels usando pontilhamento ordenado (Bayer), que é então impresso na tela.
Fase de Salvamento
- Esta fase é opcional.
- Como o bloco de arquivo do EV3 está limitado a salvar apenas caracteres imprimíveis, uma imagem bitmap não pode ser gerada programaticamente. Em vez disso, um arquivo CSV é usado.
- O CSV pode ser convertido em um bitmap usando “A-VEKT Image CSV Converter” com configuração de canal alfa de 8 bits.
- Ao criar o CSV, as linhas que foram digitalizadas ao contrário são reordenadas em um segundo array.
Melhorias
- A precisão do scanner poderia ser melhorada com um segundo conjunto, que poderia ser usado para criar um eixo x de dois trilhos em vez de um monotrilho.
- Devido às forças exercidas pelos cabos, o monotrilho às vezes fica instável, o que leva a um foco variável na captura de alguns pixels.
- O software pode ser melhorado. Eu o libero como estava quando parei de trabalhar nele.
- Não tenho planos de continuar desenvolvendo este projeto até que a LEGO lance uma versão do LEGO MINDSTORMS EV3 para sistemas operacionais Linux ou eu encontre outro motivo convincente para comprar meu próprio conjunto Mindstorms EV3.
Licenciamento e Direitos Autorais
- Os arquivos de origem são compartilhados sob a Licença Pública Geral GNU 2.0
- Imagens de instruções e conteúdos adicionais são compartilhados sob a Licença Creative Commons Atribuição 4.0 Internacional
- Os direitos autorais são compartilhados entre mim e a Universidade de Porto Rico em Arecibo.
Isenções de responsabilidade
- Desenvolvi isso por diversão como parte de uma aula de Introdução à Robótica da Universidade de Porto Rico em Arecibo.
- Este scanner é vagamente baseado na impressora do “The Unofficial LEGO MINDSTORMS NXT 2.0 Inventor's Guide”.
- LEGO, MINDSTORMS, MINDSTORMS EV3, MINDSTORMS NXT são marcas registradas e/ou direitos autorais do LEGO Group. O uso deles não implica qualquer afiliação ou endosso por parte deles.