Índice:

SONIC LED FEEDBACK: 7 etapas (com fotos)
SONIC LED FEEDBACK: 7 etapas (com fotos)

Vídeo: SONIC LED FEEDBACK: 7 etapas (com fotos)

Vídeo: SONIC LED FEEDBACK: 7 etapas (com fotos)
Vídeo: Sonic 3D Blast - 50Hz Vs 60Hz - Upgrading the hardware 2024, Julho
Anonim
SONIC LED FEEDBACK
SONIC LED FEEDBACK
SONIC LED FEEDBACK
SONIC LED FEEDBACK
SONIC LED FEEDBACK
SONIC LED FEEDBACK

Oi de novo, Odeio que seu robô esbarre em tudo? Isso vai resolver o problema. Com 8 sensores sônicos isso parece complicado … mas na verdade eu fiz isso muito fácil. Eu tento postar projetos que ajudem você a aprender sobre o Arduino e mostrar um conceito 'fora da caixa'. Esta postagem irá ajudá-lo a entender a comutação 595, pró-minis como um sensor programável e o grande uso do feedback de led em tempo real. Se você gosta do Arduino como um 'copiar, colar e plug-in', pode simplesmente pular isso.

Gosto de usar pró-minis. Eles custam cerca de US $ 2,50, funcionam como um uno totalmente desenvolvido e a instalação de cabeçalhos os torna muito flexíveis. Usado como um sensor micro, você pode "fazer o que quiser" em vez do que um sensor comprado ditar. Com I2C usando apenas 2 fios, eles podem ser amarrados juntos em uma linha. Então, mova o MEGA, eu posso ter 4 minis executando 4 linhas de código separadas, tudo ao mesmo tempo, por apenas $ 10,00. Aqui eu uso um mini para estourar os sensores sônicos através de um 595 e mostrar a distância do led em tempo real. Em seguida, basta compartilhar 8 bits de dados com a placa-mãe. Isso tira a carga da placa-mãe e torna o código dela muito simples.

Há um problema com os sensores sônicos … sem feedback visual. Você nunca sabe se o sensor é apenas um peso morto ou está funcionando! Eu acredito que quem inventou 'BLINK' é mais esperto do que Einstine. Apenas UM conduzido e um mundo de informações é retransmitido pelo piscar. Portanto, um sensor sônico precisa de feedback em tempo real. Aqui, usei uma série de leds para monitorar cada sensor. Você não precisa deles, apenas faça os sensores sem os leds. Mas ter os leds no PCB é útil.

Etapa 1: FAZER PCB

FAZER PCB
FAZER PCB
FAZER PCB
FAZER PCB
FAZER PCB
FAZER PCB
FAZER PCB
FAZER PCB

faça o PCB e preencha. CUIDADO… Eu cometi um erro no PCB nas conexões de 4 pinos para os sensores sônicos serem conectados. O ECHO e o TRIGGER Vcc e os fundamentos iriam se conectar ao pcb. Não há espaço suficiente para os conectores, então acabei de fazer o PCB com pinagens. Portanto, você pode soldar um conector de fio ao PCB e conectá-lo aos sensores sônicos reais. Quanto aos leds, coloquei leds amarelos na parte interna e vermelhos na parte externa. isso ajuda a ver à distância se os sensores estão medindo corretamente.

Este é um dos POUCOS pcb 2side que já fiz. Eu prefiro fazer 2 jumpers de lado único e run. Mas para obter o display de led você precisa de pelo menos o pcb superior. Separei o layout no download.

O PCB é para um pro-mini com A4-A5 dentro do cabeçalho de borda. De qualquer forma, basta conectar o A4-A5 ao Master A4-A5. Não se esqueça do Vcc e do Grounds também.

Etapa 2: MUITOS ERROS

MUITOS ERROS
MUITOS ERROS

Agora, quanto aos meus erros … Eu tentei abrir os gatilhos de uma vez (todos amarrados) e isso meio que funcionou bem, mas algumas interações ocorreram. Portanto, agora todos os ECHOS vão para o micro (8) e os TRIGGERS são configurados por um 595. Mais três pinos (3). Quanto aos leds, a multiplexação não funciona. Você precisa de um tempo LIGADO completo para cada led. Isso significa que cada linha de 7 leds deve ter seu próprio 595. Depois de atualizar o 595, os leds permanecem acesos até a próxima atualização. Onde multiplexar as luzes led apenas por aquele décimo de segundo. Isso funciona bem com meus leitores e precisa de um micro dedicado. Sem tempo para escanear 8 sensores sônicos e medir distâncias. Eu tentei e consegui resultados muito ruins. Multiplexar os leds também significará uma grade de linha + coluna e isso significa cerca de 64+ passagens no PCB.

