Академический Документы
Профессиональный Документы
Культура Документы
Um cronógrafo balístico é um dispositivo que registra a velocidade de um projétil. Este cronógrafo em particular que
fiz foi testado apenas com uma pistola de paintball e é relativamente simples de fazer. Também implementei uma
função que pode registrar a taxa de incêndio na qual um dispositivo está disparando.
Nota:
Como você usará um dispositivo que dispara projéteis em alta velocidade para testar este cronógrafo, use sua
cabeça e seja esperto. Siga todos os procedimentos e diretrizes de segurança relacionados ao uso do marcador de
paintball ou outro dispositivo que você esteja usando para disparar projéteis.
Embora este cronógrafo seja bastante fácil de construir, é essencial um conhecimento básico de eletrônica e
habilidades de solda. O maior problema que tive com este projeto foi fabricar o PCB. Uso o método de transferência
de toner, mas isso não produz placas muito agradáveis quando a impressora a jato de laser precisa de um novo
cartucho. A prancha em si tem alguns pontos que estão sem caroço e não parecem muito limpos, mas faz o
trabalho. Se você não é capaz de fabricar seus próprios PCBs, pode-se usar apenas uma placa de perfurar e apontar
para apontar tudo junto.
A maioria desses componentes já tinha em mãos, mas estimaria o custo desse projeto em torno de US $ 30 a US $
40. Não mostrei nenhum dos componentes SMD (exceto o PIC) na foto abaixo.
Edit:
Eu fui e postei telas de impressão de alguns lugares onde você pode comprar os componentes. Alguns componentes
não puderam ser comprados como 1 ou eram mais baratos em quantidades maiores, é por isso que você pode ver
algumas peças extras nas fotos. Muitas peças podem ser compradas a um bom preço
em www.dipmicro.com. Marcarei o custo de cada produto nas fotos abaixo. Com todas essas partes, sem incluir a
placa, chegou a US $ 38,11 para comprar todos os componentes deste cronógrafo com todos os envios incluídos,
exceto o PIC18F13K50 comprado na Digikey. Então, seriam mais alguns dólares pelo tubo de PVC. Além disso, se
você quiser economizar US $ 3,39, poderá comprar displays LCD 16x2 no eBay por US $ 2,99, incluindo frete.
Agora que eliminamos todos os requisitos e a configuração, podemos seguir em frente e finalmente chegar ao que
interessa. A operação deste cronógrafo é bastante simples, existem dois transmissores de infravermelho e dois
detectores de infravermelho, cada par de transmissor / detector é colocado exatamente a quatro polegadas de
distância.
Quando um objeto quebra o primeiro feixe, o microcontrolador inicia um timer (Timer1). Esse cronômetro
continuará funcionando até que o objeto quebre o segundo feixe ou o cronômetro cause uma interrupção (no
65.536 ° ciclo de instruções). Se o objeto interromper o segundo feixe antes que o cronômetro cause uma
interrupção, ele interromperá o cronômetro e lerá o valor de 16 bits nos registradores TMR1H e TMR1L. Podemos
então calcular a quantidade de tempo que o projétil levou para percorrer o comprimento entre as vigas de
infravermelho, que estão a 10 cm de distância, e descobrir a velocidade do projétil.
Se o objeto estiver muito lento ou se o projétil quebrar o feixe nº 1, mas não o feixe nº 2, o cronógrafo exibirá uma
mensagem de erro no visor LCD. Como este é um tubo de 1 "de diâmetro e uma bola de paintball é de 0,68", nunca
tive uma bola de paintball que não conseguiu quebrar a viga nº 2. No entanto, se uma bola de paintball estourar no
barril, você poderá obter alguns dados imprecisos e provavelmente terá que limpar a tinta que teria respingado no
cronógrafo para garantir uma boa "conexão" do transmissor ao detector.
Etapa 4: cálculos
Agora vamos dar uma olhada em quais cálculos são necessários para obter a velocidade real do projétil.
O PIC18F13K50 está configurado para funcionar em 48MHz. São necessários 4 ciclos para executar um ciclo de
instrução, para que o MCU esteja funcionando a 12 MIPS (milhões de instruções por segundo). Portanto, o tempo
que leva para o PIC executar um ciclo de instrução é igual a (1/12MIPS), ou seja, 83,3333 nanossegundos / instrução.
Sabemos que a distância entre os "feixes" de IV é exatamente 4 polegadas. Então, tudo o que precisamos agora é
saber quanto tempo o projétil levou da viga nº 1 à viga nº 2. É para isso que o Timer1 é usado. A cada ciclo de
instrução (83.3333 ns), o valor de TMR1H: TMR1L aumentará.
Digamos que disparamos uma bola de paintball através do cronógrafo. Depois que o paintball percorre o cronógrafo
e quebra o feixe nº 2, lemos o valor de TMR1H: TMR1L (é um valor de 16 bits). Por exemplo, vamos dizer que o valor
que lemos foi 15.930. Aqui está como calculamos a velocidade do paintball:
Distância = 4 pol.
= 1/3 pés
O paintball estava viajando a uma velocidade de 251 fps. Embora essa maneira de calcular seja perfeitamente
correta, no meu código eu apenas reorganizei a equação para que o MCU pudesse calculá-la um pouco mais
rápido. A equação que eu uso no meu código é:
No modo RoF, o Timer0 é configurado para interromper após 1.00s assim que ativado. O cronógrafo espera que um
projétil quebre a viga nº 1, uma vez que habilita o Timer0 e incrementa a variável 'taxa' que acompanha os tiros
disparados no período de 1,00s. O programa fará uma sondagem na viga nº 1 para ver se outro projétil foi
disparado. Se outro tiro foi disparado dentro do período de 1,00s, ele quebrará o feixe nº 1 e aumentaria a variável
'taxa', mais uma vez, em um. Em seguida, ele faz um loop até que o feixe 1 seja restaurado ao seu estado padrão
(não obstruído) antes de continuar e verificar se há outra foto. Isso é para garantir que não contemos o mesmo
projétil várias vezes ao passar pelo feixe nº 1.
Uma vez decorrido o período de 1,00s, o MCU exibirá o RoF por 2,00s no LCD, independentemente de quantas
outras cenas passem pelo cronógrafo no período de 2,00s. Isso é para garantir que o cronógrafo não comece a
gravar nenhuma foto logo após o período de 1,00s, o que resultaria em um novo valor de RoF. Sem esse atraso, o
usuário teria que parar de disparar antes que a interrupção de 1,00s acontecesse; caso contrário, se o usuário não
parasse de disparar logo antes da interrupção e uma bola extra ou duas viajassem pelo cronógrafo, registraria o RoF
do extra bolas que passaram porque a função iria recomeçar novamente.
Abaixo está o esquema anexado do cronógrafo, aqui está uma representação de pseudo-código de como o
cronógrafo opera:
================================= ===========
========== Operação do cronógrafo ==========
================= =======================
- Ligar
- Inicializar portas
- Inicializar LCD
- Inicializar PWM
- Inicializar temporizador0 mas mantê-lo desativado
- Inicializar temporizador1 mas mantê-lo desativado
- Inicializar INT2 externo (S2)
- Ativar interrupções
velocidade:
- Prepare o Timer1 para registrar a velocidade do projétil (configure TMR1H: TMR1L para 0x0000)
- Faça um loop até que um sinalizador seja set (pressionar S2 causaria isso) ou um objeto interrompe o feixe # 1
- Iniciar Timer1
- Loop até que um sinalizador seja definido (S2 é pressionado ou o Timer1 transborda) ou um objeto quebra o feixe #
2
- Stop Timer1
- Verifique se um sinalizador está ativo foi definido (verifique se a operação foi concluída com êxito)
- Se nenhum sinalizador foi definido, aumente a contagem de disparos e calcule a velocidade dos projéteis
- Exiba a velocidade dos projéteis no visor LCD
- Caso contrário, se um sinalizador foi definido e não foi alterado para o modo "RoF", é exibido um erro
(este erro ocorre devido ao projétil se mover muito devagar para o cronógrafo capturar sua velocidade)
- Volte ao loop principal e verifique qual modo, o cronógrafo está no
modo RoF:
- Prepare o timer0 para interromper exatamente a 1,00s (ainda está desativado neste momento)
- faça loop até que um sinalizador seja definido (pressionar S2 causaria isso) ou um objeto interrompa o feixe # 1
- Verifique para verifique se um sinalizador não foi definido (S2 não foi pressionado)
- Se nenhum sinalizador foi definido, inicie o Timer0
- Faça um loop até que um sinalizador seja definido (até que o Timer0 seja interrompido após 1,00s)
- Se o feixe nº 1 for quebrado, incrementar variáveis 'rate' e 'shots'
- Faça um loop até que o feixe 1 seja restaurado (aguarde o projétil terminar de passar pelo feixe 1)
- Foram 1,00s e o Timer0 foi interrompido, exiba o RoF no LCD
- Retorne ao loop principal e verifique em qual modo o cronógrafo está em
=============================
========== Interrompe ========= =
=============================
Timer0:
- Desligar Timer0
- Definir um sinalizador
- Limpe o sinalizador de interrupção Timer0
Timer1:
- Definir uma flag
- Limpe a flag de interrupção Timer1
Ext_INT2:
- Verifique se os dois Timers estão desligados; Desligue o Timer0 e Timer1
- Altere o modo de "velocidade" para "RoF" ou vice-versa
- Defina um sinalizador
- Desative INT2 (para que possamos pressionar o botão S2)
- Limpe o sinalizador de interrupção INT2
Depois de perfurar os dois orifícios para os transmissores de infravermelho, coloque a broca no segundo orifício que
você perfurou e verifique se está completamente perpendicular ao tubo de PVC (há fotos para a maioria dessas
etapas). Perfure o outro lado do tubo de PVC. Você acabou de fazer o furo do segundo detector de
infravermelho. Em seguida, vire o tubo e meça 4 "em todo o tubo a partir do centro exato do segundo furo dos
detectores de infravermelho. Faça uma marca e faça outro furo, este é para o primeiro detector de infravermelho.
O motivo de eu não perfurar os dois Os orifícios do transmissor de infravermelho e, em vez disso, medimos 4 "do
segundo orifício do detector de infravermelho, são precisos. É para garantir que os transmissores de infravermelho e
os dois detectores de infravermelho estejam espaçados exatamente 4 "um do outro.
Após a perfuração de todos os orifícios, os dois transmissores de infravermelho são colocados em seus respectivos
orifícios. Visto que usamos uma broca de 3/16 ", o diâmetro dos furos é de apenas ~ 4,8 mm. Isso significa que o LED
de 5 mm não se encaixa completamente no furo, é isso que queremos. Só queremos que os LEDs do IR fiquem
levemente picar para dentro do tambor, por duas razões. Primeira, ele ajuda a dirigir o feixe de infravermelhos em
um caminho reto para o detector de IR. em segundo lugar, reduz-se a possibilidade de um projéctil que golpeia o IR
em si e danificá-lo LED.
uma vez que o LED de infravermelho do são colocados nos buracos, um pequenoUm pouco de super cola é usado
para prendê-los no lugar. Não cole totalmente o LED IR no orifício, apenas no caso de precisar substituí-lo mais
tarde. Uma vez preso, coloque o ferro de soldar e solde alguns fios dos LEDs IR. Certifique-se de que os fios possam
alcançar o outro lado do tubo de PVC onde mais tarde instalaremos a PCB. Eu recomendaria colocar os conectores
nos fios para que seja mais fácil desmontar o cronógrafo, caso você precise limpá-lo.
Abaixo, eu enviei as fotos do PCB salvo em 300DPI. Esta é a placa de circuito que eu projetei para o cronógrafo. A
parte crucial desta placa é que os orifícios do detector IR estão exatamente a 10 cm de distância. Isso nos permitirá
alinhá-los com os orifícios no tubo de PVC. Também carreguei um arquivo PDF que contém todas as faces da placa
necessárias para criar um PCB usando o método de transferência de toner.
Depois de obter a PCB e soldar todos os componentes, você estará pronto para juntar tudo. Eu segui as etapas para
montá-lo nas fotos. É muito mais fácil seguir quando você pode visualmente visualizá-lo, então não os escreverei em
dois parágrafos, como estão nas tags de imagens.
Precisão:
Se uma bola de paintball estiver viajando a 300fps, são necessários 3,3333ms para percorrer 1
pé (1 / 300fps = 3.3333ms). Como nossos pares de transmissores / detectores de infravermelho
estão espaçados 4 ", temos que dividir 3.3333ms por 3 (1ft / 4in. = 3). Portanto, o tempo
necessário para o paintball percorrer 4 "a 300fps é 1.1111ms.
300fps = 3.3333ms / ft
Agora essa não é a precisão real deste cronógrafo. Se esse microcontrolador pudesse detectar
um objeto em qualquer ciclo de instruções, teria uma precisão de 99,9995% a 300 qps, porque
seu pior cenário de não detectar um objeto quando ele quebrou o feixe poderia ser apenas
83,3333ns antes de realmente detectá-lo.
maior tempo possível antes da detecção = (16 segundos + 2 segundos) * 83,3333ns / ins
= 1,5 µs
Precisão = 100 - (100 * (1,5µs / 1,11111ms))
= 99,865% de precisão a 300fps
Portanto, supondo que não haja outras fontes de erro (a distância é exatamente de 4 ", os feixes
são quebrados de forma idêntica em cada lado, etc.), teríamos uma precisão de 99,865% a
300fps para este cronógrafo. Isso é muito bom, no entanto, existem . muitas outras pequenas
fontes de erro que eu não representaram por isso, é altamente improvável que o cronógrafo que
eu construir ou a construir será 99,865% de precisão no entanto, ele funciona muito bem e estou
muito satisfeito com ele..
Edit:
I esqueci de adicionar a velocidade mínima do projétil.Como a contagem mais alta que o Timer1
pode contar é 65.535, além de usar mais uma instrução para fazê-lo ultrapassar o zero e rodar a
12MIPS, podemos calcular a velocidade de um projetor. projétil tão baixo quanto 62fps Os
cálculos são os seguintes:
Este capítulo propõe duas versões do cronógrafo balístico: uma oferecendo a capacidade de medir com precisão
projéteis de alta velocidade e uma versão Lite que oferece um pouco menos de precisão, mas uma implementação
muito mais simples.
Embora eu me refira à versão mais simples como a versão “Lite”, ela não é de maneira alguma sofisticada.
Cronógrafos comerciais
Existem vários cronógrafos disponíveis comercialmente, a maioria destinada a pistolas e rifles de alta potência. Os
cronógrafos são geralmente colocados no chão ou em uma mesa na frente do atirador. A maioria dos dispositivos
comerciais populares depende da luz solar do ambiente para operação e, portanto, não funciona em ambientes
fechados ou em dias nublados. E, embora tenham preços modestos, não são realmente baratos.
Os cronógrafos variam de dispositivos simples de dois fios (ainda em uso e acredita-se que alguns sejam os mais
precisos) para unidades relativamente elaboradas com memória digital, cálculos de velocidade média e outros
recursos. A abordagem de dois fios simplesmente usa dois fios finos de fio (o fio de bitola 36 ou 40 serve) esticados
entre dois pares de contatos espaçados com precisão.
O projétil é disparado e quebra o primeiro fio para iniciar um cronômetro e, se você tiver uma mira boa, quebra o
segundo para interromper o cronômetro. O tempo entre as quebras é calculado para fornecer um valor de
velocidade em pés ou metros por segundo. Os primeiros cronógrafos foram construídos com um relógio, com
leituras de uns e zeros exibidos em um banco de LEDs. O número binário teve que ser convertido para um número
decimal e depois calculado com a distância entre os fios para obter a velocidade.
Agora que você sabe que tipos de cronógrafos pré-criados existem por aí, vamos dar uma olhada na física do
dispositivo. Um projétil que sai do cano de uma arma tem uma velocidade atribuída a ele por algum propulsor, como
ar, CO2 ou gás criado pela rápida oxidação do combustível na pólvora.
O projétil viaja pelo cano e sai do focinho. A velocidade do projétil que sai é chamada velocidade do focinho.
A velocidade do cano das pistolas pneumáticas tende a variar dependendo da vários fatores, incluindo a carga do
propulsor, a limpeza do barril e a combinação de projétil a barril. Alguns rifles aéreos podem ser bombeados para
quase 3.000 psi (libras por polegada quadrada) para disparar projéteis maiores a velocidades relativamente
significativas. Essas pistolas de ar maiores têm velocidades de focinho relativamente baixas na faixa de sub-1.000
fps, mas oferecem um impacto real. Comparado 220 Capítulo 8 às espingardas de ar convencionais, que disparam
balas de 0,177 polegadas com capacidade entre 15 e 25 pés-libras (pés-libras) de potência, essas espingardas de
calibre maior oferecem entre 500 e 700 pés-libras de potência.
Idealmente, você deseja medir a velocidade o mais próximo possível do final de o barril quanto possível. No entanto,
isso pode ser difícil, e alguns fabricantes de cronógrafos afirmam que a velocidade não é muito atenuada nos
primeiros vários pés (ou até jardas) de viagem. Por outro lado, há pouca dúvida de que a resistência do ar é um fator
significativo, e o projétil desacelerará pelo menos um pouco nos primeiros metros - especialmente no caso de
projéteis maiores.
Abordagem deste projeto
Como nos sistemas de cronógrafo balístico de dois fios, estamos tentando medir o tempo que leva para um projétil
percorrer uma distância fixa. Mas, em vez de quebrar os fios finos, esse projeto tira proveito de uma fonte de luz
infravermelha e de um receptor sensível à luz, conforme ilustrado na Figura 8-2.
Dois pares de LEDs e sensores de infravermelho estão dispostos de modo que o sensor de infravermelho
normalmente detecta a fonte de luz. Mas quando o projétil quebra o feixe de luz do primeiro par, o sensor fica
escuro e muda seu estado elétrico.
O processador detecta essa alteração e inicia um timer. Quando o projétil interrompe um segundo par de fonte /
receptor, o temporizador para. Os dois conjuntos de fontes de luz e receptores são separados a uma distância
precisa, para que o tempo de viagem possa ser calculado com relativa facilidade na velocidade do projétil.
Para um exemplo simples, digamos que os feixes de luz estejam separados um pé. Um projétil interrompe um feixe
de luz e inicia o relógio; quando o projétil interrompe o segundo feixe de luz, o relógio para. Se o temporizador do
microcontrolador medisse 1 segundo, a velocidade seria de 1 pé em 1 segundo ou 1 fps.
Este sistema pode ser usado com uma variedade de projéteis e fornecer uma leitura digital em um LCD. Ao contrário
de outras abordagens, este dispositivo separa o banco de sensores dos eletrônicos, de modo que, se desejado,
diferentes sensores podem ser trocados para diferentes armas de fogo ou mesmo aplicações diferentes.
Por exemplo, você pode configurar um canal de sensor e fazer algumas experimentos de física, soltando pequenos
objetos através dele e registrando sua velocidade.
Parts List
One Arduino Pro Mini or clone
Not e Some users have had trouble matching the IR LEDs with the Optoschmitt photosensors.
If you run into this problem, try the Honeywell SE3450/5450 or equivalent.
Another option is to use two Adafruit IR Break Beams (part #2167) instead of the
separate LEDs and sensors. The IR Break Beams will work for the Chronograph Lite,
but the output must be inverted for the full version.)
page 18)
Four female pins for housing (see “Connectors Used in This Book” on
page 18)
One 9V battery
222 Chapter 8
Downloads
Esboço: ChronographLite.ino
O esquema
Fora da placa do Arduino, o circuito para este projeto não é muito complexo.
O esquema da Figura 8-3 usa o barramento I2C para alimentar o LCD, dois
Para esta bancada de testes, cortei dois pedaços de papelão aproximadamente 2 × 6 polegadas e os perfurou para
caber dois pares de LEDs IR e fototransistores que foram espaçadas 3 polegadas à parte. Eu ferrou o papelão para
um pedaço de 1 polegada de espessura madeira, embora você possa colar ou grampear se você preferir. Quando
você constrói o seu, certifique-se de que cada fototransistor esteja diretamente em frente a um LED IR no canal.
Depois de instalar os LEDs IR e fototransistores no banco de ensaio, eu recomendamos prepará-los para o placa de
ensaio da seguinte forma:
1. Conecte os dois ânodos do LED IR com um pedaço de arame por solda ou enrolamento de arame.
2. Solde um fio de 24 polegadas de comprimento para os ânodos de LED combinados. E se você está usando fio de
núcleo sólido que se encaixa em uma tábua de pão, você pode simplesmente tirar a outra extremidade do fio de 24
polegadas.
Se você estiver usando fio trançado, prenda um pino de crimpagem masculino no final do fio.
3. Conecte os dois catodos de LED IR com um pedaço de arame por solda ou enrolamento de arame.
5. Conecte os catodos de LED IR combinados ao fototransistor combinado emissores; Sugiro soldar um fio longo.
6. Solde um fio de 24 polegadas aos catodos combinados de LED e emissores de fototransistor e termine a outra
extremidade do fio com um pino de crimpagem masculino, como você fez na etapa 2.
7. Solde um fio de 24 polegadas ao coletor de cada fototransistor e finalize a outra extremidade do fio com um pino
de crimpagem macho, como você fez passo 2.
Na Figura 8-4, os LEDs e sensores de luz (estes serão fototransistores sensores Honeywell Optoschmitt, dependendo
da sua escolha) são colocado em buracos perfurados no papelão do canal de aceleração.
Figura 8-4: O banco de ensaio que eu usei inicialmente para verificar o cronógrafo conceito 224 capítulo 8 lugar. Em
vez disso, você pode colá-los com cola quente ou entrar em contato com cimento. Usei um fio telefônico de quatro
condutores de 24 polegadas para conectar o canal à placa de ensaio, mas qualquer fio serve. Na versão completa e
em outros protótipos, usei apenas quatro comprimentos de fio trançado de bitola 30, porque era mais flexível. Como
alternativa, você pode criar o canal final do sensor agora.
indicado no diagrama esquemático da Figura 8-3. Liguei os ânodos de LED à fonte de alimentação através de um
resistor de 270 ohm (R3). No caso dos fototransistores, configurei-os para que os emissores fossem aterrados e cada
coletor passasse por um resistor de 10 quilohm (R1 e R2) até o positivo da fonte de alimentação para uma
configuração de coletor aberto. Assim, se o feixe de luz fosse interrompido, o fototransistor seria conduzido e a
tensão no coletor cairia.
Não e Se você usar o Honeywell Optoschmitt SA5600 / 5610, os resistores de 10 kilohm (R1 e R2) não serão
necessários, pois estão incluídos no chip SA5600 / 5610. A fiação dos sensores Optoschmitt é mostrada na parte
inferior esquerda do esquema na Figura 8-3.
Configurei o show verticalmente para que um projétil pudesse ser jogado pelos feixes de luz para testar o sistema.
Esse método significava que as velocidades medidas não se aproximavam das de um projétil deixando o cano de
uma arma, mas eram boas o suficiente para um experimento inicial de prova de conceito. Quanto maior a queda do
alvo, maior a velocidade registrada - ou seja, se o seu objetivo for bom. (Lembre-se de s = (1/2) at2, onde s é
deslocamento ou distância, a é aceleração devido à gravidade, t é tempo e a velocidade inicial é zero.)
o papelão pode ser colado na parte superior (lateral) dos dois pedaços de papelão para proteger o sensor, embora
eu não tenha achado que isso era um problema em nenhuma das experiências que conduzi.
The Sketch
Now to write the sketch to make things work. Here is the sketch for the
Chronograph Lite:
O esboço é bem direto. Depois de configurar as variáveis e entradas, um loop while espera que o primeiro
sensor seja interrompido verificando a condição digitalRead (2) == 1 {1}. Quando disparado, o relógio é
iniciado com start_time = micros (); {2}, e outro loop while conta até o segundo sensor ser ativado (porque
o segundo sensor está conectado ao pino D4, esse loop while verifica se digitalRead (4) == 1 {3}). Quando o
segundo sensor é ativado, o relógio é parado com stop_time = micros () {4}.
O esboço calcula o tempo decorrido entre o primeiro sensor e o segundo com time_of_flight = stop_time -
start_time at {5}. Depois que o esboço faz seus cálculos, ele fornece instruções para exibir os resultados na
tela LCD.
Tudo o que você precisa fazer agora é carregar o esboço, levantar o canal de teste como na Figura 8-4 e
soltar um projétil como um mármore através do canal de papelão. Para começar, ligue o Mini com o
programador. Como alternativa, você pode usar uma fonte de alimentação regulada 5V separada
conectada ao terminal 5V no Mini ou conectar uma bateria à porta VIN do Mini e usar o regulador
integrado do Mini. Não conecte uma bateria de 9V aos trilhos de alimentação de 5V - isso pode queimar
tudo.
Quando estiver satisfeito com o funcionamento dos sensores, você poderá conectar o canal temporário do
sensor a uma pistola de ar real, se quiser testar mais o circuito (veja a Figura 8-6).
Se isso for suficiente para suas necessidades, você pode empacotá-lo e pular tudo em “O cronógrafo
balístico completo” na página 233. O Chronograph Lite deve funcionar bem em jogos e armas de
velocidade baixa e média (menos de 600 fps), como armas de chumbinho, armas BB, armas de airsoft e
assim por diante.
Apesar do desempenho satisfatório, no entanto, fiquei incomodado com o fato de que, embora o Arduino
possa contar microssegundos, ele pode fornecer resultados apenas como múltiplos de quatro, portanto, na
realidade, a resolução é de apenas 4 microssegundos. Por isso, desenvolvi o projeto Full Ballistic
Chronograph. Se isso também o incomoda e não planeja empacotar o Chronograph Lite, você pode pular
para "O cronógrafo balístico completo".
Parts List
Assembling the Full Ballistic Chronograph is relatively simple. Here’s what
you’ll need:
One Arduino Nano or clone
One 16×4 LCD
One I2C adapter, if not included with the LCD
One PCB shield
One enclosure (Hammond 1591 BTCL)
Four 1/2-inch×4-40 screws
Four 4-40 nuts
One 3PDT toggle switch
Two momentary pushbutton switches
Four 0.100×4 female headers
Four female X4 shells
Sixteen (eight male, eight female) adapter pins
One 4 MHz crystal
One TI SN 74LVC1GX04 crystal-oscillator driver
One SOT23 adapter board
One HCT 4011 4-input NAND gate
One CD4013 dual D flip-flop
One CD4040 12-stage binary counter
One ADC DAC8562 digital-to-analog converter
One LM7805 voltage regulator
One NPN transistor 2N5172 (or equivalent)
Four 5-kilohm, 1/8 W resistors
One 1-megaohm, 1/8 W resistor
One 1-kilohm, 1/8 W resistor
One 1.5-kilohm, 1/8 W resistor
One 270-kilohm, 1/8 W resistor
One 4.7 MFD tantalum capacitor
Two 33 pF capacitors
Two Ballistic Chronographs 235
One 0.01 μF capacitor
One 5 mm LED
Two IR detectors (I used the Honeywell Optoschmitt SD5610.)
Two IR LEDS, about 850–950 nm
28- or 30-gauge hookup wire
For the Full Ballistic Chronograph, you will have to use the inverted version of
the chip, the SA5610, or externally invert the signals. See the note at the bottom of
Figure 8-3.
Download
Esboço FullBallisticChronograph.ino
Modelos ChronoCover.pdf, AccelerationChannel.pdf
PCBs ChronoPCB.pcb, LEDHolder.pcb, SensorHolder.pcb
Melhorando a precisão
Existem várias soluções possíveis para melhorar a precisão do cronógrafo.
O Arduino Nano usa um relógio de 16 MHz, mas quando configurado usando a plataforma Arduino Nano e
o IDE, resulta em uma resolução de 1 microssegundo (± 2 microssegundos), mesmo que o período - o
tempo entre os ciclos - de um relógio de 16 MHz seja 1 / 16.000.000 de segundo, ou 0,063
microssegundos.
Embora um processador nunca possa resolver sua própria velocidade de clock, provavelmente é capaz de
muito melhor que 1 microssegundo. Claramente, há alguma sobrecarga no projeto atual - talvez parte de
hardware (os componentes na placa Arduino) e parte de software (parte do compilador e firmware do IDE)
- que limita o desempenho. Aqui estão algumas idéias que tive para melhorar a precisão, começando por
uma que não entrou no projeto final, mas que acho que é educacional.
Cavando no Código da Máquina
Uma solução possível é cavar a máquina básica Atmel e o código AVR.
Sem entrar em detalhes excruciantes, a montagem do AVR é a função idioma do chip Atmel. A comunidade
do Arduino cercou isso com um código especial que permite que o AVR seja executado no ambiente do
Arduino.
De acordo com as folhas de dados do ATmega328, é possível abordar diretamente os temporizadores
individuais no ATmega328 e obter a resolução necessária.
No entanto, olhando para ele, vi que esse método poderia ser excessivamente complexo e imaginei que
deveria haver outra maneira.
Criando uma janela de alta velocidade
O tempo de voo de um projétil que queremos examinar abrange uma variedade de aproximadamente 90
microssegundos (cerca de 3.000 fps a uma distância de 3 polegadas) a 236 Capítulo 850 microssegundos
(cerca de 260 qps na mesma distância de 3 polegadas) do mais rápido para o mais lento. Em relação às
frequências mais altas de alguns relógios, como o relógio de 16 MHz do processador, 90 microssegundos é
uma quantidade razoável de tempo.
Um método para medir a velocidade é abrir uma janela de tempo quando o primeiro feixe de luz é
interrompido, deixa passar um fluxo de sinal de alta velocidade até que o segundo feixe seja interrompido.
Enquanto a janela estiver aberta, os pulsos nesse sinal serão contados; quando a janela é fechada, a
contagem representará a hora em que a janela foi aberta.
Como exemplo, digamos que a janela se abre e um sinal de 10 ciclos por segundo (cps) passa até que a
janela se feche; São contados 100 ciclos.
Para esta ilustração, o relógio do Arduino é o sinal de alta velocidade. Quando você sabe a distância que o
projétil percorreu, você pode usar uma aritmética simples para determinar o tempo de viagem e a
velocidade: 100 ciclos a 10 cps nos dão 10 segundos. Se a distância fosse de 1 metro e fossem contados
100 ciclos enquanto a janela estivesse aberta, a velocidade seria de 1 metro por 10 segundos ou 0,1 m / s.
Uma única porta lógica NAND pode ser usada para criar uma janela que pode ser aberto e fechado. Um
gate lógico é simplesmente um comutador controlado eletronicamente que emite uma tensão apenas sob
certas condições, correspondendo a uma equação lógica booleana. NAND é a expressão booleana para
"not AND", e um gate NAND gera uma tensão quando suas duas entradas não são iguais.
Eu experimentei um portão NAND de alta velocidade 74HC00 e um Porta CD4011BC, e a peça padrão
funciona bem. Existem várias outras partes que também funcionarão. O que você procura é uma parte
com um atraso de propagação (Tpd) abaixo de 100 nanossegundos.
Selecionando um contador
Depois de decidir adotar a abordagem da janela, a próxima coisa a considerar é o quão alto você precisa
contar. Se você contasse números inteiros de 1 a 100, por exemplo, seria necessário um contador que
contasse até 100, o que forneceria uma resolução de 100. Se você escalasse isso, o contador poderia
fornecer um intervalo de 10 a 1.000 ou de 100 a 10.000. Se esse intervalo fosse o resultado do cálculo para
fps, você teria uma resolução de apenas 1.000 fps (cada incremento seria igual a 100 fps) mais qualquer
erro incluído, que abordaremos posteriormente.
Então, para onde você deve ir daqui? Para o compartimento de peças, é claro, para ver quais contadores
estão disponíveis para contar o sinal que passa por essa janela.
Ao selecionar um contador, você deve considerar a rapidez com que ele precisa e quantos pulsos você
deseja que conte. O testado e verdadeiro CD4040, contador digital de 12 bits, entrada serial, saída
paralela, parecia capaz de fazer o trabalho. (O CD4040 funcionava na frequência de 4 MHz, mas você
sempre podia usar uma mais rápida, como a 74HC4040 ou a 74HCT4040.) O CD4040 fornecerá uma
contagem digital de 0 a 4095 ou 2 ^ 12.
Selecionando uma velocidade de relógio
Em seguida, considere qual frequência de sinal é necessária para se adequar à faixa de velocidades dos
projéteis. Comecei com a suposição de que queria atingir uma faixa de aproximadamente 300 fps a 2.500
fps com tanta latitude nas duas extremidades quanto possível.
Além disso, embora o contador conte idealmente de zero até o máximo 4.095 contagens, existe a
possibilidade de algum erro. Tão arbitrariamente, escolhi olhar para a contagem digital total entre 400 e
4.000 para explicar a possibilidade de erro.
Dado o número de ciclos contados, a frequência do sinal e a distância percorrida, a velocidade de um
projétil pode ser encontrada com os seguintes cálculos:
Para um relógio de 4 MHz, uma contagem total de 4.000 ciclos equivale a cerca de 281 fps para o limite
inferior da faixa de velocidade. Na extremidade alta, considerando 400 ciclos contados e um sinal de clock
de 2 MHz, você medirá 1.250 fps e, em 4 MHz, pode medir até 2.500 fps.
Você pode ser criativo com sua frequência. Se você optar por usar um 2 MHz relógio, ele fornecerá a
resolução máxima na faixa de velocidade muito baixa. Se, por outro lado, você selecionar um relógio de 4
MHz, estará no meio da faixa de resolução. Um relógio de 8 MHz fornecerá uma resolução muito boa no
alcance rápido (mais rápido que qualquer arma convencional), mas reduzirá o desempenho no alcance de
velocidade mais baixa.
Porque eu previ que a maior parte das velocidades que eu precisava medir cairia no meio da faixa de
contagem, um relógio em torno de 4 MHz soou bem. Eu não estava antecipando muitas ocasiões em que
as velocidades estaria na faixa sub-300 fps e, na extremidade alta, parecia a precisão pode ser mantida em
mais de 5.000 qps (uma contagem digital de 238 Capítulo 8, pouco menos de 200, o que pode esticar um
pouco, mas parecia funcionar bem em simulações).
Se seus projéteis permanecerem na faixa abaixo de 300 fps, sugiro revisitar o cronógrafo Lite. Se, por
algum motivo, você quiser permanecer na faixa de fps mais baixa, mas exigir precisão máxima com talvez
vários dígitos, construa o Cronógrafo Balístico Completo com a taxa de clock mais lenta. Você pode
simplesmente trocar o cristal de 4 MHz por um cristal de 2 MHz e ajustar o desenho para deslizar o
intervalo para a área inferior.
Ajustando a velocidade do relógio
Para lidar com a velocidade do relógio (o sinal que é bloqueado no contador), o método mais preciso de
longe é usar um oscilador controlado por cristal, que geralmente apresenta erros apenas na faixa de
menos de 50 partes por milhão. Configurei um cristal de 4 MHz com o driver do cristal-oscilador TI SN
74LVC1GX04 experimentalmente e funcionou bem, então usei um no projeto final.
Enquanto eu olhava, revia e testava osciladores de chip único, como o Oscilador independente máximo
(7375), não era tão estável quanto a versão controlada por cristal.
Projetando o cronógrafo balístico completo
Agora, temos os meios para registrar o sinal no contador 4040, mas precisamos descobrir como exibir a
velocidade no LCD. Um método seria usar um contador diferente com uma saída serial que fosse
sincronizada diretamente no Nano. Outra possibilidade seria pegar os dados paralelos do CD4040,
serializá-los com um registrador de turnos e alimentar o resultado com o Nano.
No entanto, tomei uma direção diferente, conforme ilustrado no diagrama de blocos da Figura 8-12. Decidi
usar um conversor digital-analógico (DAC) de 12 bits para aceitar os sinais digitais paralelos e convertê-los
em um único valor analógico. Os DACs e seus equivalentes, conversores analógico-digitais (ADCs), são
usados em músicas digitais, TVs e em várias outras áreas em que uma entrada analógica precisa ser
digitalizada, manipulada, transferida, armazenada e, eventualmente, saída para retornar um sinal
analógico. Achei que seria uma boa oportunidade para apresentar os recursos dos conversores digital para
analógico.
O processo na Figura 8-12 mostra a operação do cronógrafo usando um simulador. Na operação real, o
simulador seria substituído pelos dois pares de sensores LED. O simulador, sob controle da chave de
disparo, inicia um sinal de partida que permanece ativo até que a segunda chave de parada seja ativada
após um período determinado pelo gerador de ondas quadradas. Isso simula essencialmente o projétil que
passa pelo primeiro e depois pelo segundo par de sensores.
Quando a chave de partida é ativada inicialmente, ele liga o flip-flop - um dispositivo bistate que liga com a
ativação da chave de partida e permanece ligado até que a chave de parada seja ativada. O flip-flop
alimenta o gatilho do portão. Quando o gatilho (T) está inativo - ou seja, quando está definido como um 0
lógico - o sinal do oscilador na entrada (A) não pode passar pelo portão para a saída (B). Quando o gatilho é
ativado (definido como 1 lógico), o gate permite que o sinal do oscilador (A) viaje através do gate para a
saída (B) e, eventualmente, para a entrada do contador binário. O contador binário conta o número de
pulsos que passam do oscilador através do portão e para de contar quando o portão é fechado.
As saídas do contador binário são alimentadas no DAC. Eles representam números binários de 0 a 4.095 -
ou seja, de 0 a 212 - 1. O DAC converte esses valores digitais em um único valor analógico. A técnica dessa
conversão depende do tipo de CAD usado; por exemplo, no DAC8562 usado aqui, uma escada de resistor
R-2R é comutada e um transistor é usado para produzir a saída. (Para obter informações completas,
consulte a folha de dados de Analog Devices no DAC8562.)
A saída do DAC tem uma escala de 0V a 4.095V correspondente a as entradas digitais. Essa saída é
direcionada para uma das entradas analógicas do Arduino Nano, que fornece a função inversa do DAC e
converte o sinal analógico de volta em um formato digital que o Nano pode suportar. O Nano pega esse
sinal e, seguindo as instruções do esboço, ajusta o valor para representar a velocidade em fps pelo tempo
que o projétil leva para percorrer as 3 polegadas. O Nano finalmente envia esses dados para o LCD, que
exibe a velocidade do projétil e o tempo de viagem.
O esquema
As Figuras 8-13 e 8-14 mostram os diagramas esquemáticos do cronógrafo completo de balística completo.
Observe os portões extras na parte inferior. Eu os incluí no esquema porque eles estão disponíveis para
você nos pacotes de ICs de porta e flip-flop NAND sugeridos para este projeto, mas meu design não os
utiliza. Se você deseja adicionar funcionalidades, elas estão disponíveis.
Outra coisa incluída no esquema que não abordamos é
o botão de reset. No cronógrafo balístico completo, incluí um botão para acionar a redefinição, em vez de
redefinir automaticamente. Eu poderia configurá-lo para que o resultado fosse exibido no LCD por um
período fixo de tempo antes da reinicialização do sistema, mas pode ter acontecido que o número foi
apagado antes que os usuários tivessem tempo para gravá-lo, ou eles podem ter se encontrado sentado
ocioso enquanto o tempo limite expirou. Eu decidi que um botão de reset seria mais conveniente.
Como a reinicialização do microcontrolador não perturbaria o sequência de coisas, eu escolhi usar um hard
reset no controlador através do transistor Q1. Para redefinir o CD4040 e o DAC, usei o sinal de redefinição
e o inverti usando um dos quatro portões NAND do CD4011 com as duas entradas ligadas. O SW2 fecha
manualmente o segundo conjunto de sensores, caso o primeiro par de sensores seja acionado e não o
segundo, e SW3 é o interruptor de energia e bateria.
The Sketch
The sketch for the Full Ballistic Chronograph is relatively straightforward:
Neste esboço, o software recebe um sinal analógico do DAC em u e o converte em um valor digital. Em
seguida, ele realiza algumas operações matemáticas rápidas para obter a hora do voo (Time), calcula a
velocidade em pés por segundo (FPS) e, finalmente, exporta esses valores para o LCD.
Ao projetar circuitos eletrônicos, sempre existem compensações entre hardware e software. Muitos deles
têm a ver com problemas de tempo e latências internas em abordagens baseadas em software. Nesse
caso, a desvantagem é a necessidade de maior precisão não disponível com a abordagem direta do IDE do
Arduino sem cair para algum nível de código nativo. Para evitar o código nativo, o cronógrafo balístico
completo possui um hardware mais complexo que o cronógrafo Lite.
The Shield
Ao contrário do Chronograph Lite, o Cronógrafo Balístico Total é melhor construído em um escudo. O
escudo é um pouco mais envolvido do que alguns dos outros deste livro, mas não se deixe intimidar. A
Figura 8-15 mostra os traços reais da blindagem, enquanto a Figura 8-16 mostra a imagem da serigrafia
com os posicionamentos das peças e a configuração do furo. Para este projeto, optei por uma placa dupla,
porque o circuito era um pouco mais complexo do que alguns outros e porque me permitiu minimizar o
espaço necessário. O arquivo PCB completo está disponível para download em https://www.nostarch.com/
arduinoplayground /.
Tentei manter a pegada do escudo no mínimo para torná-la possível para o usuário espremer o sistema em
um pequeno gabinete portátil.
Como é, o cronógrafo balístico completo final cabe facilmente em uma caixa de 11 × 8 × 4 cm.
Este é outro caso em que optei por terceirizar a construção de PCB depois de eu ter feito e refinado a
primeira amostra pessoalmente, e garantido que todas as conexões críticas pudessem ser soldadas nos
dois lados da placa. A Figura 8-17 mostra a placa bruta conforme foi recebida da agência de serviços.
O canal do sensor
Construímos uma plataforma de teste de canal de sensor no início deste capítulo, mas agora vamos
construir um canal de sensor mais permanente e observar o par de sensores e LED que usaremos no
interior.
Construindo o canal do sensor
O canal do sensor é um túnel em forma de U que se prende ao cano de uma arma e mantém os pares de
fotodetector / LED que controlam a comutação.
Este canal pode ser construído com uma variedade de materiais. Usei uma seção de 3/8 pol. De acrílico e
duas peças de alumínio com 0,060 pol de espessura (veja a Figura 8-20).
Figure 8-20: The completed sensor channel shown from the top (right side up). Note the feed-through holes
in the acrylic for the positive and negative power supply connections to the LEDs (boxed). Also note the
current-limiting resistor on the PCB holding the LEDs (circled). The cross-hatch area is foam taped to protect
the weapon’s slide from being scratched.
Você poderia facilmente usar chapas de aço macio para as peças laterais. A peça superior, mostrada na
Figura 8-20, pode ser qualquer material leve, como fenólico, Lexan ou outro plástico para apoiar as peças
laterais. Escolhi acrílico transparente porque me permitia ver a arma sem ter que olhar para o cano. Você
pode ter uma visão mais ampla de todo o canal, incluindo o cabo do sensor, na Figura 8-21.
Figure 8-21: The channel with the cable attached and the PCB mounted so that the connector
faces toward the back (where the weapon attaches)
Existem dois PCBs, conectados a ambos os lados do canal com fita dupla face, para armazenar os LEDs e os
fotossensores. Esses PCBs são ligeiramente diferentes um do outro, como mostrado nas Figuras 8-22 e 8-
23. Os arquivos PCB para essas placas estão disponíveis para download em
https://www.nostarch.com/arduinoplayground/.
A parte superior de acrílico do canal do sensor media 1 3/8 × 7 5/8 polegadas. Eu usou um passador de
madeira reto para alinhar o cano com os sensores / LEDs.
Observe que existe um pequeno recuo, feito com uma broca de 1/2 polegada, na parte superior do acrílico
para permitir a visão ótica da pistola de ar Crossman T4.
Dois cronógrafos balísticos 249 As folhas de alumínio usadas para os lados mediam 1 3/8 × 7 5/8
polegadas.
Fiz os furos para fixar os lados de alumínio ao topo de acrílico com uma broca nº 30 e espaçei os furos 1
polegada. O acrílico foi perfurado com uma broca nº 43 e roscado para 4-40 parafusos. Veja a Figura 8-24
para especificações de perfuração para as peças de acrílico e alumínio. Os furos para o acrílico são
perfurados através da largura.
Além disso, como uma passagem para os fios do lado do LED até o lado do detector de foto, fiz dois furos #
43 em ambos os lados do quarto furos de montagem nas peças de acrílico e alumínio. A localização exata
desses orifícios não é crítica.
Além dos orifícios para fixação do acrílico, o alumínio necessários dois orifícios de cada lado para os pares
de LEDs e fotodetectores, e outros dois orifícios de um lado para montagem no cano (corrediça) da pistola
(A e B na Figura 8-24), perfurados com uma broca nº 25 e bateu para um parafuso 10-24. Confira o
tamanho dos LEDs IR. A maioria tem 5 mm e um orifício de 3/16 de polegada geralmente é um ajuste
apertado. O sensor Optoschmitt também se encaixa perfeitamente em um orifício de 3/16 de polegada. Os
orifícios para os LEDs e os fotossensores podem ser medidos com uma distância de apenas 3 polegadas ou
você pode medi-los para combinar com os PCBs montados na lateral.
Dependendo da (s) arma (s) que você pretende usar, convém ajustar o posicionamento dos furos A e B na
Figura 8-24. O canal do sensor também pode acomodar mais orifícios roscados para várias armas. Para
montar o canal do sensor no topo da pistola, usei parafusos de nylon com porcas de fixação.
Os parafusos de nylon foram capazes de apertar contra o acabamento em aço azulado da pistola sem
danificá-la.
Os parafusos para montar a pistola funcionaram bem com o Crosman T4, bem como em uma pistola de
pellets Crossman mais antiga (veja a Figura 8-25).
Figure 8-25: The sensor channel mounted on an older Crossman pellet gun. This angle shows the top (acrylic)
side of the channel.
No interior do canal, coloquei um adesivo de dupla face fita de espuma (se você puder encontrar uma fita
adesiva de espuma de um lado, tanto melhor) para proporcionar um ajuste mais confortável e proteger a
arma contra danos. Deixei a cobertura protetora do outro lado da espuma para que ela não aderisse à
arma nem estragasse o acabamento.
Dependendo da arma que você está usando, você pode adicionar um camada extra de espuma para cobrir
o canal, para que o centro do barril fique mais próximo do centro do canal. Mas desde que o cano não
esteja tão longe em ambos os lados que o projétil possa atingir o LED ou o detector fotográfico, centralizar
o cano perfeitamente não é crítico.
É essencial, no entanto, centralizar o ajuste vertical para que o LED / pares de detectores alinhados com a
trajetória do projétil. Para definir esse alinhamento, usei um passador de madeira reto do mesmo
diâmetro que o furo do cano, inseri-o parcialmente no cano da arma e, em seguida, ajustei a posição para
alinhar com os pares LED / detector. Depois de alinhado, aperte os parafusos de nylon para prender o
canal na arma.
Sensores de luz Optoschmitt e LEDs UV
Ao preparar o canal do sensor, experimentei vários tipos diferentes de LEDs e detectores para ver qual
oferece o melhor preço e desempenho.
As unidades compradas no eBay (pares de LED UV e fototransistor) funcionava bem, e eu os usei nas
versões iniciais do protótipo. No entanto, continuei a procurar um sensor que, com certeza, fosse rápido o
suficiente e proporcionasse boa sensibilidade em um campo estreito, o que ajuda a excluir a luz ambiente.
Depois de revisar várias amostras, escolhi o detector Optoschmitt SD5610 da Honeywell - assim chamado,
eu acho, porque inclui um circuito de gatilho Schmitt (veja a Figura 8-26).
O sensor Optoschmitt SD5610 é um pouco caro, mas possui um Ângulo de aceitação de 6 graus, que
funcionou bem para projéteis de todos os tamanhos, incluindo muito pequenos e grandes. Também
reduziu os efeitos da luz ambiente.
De acordo com o fabricante, o fotodetector consiste em um fotodiodo, amplificador, regulador de tensão,
gatilho Schmitt e um transistor de saída NPN com um resistor de tração de 10 quilogramas (nominal)
(consulte a Figura 8-26). O resistor de pull-up interno elimina a necessidade de um resistor externo no
circuito. Observe que existem duas versões deste dispositivo: o SD5600 e o SD5610. O SD5610 inclui um
inversor para que a saída seja baixa quando a luz ambiente estiver acima do limite de ativação. Como exigi
a saída invertida, usei o SD5610. A sensibilidade espectral é maior no comprimento de onda de 800 a 850
nm - a área dos LEDs infravermelhos mais comuns. Informação adicional na série SD5600 pode ser obtida
no site da Honeywell.
Para os LEDs, usei apenas LEDs IR regulares que reivindicavam saída no Faixa de 850–950 nm.
Simplesmente comprei uma sacola de 50 unidades no eBay e elas funcionam bem. Como alternativa, o
SparkFun oferece unidades únicas por um preço muito baixo.
Os LEDs e os fotossensores devem ser soldados nas PCBs feitas para eles e devem encaixar-se
confortavelmente nos orifícios. Prendi a placa de circuito impresso nas laterais do canal de aceleração
usando fita adesiva dupla face padrão da 3M.
Cabo Umbilical do Sensor
O cabo que usei para conectar o canal do sensor à balística completa O PCB do cronógrafo é feito de
quatro comprimentos de fio de calibre 30 torcidos juntos, presos com fita adesiva e conectados a um
conector Pololu de quatro condutores fêmea em cada extremidade. Esses conectores não são polarizados
e não possuem um retentor, portanto, podem ser relativamente facilmente desconectados ou conectados
de outra maneira. Antes de conectá-los, alinhe o fio com código de cores.
Inicialmente, tentei usar um cabo telefônico de quatro condutores, mas era muito rígido e causava
problemas.
O canal e o cronógrafo completo podem ser conectados facilmente.
Se você usou fio colorido, saberá que o plugue está conectado corretamente porque não está polarizado.
Configuração e operação finais
Depois de concluir a montagem da unidade e do canal do sensor, é hora de retirá-lo do alcance e
experimentá-lo. O Chronograph Lite e o Full Ballistic Chronograph foram projetados para operar com
energia da bateria, para que você não precise conectá-los. Configure o cabo umbilical para conectar o
canal do sensor à unidade do cronógrafo e, em seguida, monte o canal no a arma com segurança (veja a
Figura 8-27).
Figure 8-27: The completed Full Ballistic Chronograph with the acceleration channel
mounted to a Crossman 0.177 caliber pellet gun
Depois que o canal estiver conectado à arma, alinhe cuidadosamente o cano da arma com os LEDs /
detectores no canal usando uma cavilha reta do mesmo diâmetro que o furo do cano ou fazendo um
adaptador simples que use um comprimento reto de tubulação (veja a Figura 8-28).
Usando o cronógrafo balístico completo
Depois de alinhar o barril da melhor maneira possível, ative o Cronógrafo e pressione o botão de reset.
Aponte cuidadosamente para o seu alvo e dispare a arma. A velocidade do projétil em pés por segundo e o
tempo necessário para percorrer os três centímetros entre os sensores devem aparecer na tela LCD. Para
fazer outra medição, basta pressionar o botão de reset e disparar novamente.
Se, por acaso, você não alinhar a arma no canal corretamente, existe a possibilidade de o projétil
interromper o primeiro conjunto de fotosensores e não o segundo. Nesse caso, você pode pressionar o
botão Limpar e, em seguida, o botão Redefinir para tentar novamente. O interruptor de limpeza
simplesmente fecha a conexão para o segundo conjunto de fotosensor.
O cronógrafo balístico completo deve fornecer leituras precisas cerca de 300 fps a mais de 2.000 fps.
Usando o Chronograph Lite
O Chronograph Lite opera da mesma maneira, apenas é redefinido automaticamente para que nenhum
botão de reinicialização seja necessário. No entanto, se o projétil falhar em interromper o segundo
conjunto de sensores / detectores, será necessário limpar a tela pressionando o botão Limpar.
Essencialmente, isso faz o mesmo que interromper o segundo par de sensor / LED, mas você deve sempre
usar o botão Limpar e nunca tentar interromper o segundo par de sensor / detector com um objeto
externo - especialmente o dedo. A arma deveria acidentalmente, você pode sofrer uma lesão grave. O
Chronograph Lite fornecerá medições precisas de cerca de 200 fps a mais de 1.000 fps, mas sua precisão
tende a diminuir à medida que se aproxima dos 700 fps.
Usando com armas de alta potência
A menos que você tenha experiência com armas de fogo, eu recomendo fortemente o uso do cronógrafo
para medir armas de alta potência. Dito isto, eu testei o cronógrafo balístico completo em alguns deles.
A Figura 8-29 mostra o canal do sensor montado em uma pistola semi-automática de Smithfield XP / M 9
mm. Testei o cronógrafo com vários cartuchos e as medições ocorreram alguns fps da especificação do
fabricante da bala. Por exemplo, o Remington JHP afirma que a bala viaja a 1.155 fps e eu medi cerca de
1.152 fps. Outras armas também mediram perto das velocidades publicadas.
Phototransistor:
Many type working well.
I tested BPW17 and SFH309FA phototransistors.
PCB size:
81mm x 85mm
A tensão mínima de entrada é 7,5V
Corrente sem controlador (apenas LEDs IR): ~ 30mA
Com o MCU e o display de 7 segmentos em funcionamento: ~ 110mA
tenho que desenvolver um projeto para calcular a velocidade media de uma material( imã) que passa por
dentro de tubos de alumino e tubo de PVC( é a experiencia do Tubo anti gravidade- Lei de Lenz) a ideia
inicial seria unir os dois tubos, sendo que o tubo de PVC ficaria na parte superior, instalar 3 sensores infra
vermelhos, 1 na entrada do tubo de PVC, 1 na saída do tubo de PVC, 1 na saída do tubo de alumínio, assim
que o material passar pelo primeiro sensor será iniciado a contagem de tempo, quando passar pelo 2
sensor será informada a velocidade media do período no display e armazenada, e abrira a contagem de
tempo novamente, ao passar pelo terceiro sensor será informada no display a velocidade media do
segundo período.
alguém pode ajudar?
Julio, bom dia.
Este projeto é um TCC?
O que voce já tem pronto deste projeto?
Parte mecânica, eletrônica, código, desenhos, fórmulas, etc?
Posta aqui e tb se tiver, fotos?
Assim poderemos auxilia-lo.
Não é TCC,
existe uma experiencia, que mostra a velocidade media de um imã quando passa por um tubo de
alumínio, que explica lei de Lenz, o vídeo esta no link https://www.youtube.com/watch?v=Sdoq9Q4D-dg a
ideia é complementar esta experiencia inserido um tubo de outro material, do mesmo comprimento e
analisar a velocidade media percorrida nos dois materiais. A mecânica é bem simples seria, cada tubo tem
o comprimento de 1 metro sendo emendado através de uma liva de pvc, vou enviar um esquema da
mecânica.
Oi Julio,
com o arduino,o código pra fazer isto é bem simples.
Modifique este código para fazer tb a 2a. medida.
Rui
// measures velocity of projectiles
// baseado no código postado por Bruno Godoi Eilliar
unsigned long Inicio=0; // variavel interia positiva para guardar o inicio da medida
unsigned long finish=0; // variavel interia positiva para guardar o fim da medida
float distance=10; // variavel floatpoint para informar a distancia para medida
// informar aqui a distancia entre os sensores em cm
float interval; // variavel floatpoint para guardar o calculo ente inicio e fim
float velocity; // variavel floatpoint para guardar guardar o calculo da velocidade
int done=1; // Flag para informar que foi feita a medida
int FlagInicio = 0; // Flag para informar que foi medido o tempo inicial
int FlagFinal = 0; // Flag para informar que foi medido o tempo final
Olá pessoal,
Tive uma ideia que já havia ocorrido a alguém antes de mim aqui no fórum, apenas que gostaria de
melhorá-la.
O único problema é que, mesmo que eu tenha conhecimentos no campo da engenharia elétrica, não tenho
nenhum na programação.
void setup()
{
lcd.begin(16, 2);
pinMode (firstsensPin, INPUT);
pinMode (secondsensPin, INPUT);
}
void loop()
{
lcd.println("Waiting");
val = analogRead(firstsensPin);
val2 = analogRead(secondsensPin);
while (val > 30)
{
val = analogRead(firstsensPin);
}
. Funciona assim: você publica seu próprio código, que faz mais ou menos o que você pretende fazer e nós
o ajudamos a corrigi-lo e melhorá-lo.
Você já pensou nos problemas relacionados à luz? (sol, sombra, neon )
Você pensou no reflexo da cor do ponto
Pergunto-lhe isso porque nunca me fiz a pergunta de como fabricar este instrumento, mas, tendo usado
vários deles, que variam de baixas velocidades a 1400 / 1500fps, já vi MUITOS, MUITOS, até muitos que
deram os números, em vez do ProChrono, talvez o mais barato seja o que funciona melhor de todos !!!!
Após a atualização, digitei o código e simplifiquei as funções do cronógrafo.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte firstsensPin = A4;
const byte secondsensPin = A5;
unsigned long time, time2;
unsigned long shots = 0;
float sumspeed = 0;
float avgspeed = 0;
const int dist = 100; // sensor distance in mm.
float mps, elap;
int val;
int val2;
void setup()
{
lcd.begin(16, 2);
lcd.println("Ready!");
}
void loop()
{
val = analogRead(firstsensPin);
val2 = analogRead(secondsensPin);
while (val > 30) val = analogRead(firstsensPin);
time = micros();
while (val2 > 30) val2 = analogRead(secondsensPin);
time2 = micros();
shots++;
elap = time2 - time;
mps = (float)(dist*1000)/elap;
sumspeed += mps;
avgspeed = (float)sumspeed/shots;
lcd.setCursor(0,1);
lcd.println(mps);
lcd.print(avgspeed);
}
void setup()
{
lcd.begin(16, 2);
lcd.clear();
lcd.print("Ready...");
}
void loop()
{
val = analogRead(firstsensPin);
val2 = analogRead(secondsensPin);
while (val > 40) val = analogRead(firstsensPin);
time = micros();
while (val2 > 40) val2 = analogRead(secondsensPin);
time2 = micros();
shots++;
elap = time2 - time;
mps = (float)(dist*1000)/elap;
sumspeed += mps;
avgspeed = (float)sumspeed/shots;
lcd.setCursor(0,0);
lcd.print("Cur speed: ");
lcd.println(mps,2);
lcd.print("Avg speed: ");
lcd.print(avgspeed,2);
}
lcd.setCursor(0,0);
lcd.print("Cur speed: ");
lcd.print(mps, 1);
lcd.setCursor(0,1);
lcd.print("Avg speed: ");
lcd.print(avgspeed, 1);
reposicionando o cursor, temos certeza de que ele escreve nas duas linhas diferentes.
O , 1 deve indicar no visor para imprimir apenas um decimal.
Para o problema de sobreposição, você deve escrever espaços vazios antes de reescrever o número; é
claro que depois de escrever os espaços, é necessário reposicionar o cursor.
Para a mídia, talvez a fórmula precise ser revisada.
Se você mantiver o Arduino conectado ao PC, faça uma pequena depuração imprimindo as velocidades e o
tempo decorrido, bem como o número de disparos, na porta serial. Através do Monitor serial, você pode
ver se há comportamentos anormais.
void loop()
{
val = analogRead(firstsensPin);
val2 = analogRead(secondsensPin);
while (val > 40) val = analogRead(firstsensPin);
time = micros();
Serial.println("primo sensore");
while (val2 > 40) val2 = analogRead(secondsensPin);
time2 = micros();
Serial.println("secondo sensore");
shots++;
elap = time2 - time;
mps = (float)(dist*1000)/elap;
sumspeed += mps;
avgspeed = (float)sumspeed/shots;
Serial.print("Cur speed: ");
Serial.println("corrente");
Serial.print(mps, 1);
Serial.print("Avg speed: ");
Serial.println("media");
Serial.print(avgspeed, 1);
Serial.println("secondamedia");
}
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(firstsensPin);
val2 = analogRead(secondsensPin);
while (val > 40) val = analogRead(firstsensPin);
startTime = micros();
while (val2 > 40) val2 = analogRead(secondsensPin);
elapsedTime = micros() - startTime;
shots++;
mps = (float)(dist*1000)/elapsedTime;
sumspeed += mps;
avgspeed = (float)sumspeed/shots;
Serial.print("Cur speed: ");
Serial.print(mps, 1);
Serial.print("Avg speed: ");
Serial.print(avgspeed, 1);
}
Éste quizás sea uno de los proyectos más buscados para hacer con Arduino.
Lo que hace éste proyecto tan buscado, es porque los buenos cronógrafos son costosos y no muy
fáciles de conseguir. El hecho de que sean construidos por uno mismo le da ese toque de
personalidad y lo hace además divertido.
Entonces, después de buscar, buscar, buscar y buscar finalmente encontré el código, al cual le hice
unas pequeñas modificaciones.
Por ahora lo he probado sólo con dos botones conectados a los pines digitales 2 y 3 y todo parece
estar en orden.
/*
Tomado de http://aeroquad.com/showthread.php?845-How-do-I-make-a-
tachometer-with-my-spare-arduino-board-and-IR-LED-and-RECEIVER
Modificado por Pablo Andrade Mejía http://www.arduinolab.wordpress.com
05 de Noviembre de 2012
Aquellos que tengan dudas acerca de cómo se debe conectar los sensores para
que funcione correctamente
hagan click aquí http://www.instructables.com/id/Arduino-Based-Optical-
Tachometer/step3/IR-Detector-Circuit/
Los fotodiodos o fototransistores son nombrados como attachInterrupt(0, fro
nt, CHANGE); Éste está relacionado
con el pin digital 2, y, el attachInterrupt(1, rear, CHANGE); Éste está rel
acionado con el pin digital 3
Los fotodiodos deben tener una resistencia entre 10k y 100kohm conectados a
l colector (pin, o pata larga) y esta al pin digital
para asegurarnos que cuando el haz de luz sea interrumpido el voltaje llegu
e a 0 o tierra
*/
#include <LiquidCrystal.h>
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Super Chrono");
Serial.print("Cronografo");
lcd.setCursor(0, 1);
lcd.print("by Honk");
delay(700);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Initializing...");
Serial.println("Inicializando");
delay(700);
lcd.clear();
startChrono = 0;
elapsed = 0;
fpsSpeed = mpsSpeed = 0;
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
/*
Sí los resultados no son los esperados donde dice CHANGE cambien por RISI
NG o LOW
tanto como en attachInterrupt(0, front, " "); como en attachInterrup
(1, rear, " ");
lcd.setCursor(0, 0);
lcd.print("Take a shot!");
Serial.println("Preparado para disparar?");
}
void loop()
{
//Start counting when interrupted
if(stateFront == LOW && startChrono == 0)
{
startTime = micros(); // Count microseconds since start
startChrono = 1; // Set Chrono flag
digitalWrite(led1, HIGH);
}
digitalWrite(led2, HIGH);
mpsSpeed = (LENGTH*(MICRO2SEKCOEFF)) / elapsed; // s = v *
t, v = s / t
fpsSpeed = mpsSpeed * MPS2FPSCOEFF;
lcd.clear();
lcd.print("Fps: ");
lcd.print(fpsSpeed);
Serial.println("PPS(Pies por segundo) ");
Serial.print(fpsSpeed);
lcd.setCursor(0, 1);
lcd.print("m/s: ");
lcd.print(mpsSpeed);
Serial.println("Metros por segundo ");
Serial.print(mpsSpeed);
startChrono = 0;
delay(500);
digitalWrite(led2, LOW);
digitalWrite(led1, LOW);
void front()
{
stateFront = !stateFront;
}
void rear()
{
stateRear = !stateRear;
}
Todo empieza cuando el proyectil pasa por los sensores de luz, cuando uno el primero detecta una
sombra que es causada por el proyectil al pasar. Ésta señal eléctrica es enviada al micro el cual
empieza a contar la cantidad de tiempo, cuando el proyectil pasa por el segundo sensor causa que
micro pare de contar la cantidad de tiempo, una vez esto ha ocurrido aplica la siguiente ecuación
v= d/t dónde v es velocidad, d es distancia (la cual ya debe ser conocida) y t es tiempo, entonces
sería como decir velocidad es igual a distancia sobre tiempo. Una vez todo esto ha ocurrido la
información se muestra en una pantalla LCD.
Suena simple, pero cuando llegamos a la parte de programación todo cambia.
Ahora hablemos de los sensores de luz. Generalmente éstos sensores de luz son conocidos como
fotodiodos o fototransistores, sabemos que los transistores tienen tres terminales una llamada
colector, otra base y una llamada emisor, y la manera en que éstos funcionan es cuando se aplica
una cantidad de corriente a la base otra cierta cantidad de corriente puede fluir a del colector al
emisor.
Los fototransistores a diferencia de los transistores comunes tienen dos terminales colector la
terminal más larga y emisor la terminal más corta, pero la corriente sólo puede fluir de colector a
emisor si hay luz sobre el de manera que cuando un proyectil bloquea los sensores la cantidad de
corriente que fluye disminuye cantidades, pero no lo suficiente para que el micro lo determine
como que no hay corriente, así que se usan resistencias para hacer caer el voltaje a cero o tierra.
Ahora les dejaré un ejemplo de cómo deben ir los sensores conectados a la Arduino y el código.
/*
Tomado de http://aeroquad.com/showthread.php?845-How-do-I-make-a-
tachometer-with-my-spare-arduino-board-and-IR-LED-and-RECEIVER
Modificado por Pablo Andrade Mejía http://www.arduinolab.wordpress.com
05 de Noviembre de 2012
Los fotodiodos deben tener una resistencia entre 10k y 100k ohm conectados
al emisor (pin, o pata corta) y ésta a los pines digitales
para asegurarnos que cuando el haz de luz sea interrumpido el voltaje llegu
e a '0' o tierra
#include <LiquidCrystal.h>
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Super Chrono");
Serial.print("Cronografo");
lcd.setCursor(0, 1);
lcd.print("by Honk");
delay(700);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Initializing...");
Serial.println("Inicializando");
delay(700);
lcd.clear();
startChrono = 0;
elapsed = 0;
fpsSpeed = mpsSpeed = 0;
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
/*
Sí los resultados no son los esperados donde dice CHANGE cambien por RISI
NG o LOW
tanto como en attachInterrupt(0, front, " "); como en attachInterrup
(1, rear, " ");
lcd.setCursor(0, 0);
lcd.print("Take a shot!");
Serial.println("Preparado para disparar?");
}
void loop()
{
//Start counting when interrupted
if(stateFront == LOW && startChrono == 0)
{
startTime = micros(); // Count microseconds since start
startChrono = 1; // Set Chrono flag
digitalWrite(led1, HIGH);
}
digitalWrite(led2, HIGH);
mpsSpeed = (LENGTH*(MICRO2SEKCOEFF)) / elapsed; // s = v *
t, v = s / t
fpsSpeed = mpsSpeed * MPS2FPSCOEFF;
lcd.clear();
lcd.print("Fps: ");
lcd.print(fpsSpeed);
Serial.println("PPS(Pies por segundo) ");
Serial.print(fpsSpeed);
lcd.setCursor(0, 1);
lcd.print("m/s: ");
lcd.print(mpsSpeed);
Serial.println("Metros por segundo ");
Serial.print(mpsSpeed);
startChrono = 0;
delay(500);
digitalWrite(led2, LOW);
digitalWrite(led1, LOW);
void front()
{
stateFront = !stateFront;
}
void rear()
{
stateRear = !stateRear;
}
Blog da Gadjet
Atualização do cronógrafo
Quando fiz um parafuso menor no sensor que se conectava ao PC e inseri o tempo em um aplicativo para
PC, ele me fez pensar em diferentes tipos de tela que poderiam ser usados e, depois de uma boa olhada na
rede, encontrei algumas opções .
O primeiro foi um display LED de 7 segmentos, com diferentes formas e tamanhos e ainda assim pode ser
bastante portátil quando adicionado ao sensor.
O único problema com esses monitores é a quantidade de E / S necessária para conduzi-los, pois cada um
dos segmentos exige condução. Encontrei a mochila de tela Adafruit 7, que tira todo o trabalho duro de
controlar as telas de 7 segmentos.
O dispositivo é baseado em um chip Holtek HT16K33 que controla os segmentos de LED e se conecta ao
Arduino através do barramento I2C e possui uma biblioteca que facilita o envio de dados para a tela.
Comprei um dos monitores do Ebay e o colei na lateral do tubo do sensor. Em seguida, adicionei o código
ao esboço para enviar o valor em pés / segundo ao monitor depois de enviar o valor uSecond para o PC.
Isso permitiria que o cronógrafo fosse usado em conjunto com o PC via USB ou remotamente com uma
bateria, apenas lendo o valor Feet / Second.
Mostrar os pés / segundo exigiria uma tabela de pesquisa para obter a potência da velocidade e do peso
do pellet, suponho que com alguns pequenos botões adicionados, você pode inserir o peso do pellet após
a energização, mas antes da primeira tacada alterne entre o FPS e a leitura de energia a cada 10 segundos
?.
Idealmente, eu gostaria de usar um pouco de transparência, mas só tenho vermelho ou branco, mas
surpreendentemente o LED mostra muito bem o PVC.
Randy
randydavis387 em gmail.com
Gadgets
4 de junho de 2013 às 06:14
então, como posso criar um arquivo skecth para essa tela, graças a
serkan
sekocan em gmail.com
15 de abril de 2014 às 12:25
serkan,
Não sabe ao certo o que você pergunta, a página que você vincula à sua postagem contém o código da tela
Você já tentou esse código?
15 de abril de 2014 às 16:20
outra pergunta;
eu tinha 2 pinos ir led e emissor olhei seu desenho fritzing (7 seg disp) opl550 3 pinos (+ , logicOut, -)
Você também pode visitar o site www.arduino.cc. Existe um bom fórum para obter respostas e código de
tutorial.
15 de abril de 2014 às 17:35
e rastrear isso;
http://www.aliexpress.com/item/IIC-I2C-1602-blue-LCD-module-provides-libraries-For-
Arduino/1062018842.html
http://s27.postimg.org/3r9iz9ttv/IMG_20140416_072842.jpg
http://s27.postimg.org/6mmm64xtv/IMG_20140416_073028.jpg
16 de abril de 2014 às 05:36
http: // 3.bp.blogspot.com/-i10QqXOQeDA/URfGY4-
MhzI/AAAAAAAALHk/OOKinhG2BHk/s1600/Prototype+tube+setup.jpg
16 de abril de 2014 às 23:57
Isso fornecerá uma saída variável para a entrada ADC, mas haverá um ponto em que o nível será visto
como digital 1 ou 0, acho que é um terço do VCC ou abaixo de 0 ou acima de dois terços do VCC para ser 1.
Você também pode alimentar o sinal através de um Schmitt Trigger ou buffer opamp para obter uma saída
digital limpa.
Seria muito mais fácil usar os mesmos detectores de infravermelho que eu usei ...... :-) especialmente se
você não estiver familiarizado com a eletrônica.
17 de abril de 2014 às 19:33
http://www.electroschematics.com/tag/photodiode-circuits/?ModPagespeed=noscript
Espero que ajudem.
17 de abril de 2014 às 19:40
http: //www.youtube.com/watch?v=tAWjfIinq3Pode
O meu funciona, então você deve! Lembre-se de que os LEDs devem estar em cada lado de um tubo.
19 de abril de 2014 às 08:36
Conecte dois comutadores às entradas (pinos 2 e 3, eu acho) e use os comutadores para acionar as
entradas e verifique se os dados seriais estão de acordo.
Quando isso funcionar conforme o esperado, adicione os gatilhos de infravermelho, mas verifique se a
configuração é adequada para obter um bom gatilho de feixe de ruptura.
19 de abril de 2014 às 15:59
Duração 24 uS
Duração 268740 uS
Duração 73940 uS
Duração 24 uS
Duração 20 uS
Duração 20 uS
Duração 20 uS
Duração 20 uS
Duração 88064 uS
Duração 20 uS
Duração 166816 uS
Duração 145036 uS
Duração 91928 uS
Duração 20 uS
Duração 107672 uS
19 de abril de 2014 às 20:14
Se as leituras parecerem boas, o esboço será bom. O próximo passo será resolver os feixes de
infravermelho.
19 de abril de 2014 às 20:24
SensDist longo não assinado = 333333; // Distância entre sensores em pés * 1000000
7 de maio de 2014 às 15:23
SensDist longo não assinado = 333333; // Distância entre sensores em pés * 1000000
como você conseguiu 33333? Qual é a fórmula que esta coisa pode me explicar obrigado ...
3 de junho de 2014 às 21:56
Devo admitir que realmente não olhei para a variação de fps em uma série de fotos. Só me interessei pelo
aspecto de potência. É possível que o software esteja introduzindo uma variação na leitura, talvez usando
interrupções para acionar o medição poderia melhorar a consistência, eu vou olhar para ele.
11 de junho de 2014 às 18:43
http://www.youtube.com/watch?v=zFlcWr1jlRg
8 de novembro de 2014 às 05:00
Duração 534040
Duração 224540
Duração 200288
Duração 3414768
Duração 90524
Duração 32500 Movo
a caneta de um sensor para outro.
Quanto mais lento, maior a pontuação.
Eu tenho que decifrar o código. Ao mesmo tempo eu sou ruim :(
15 de novembro de 2015 às 17:02
2. Use algum software para PC (link em outra das minhas postagens) para mostrar os dados e inserir o peso
do pellet.
3. Adicione uma interface serial Bluetooth (discutida em outra postagem) e envie a hora para o seu
telefone e use o aplicativo para adicionar o peso e calcular a potência. (link para o aplicativo também em
um post)
Se a distância entre os sensores for 100 mm, o resultado será 328083. É este o resultado que requer
arredondamento para 333333?
18 de novembro de 2015 às 12:24
Também usei um osciloscópio para verificar o tempo entre pulsos e comparar com a medida calculada pelo
esboço.
BTW, desde então, modifiquei o esboço para usar as interrupções, mas não o testei completamente.
18 de novembro de 2015 às 15:46
Eu uso um tubo grosso de paredes de 3 a 5 mm com um diâmetro externo de 20 mm, isso cria um ponto
ideal para o detector e permite que o pellet de passagem bloqueie a luz infravermelha de alcançá-lo.
A distância é de 100mm, tento medir a velocidade do HW97k. Talvez rápido demais para o Arduino Nano.
27 de novembro de 2015 às 16:24
Usei um tubo de alumínio (cerca de 20 mm de diâmetro externo com furo de 14 mm) e, em seguida,
perfurei os dois orifícios de 3 mm no tubo com 60 mm de distância e fixei os sensores nas laterais do tubo.
Em seguida, usei uma caneta bic barata com o tubo de tinta removido e solte os pellets no tubo de
alumínio para que caiam no centro entre os sensores.
Você também pode usar um rolamento de esferas um pouco menor que o diâmetro interno do tubo, isso
garantirá que as vigas sejam quebradas.
27 de novembro de 2015 às 18:56
60mm dividido por 25,4 fornece a distância percorrida em polegadas = 2,36 polegadas
Quando o valor 196850 é dividido pelo tempo gasto em microssegundos, ele fornece a resposta em pés
por segundo, se o espaço entre os feixes do gatilho for alterado, o valor será alterado para ainda fornecer
o FPS.
Isso ajuda?
29 de novembro de 2015 às 21:37
#include
#include
#include
#define I2C_ADDR 0x27 // << ----- Adicione seu endereço aqui. Encontre-o no scanner I2C
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7 #define firstsensor_1
10
#define 12 longo1
;
tempo não assinado2;
float fps, elap, ms, joule;
LiquidCrystal_I2C lcd (I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
void setup () {
lcd.begin (16,2); // << ----- Meu LCD 16x2
lcd.setBacklightPin (BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight (HIGH); // Ligue a luz de fundo
Serial.begin (9600);
pinMode (firstsensor_1, INPUT);
pinMode (secoundsensor_2, INPUT);
digitalWrite (firstsensor_1, HIGH);
digitalWrite (sensor de segundo_2, ALTO);
reset_variables ();
}
void loop () {
lcd_i2c ();
serial ();
void printserial () {
Serial.print ("número da foto: \ t");
Serial.println (counter_shots ++);
elap = tempo2 - tempo1;
fps = 328083 / elap;
Serial.print ("FPS \ t");
Serial.println (fps);
ms = fps * 0,3048;
Serial.print ("MPS \ t");
Serial.println (ms);
bullet_weight = 0,51;
bullet_weight_kg = bullet_weight / 1000;
void reset_variables () {
time1 = 0;
time2 = 0;
}
30 de novembro de 2015 às 14:09
Eu tento fazer os sensores, a distância do sensor 0,5 pés, quando modifiquei o esboço usando a tela
TM1637, ele diz: "error: 'matrix' não foi declarado neste escopo", o que devo fazer?
thx antes
30 de julho de 2016 às 11:30
#include
#include
#define CLK 2 // pode ser qualquer pino digital
#define DIO 3 // pode ser qualquer pino digital
TM1637Display display (CLK, DIO ); // configura o display de 4 dígitos.
.
.
.
.
.
status de saída 1
'matriz' não foi declarado nesse escopo
wire.h
TM1637Display.h
31 de julho de 2016 às 05:40
Eu não estou familiarizado com a tela, então terei que dar uma olhada, mas não posso fazê-lo
imediatamente.
31 de julho de 2016 às 09:47
não tenho sensor op550 ir, é difícil encontrá-lo aqui na Indonésia, portanto, para testá-lo ou não, uso 2
módulos de sensor de prevenção de infravermelho, conecto a saída aos pinos 4 e 5. coloquei esses
módulos na placa de ensaio apenas 1 polegada de distância entre sensores apenas para teste, sensores ao
ar livre, defina os módulos de potência imediatamente antes das luzes indicadoras acenderem, então
movo meu dedo + - 1 polegada sobre os sensores o mais rápido possível por várias vezes. está
funcionando, o indicador LED dos sensores pisca e o visor mostra valores. Eu tento atirar com um rifle de
pressão nos sensores, mas infelizmente os sensores não detectam o pellet, talvez o pellet seja muito
pequeno ou muito rápido.
Então comprei receptores de LED e IR universais geralmente para controle remoto de TV / DVD, coloque-os
na tábua de mostra valores aleatórios de continuidade ..
*/
#include Wire.h
#include TM1637Display.h #definir
CLK 2 // pode ser qualquer pino digital
#define DIO 3 // pode ser qualquer pino digital
TM1637Display display (CLK, DIO); // configura o display de 4 dígitos.
void setup () {
//Serial.begin(57600);
Serial.begin (9600); // use para o módulo BT não modificado
display.setBrightness (0x0f); // Configuração 7 Seg Display
pinMode (Trip_in_1, INPUT);
pinMode (Trip_in_2, INPUT);
digitalWrite (Trip_in_1, HIGH); //
ativa o resistor de pull digitalWrite (Trip_in_2, HIGH);
display.showNumberDec (8888);
reset_variables ();
}
void loop () {
switch (current_state) {
case WAIT_STATE:
if (digitalRead (Trip_in_1) == LOW) {
Gatilho_1 = micros ();
current_state = MONITOR_STATE;
// Timer1.setPeriod (my_timeout);
}
quebrar;
case MONITOR_STATE:
while (digitalRead (Trip_in_2) == HIGH); // faz loop até que o gatilho fique LOW &&! is_timeout
if (! is_timeout)
Trigger_2 = micros ();
current_state = OUTPUT_STATE;
quebrar;
case OUTPUT_STATE:
// if (Trip2> Trip1) {
output_serial_info ();
reset_variables ();
current_state = WAIT_STATE;
//}
break;
}
}
void output_serial_info () {
// Serial.print ("Duration \ t");
Serial.println ((Trigger_2 - Trigger_1));
//Serial.println ("uS");
display.showNumberDec (500000 / (Trigger_2 - Trigger_1));
void reset_variables () {
Trigger_1 = 0;
Gatilho_2 = 0;
is_timeout = false;
//Timer1.stop ();
}
2 de agosto de 2016 às 17:11
A razão de eu usar os detectores de infravermelho é que eles são muito rápidos e têm uma saída digital.
2 de agosto de 2016 às 19:05
/*
*/
#include
#include "TM1637Display.h" #definir
CLK 2 // pode ser qualquer pino digital D2
#define DIO 3 // pode ser qualquer pino digital D3
TM1637Display display (CLK, DIO); // configura o display de 4 dígitos.
void setup () {
//Serial.begin(57600);
Serial.begin (9600); // use para o módulo BT não modificado
display.setBrightness (0x0f); // Configuração 7 Seg Display
pinMode (Trip_in_1, INPUT);
pinMode (Trip_in_2, INPUT);
digitalWrite (Trip_in_1, HIGH); //
ativa o resistor de pull digitalWrite (Trip_in_2, HIGH);
display.showNumberDec (8888);
reset_variables ();
void loop () {
switch (current_state) {
case WAIT_STATE:
if (digitalRead (Trip_in_1) == LOW) {
Gatilho_1 = micros ();
current_state = MONITOR_STATE;
// Timer1.setPeriod (my_timeout);
}
quebrar;
case MONITOR_STATE:
while (digitalRead (Trip_in_2) == HIGH); // faz loop até que o gatilho fique LOW &&! is_timeout
if (! is_timeout)
Trigger_2 = micros ();
current_state = OUTPUT_STATE;
quebrar;
case OUTPUT_STATE:
// if (Trip2> Trip1) {
output_serial_info ();
reset_variables ();
current_state = WAIT_STATE;
//}
break;
}
}
void output_serial_info () {
void reset_variables () {
Trigger_1 = 0;
Gatilho_2 = 0;
is_timeout = false;
//Timer1.stop ();
}
Mas não consigo escrever no meu Arduino Nano. Você pode me ajudar no que eu faço de errado.
3 de fevereiro de 2017 às 21:35
Fiz o download da biblioteca TM1637Display e a incluí eo esboço compilado no Arduino 1.8.0, você
instalou o lbrary corretamente?
void setup () {
//Serial.begin(57600);
Serial.begin (9600); // use para o módulo BT não modificado
display.setBrightness (0x0f); // Configuração 7 Seg Display
pinMode (Trip_in_1, INPUT);
pinMode (Trip_in_2, INPUT);
digitalWrite (Trip_in_1, HIGH); //
ativa o resistor de pull digitalWrite (Trip_in_2, HIGH);
display.showNumberDec (8888);
reset_variables ();
void loop () {
switch (
estado_ atual ) { case WAIT_STATE:
if (digitalRead (Trip_in_1) == LOW) {
Trigger_1 = micros ();
current_state = MONITOR_STATE;
// Timer1.setPeriod (my_timeout);
}
quebrar;
case MONITOR_STATE:
while (digitalRead (Trip_in_2) == HIGH); // faz loop até que o gatilho fique LOW &&! is_timeout
if (! is_timeout)
Trigger_2 = micros ();
current_state = OUTPUT_STATE;
quebrar;
case OUTPUT_STATE:
// if (Trip2> Trip1) {
output_serial_info ();
reset_variables ();
current_state = WAIT_STATE;
//}
break;
}
}
void output_serial_info () {
void reset_variables () {
Trigger_1 = 0;
Gatilho_2 = 0;
is_timeout = false;
//Timer1.stop ();
}
4 de fevereiro de 2017 às 23:34
A primeira vez que eu estava tendo os mesmos problemas. Eu tenho desinstalado todo o software.
E eu tento novamente. agora funciona com meu esboço e o esboço de vocês. O problema era um
problema de hardware e software do meu pc.
O esboço em dois postes acima deste, não funciona (problema de compilação / construção com placa
nano).
Saudações
2 de dezembro de 2017 às 08:16
https://www.thingiverse.com/thing:1633392
7 de fevereiro de 2018 às 12:08
http://www.france-airsoft.fr/forum/index.php?showtopic=111787 Em
vez de fabricar um tubo com 10 cm de espaçamento,
gostaria de usar o seu apoio no software "Kronyview" no fórum
que pudermos ajuste a distância entre o led,
mas eu queria ter certeza de que o resultado permanece preciso nessa curta distância.
Meu sistema é composto por 4 LEDs (2ir e 2PT) alimentados por 2 baterias e um conector conectado ao PC.
O custo é mais barato do que gastar US $ 40 em material, o que seria como pegar um novo cronógrafo no
aliexpress (xcortech ...)
7 de fevereiro de 2018 às 12:59
Eu acho que o PC seria rápido o suficiente, mas pode ser um problema se houver um filtro de entrada na
entrada de áudio, você pode fazer a pergunta no fórum? Eu acho que seria bom se o software permite
selecioná-lo, talvez você possa trabalhar para igualar a uma frequência e ver se está abaixo de 20khz?
7 de fevereiro de 2018 às 18:55
Você tem Facebook? como mais tarde, posso discutir com você se tiver algum problema com o sistema
Arduino.
7 de fevereiro de 2018 às 19:03
2X https://www.gotronic.fr/art-diode-emettrice-sfh4554-24269.htm
2X https://www.gotronic.fr/art-phototransistor-ire5-2314.htm
Para os resistores em série dos emissores, usei 150 ohms e não 15 ohms.
Se você quiser postar seu endereço de e-mail disfarçado, enviarei um e-mail e também excluo a postagem
imediatamente.
7 de fevereiro de 2018 às 19:49
https://gadjetsblog.blogspot.co.uk/2013/07/diy-chrono-shopping-list.html
É possível usar fotodiodos de IR padrão, mas eles não têm um saída digital para que você precise usar
alguns componentes eletrônicos para condicionar a saída da entrada do processador e verificar se os
tempos de resposta são rápidos o suficiente.
Essa é uma pergunta comum e pode ajudar você a ler os comentários de outras pessoas.
23 de maio de 2018 às 06:35
Tentei recriar um protótipo bastante grosseiro usando os mesmos leds IR e foto-transistores do RS. Eu
tenho o LED e o sensor separados por 20 mm (não a distância entre os dois sensores) montados em dois
suportes de alumínio em forma de L - onde eu perfurei orifícios de 3 mm para os leds / sensores. Nota:
Consegui separar no máximo 30 mm.
Meu código lê o sensor a cada 50ms no loop principal. No entanto, eu recebo resultados aleatórios. Ele
registra a presença de um dedo que cobre o sensor, mas nem sempre retorna ao seu estado padrão -
apenas flutua entre ligado e desligado.
void setup () {
Serial.begin (57600);
Serial.print ("Iniciando ...");
pinMode (sensor1, ENTRADA);
digitalWrite (sensor1, ALTO);
}
void loop () {
Serial.print (digitalRead (sensor1));
atraso (50);
}
Você pode esclarecer (desculpe o trocadilho) sobre por que os resultados aleatórios, por favor?
Dave
24 de julho de 2018 às 20:33
Vou tentar testar encoberto ou no escuro para ver se isso altera os resultados.
obrigado
24 de julho de 2018 às 21:41
/*
Sketch to measure the time in uSeconds between two IR sensors being triggered
and sending the result to the serial port.
Use with the PC application to display results
Version 0.1
Phil Grant 25/04/13
*/
#include <Wire.h>
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
Adafruit_7segment matrix = Adafruit_7segment();
void setup () {
Serial.begin(57600);
matrix.begin(0x70); //Setup 7 Seg Display
pinMode(Trip_in_1, INPUT);
pinMode(Trip_in_2, INPUT);
digitalWrite(Trip_in_1, HIGH); //turn on pullup resistor
digitalWrite(Trip_in_2, HIGH);
matrix.print(10000);
matrix.writeDisplay();
reset_variables();
}
void loop () {
switch (current_state) {
case WAIT_STATE:
if(digitalRead(Trip_in_1)==LOW) {
Trigger_1 = micros();
current_state = MONITOR_STATE;
// Timer1.setPeriod(my_timeout);
}
break;
case MONITOR_STATE:
while(digitalRead(Trip_in_2)==HIGH); //loop until the Trigger goes LOW && !is_timeout
if(!is_timeout)
Trigger_2 = micros();
current_state = OUTPUT_STATE;
break;
case OUTPUT_STATE:
//if (Trip2 > Trip1) {
output_serial_info();
reset_variables();
current_state = WAIT_STATE;
//}
break;
}
}
void output_serial_info() {
// Serial.print("Duration\t");
Serial.println((Trigger_2 - Trigger_1));
//Serial.println(" uS");
matrix.print(199475/(Trigger_2 - Trigger_1));
matrix.writeDisplay();
}
void reset_variables() {
Trigger_1 = 0;
Trigger_2 = 0;
is_timeout = false;
//Timer1.stop();
}
Neste exemplo, veremos como conectar um receptor de IR. Geralmente, eles exigem Vcc
(5v), mas achei que funcionava bem com 3v3, GND e existem dados que você conecta ao
seu Arduino. Aqui está um IR típico mostrando a pinagem.