Usei apenas 7 saídas do 595 por causa da desordem no PCB. À distância, você não pode dizer se há 7 ou 8 leds apenas pelo movimento. Você pode ficar tentado a amarrar todos os leds a um único resistor e isso funciona, mas o brilho da matriz muda com a quantidade de leds que são leves. Portanto, um resistor por led é o melhor. Eu simplesmente amo o 595, mas se eles apenas movessem os pinos Vcc e 0-out ou fizessem um pino 18 com TODAS as saídas no mesmo lado … conectar todas as oito saídas seria tão fácil. Mas então não seria vendido por menos de 30 centavos.

Etapa 3: MONTAGEM DOS SENSORES

SENSORES DE MONTAGEM
SENSORES DE MONTAGEM
SENSORES DE MONTAGEM
SENSORES DE MONTAGEM
SENSORES DE MONTAGEM
SENSORES DE MONTAGEM
SENSORES DE MONTAGEM
SENSORES DE MONTAGEM

Cole os sensores sônicos na tampa do café. o conector macho precisa ser dobrado para dentro em cada sensor. Isso funciona melhor se você dobrar um pino de cada vez. Usei fita de espuma de 2 lados para diminuir a vibração. Meus sensores estão muito próximos e precisam de um espaço de 1/4 de polegada para corresponder melhor ao PCB. Já usei sensores sônicos antes e às vezes um deles não consegue medir com precisão e você precisa manter isso em mente. Portanto, não cole todos eles permanentemente.

Também ajuda a fazer um teste rápido à distância em cada um antes de usá-los. Recebo cerca de um sensor com uma leitura ruim em um lote de 20. Nada mal para o preço que paguei.

Etapa 4: ARAME DURO

FIO RÍGIDO
FIO RÍGIDO

Achei que haveria espaço para conectores e plugues do PC para o

pinos sônicos, mas fiquei sem espaço. Então eu conectei a extremidade do pcb e apenas fiz os fios de eco e gatilho com conectores fêmea (8ea). Amarrei os aterramentos 8ea Vcc e 8ea dos sensores juntos, então isso fez apenas 2 conexões ao PCB para eles.

Com 8 sensores e 8 595s, um uno ou pro-mini NÃO PODE ligar isso. Deve haver uma fonte regulada de 5v como parte deste projeto. Meu robô tem um simples 7805 @ 1amp das baterias. Isso se conecta a todos os Vcc de 5v para todos os dispositivos. o 7805 cai cerca de um volt, então você precisa de pelo menos 6,5 volts para alimentá-lo. Isso é 2 baterias de lítio em 3.3v. Meu robô tem nicads antigos de pacotes de perfuração usados e 8 nicads operam o motor de 12v com engrenagem da China típico no chassi do tipo tanque de US $ 20.

Etapa 5: BAIXAR ESBOÇO SONIC

BAIXAR ESBOÇO SONIC
BAIXAR ESBOÇO SONIC

Baixe o esboço e instale. Existem muitas maneiras de falar com

outro uno mas gosto de I2c. a confusão é endereçamento e mestre / escravo. Como acontece com a maioria dos sensores (pense no segundo mini como um sensor), você direciona o sensor e pede uma quantidade x de bytes. mesma coisa aqui. No segundo mini, você reserva uma quantidade x de bytes que deseja enviar. A confusão é que os nomes não importam. Isso só o ajuda a lembrar se você compartilhar os nomes. Portanto, no esboço, envio as 8 medições de distância sônica em cm como sendR1, sendR2, sendR3, sendR4, sendL1, sendL2, sendL3, sendL4. O mestre obtém apenas 8 bytes de dados e você pode chamar esses bytes da maneira que quiser. Eu os li como gotR1, gotR2, got … A ordem de envio dos bytes é a mesma. Portanto, byte A, B, C … não pense que alterar o nome irá fornecer dados diferentes. E o outro problema, você só pode receber dados que devem ser enviados. Portanto, se você quiser outros dados, deve alterar AMBOS o mestre e o escravo.

Etapa 6: COMUNICAÇÃO

COMUNICAÇÃO
COMUNICAÇÃO

Você pode pular isso se souber como configurar 2 Uno para se comunicarem. Eu tenho algumas informações no final. Para facilitar, chamarei o uno da base do robô M1 e o sensor sônico de S2. Conecte Vcc, aterramento, A4, A5 entre si.

No esboço do S2, ele começa com #include

Em seguida, crie os 8 bytes a serem enviados. byte R1, byte R2, byte L1 etc. Uno é um micro de 8 bits, então eles enviam 1 byte por vez usando 'byte' em vez de 'int' está correto.

Em 'setup ()' adicione 'Wire.begin (endereço)' isso diz ao I2c qual dispositivo é esse. O endereço é geralmente qualquer número que você quiser entre 4 - 200. o tamanho de um byte. Aqui usei o número 10. Então para falar com esse sensor S2 o mestre deve ligar para Wire.requestFrom (10, 8). Este é o endereço 10 e o 8 é a quantidade de bytes desejados. Também em 'setup ()' adicione Wire.onRequest (isr anyName). Quando o M1 chama a solicitação, o sensor S2 reage com a interrupção. Isso apenas chama a função anyName. Portanto, essa função anyName precisa ser criada. Observe o esboço e veja a função 'sendThis ()'. É aqui que os bytes são realmente enviados para o M1. Os bytes só vão e NÃO os nomes e na ordem de envio. É aqui que começa o tamanho e a quantidade de dados a enviar. Nesse formato fácil de bytes, o envio e o recebimento devem corresponder. Aqui, 8 bytes enviados e 8 bytes recebidos. Uma observação aqui é que chamar uma função requer o (). Como delay (), millis (), Serial.print (). Ao usar um ISR (rotina de serviço de interrupção), a chamada da função elimina o (). Portanto, Wire.onRequest (sendThis) não Wire.onRequest (sendThis ()).

A confusão que eu tinha era a coisa de mestre / escravo. No começo eu pensei que o mestre era SEMPRE o mestre. Mas, dentro do esboço, você pode alternar mestre / escravo para solicitar de outros micros ou enviar para outros micros. Contanto que você tenha seguido o formato básico descrito acima. Lembre-se … você SOMENTE compartilha dados que foram atribuídos.

Dois pedaços de arrumação da parede. A interrupção isr interrompe apenas entre as linhas de esboço. Se você estiver travado em um loop 'while ou for', nada acontecerá até que o loop termine. Não é grande coisa, pois isso pode levar alguns microssegundos e os dados são antigos.

O outro problema é, 'dentro' de um micro, há um cálculo 100% livre de erros. Qualquer comunicação 'externa' (fios) está sujeita a erros. Há muitas maneiras de verificar se os dados entregues estão livres de erros e correspondem à fonte. A maneira mais fácil é com a soma de verificação. Basta somar os totais dos bytes de envio (valores reais) e enviar os totais e, na extremidade de recebimento, somar os totais e ver se eles correspondem. Se eles corresponderem, ou jogue fora o conjunto de dados se não corresponderem. Claro que isso envolve o envio de um valor inteiro e não bytes. Então, você apenas divide o inteiro no byte HI e no byte LO e envia como bytes separados. Em seguida, monte no receptor.

FÁCIL:

int x = 5696; (qualquer valor int válido, o máximo é 65k ou 32k negativo)

byte hi = x >> 8; (22)

byte lo = x; (64)

envie os bytes e combine na outra extremidade….

byte hi = Wire.read ();

byte lo = Wire.read ();

int newx = (hi << 8) + lo; (5696)

Etapa 7: ENCERRAMENTO

ENCERRAMENTO
ENCERRAMENTO
ENCERRAMENTO
ENCERRAMENTO
ENCERRAMENTO
ENCERRAMENTO
ENCERRAMENTO
ENCERRAMENTO

Para fechar, este sensor sônico fornece à placa-mãe dados brutos de distância em tempo real. Isso libera o micro e torna o esboço muito menos complicado. O micro agora pode tomar uma boa decisão de diminuir a velocidade, virar, parar ou reverter com base em dados confiáveis em vez de suposições aleatórias. Veja meu outro post sobre bluetooth IDE para fazer upload de esboços sem fios e ter que conectar seu robô o tempo todo para apenas uma mudança rápida em seu esboço. Obrigado por ver isso. oldmaninsc.

Recomendado: