Съдържание:
- Стъпка 1: Функция
- Стъпка 2: Теория на работа и точност
- Стъпка 3: Схеми и списък с части
- Стъпка 4: PCB Gerber файл
- Стъпка 5: Запоявайте вашата печатна платка
- Стъпка 6: Програмиране на Atmega328p
- Стъпка 7: LCD дисплей
- Стъпка 8: STL файл
- Стъпка 9: Ротационен енкодер
- Стъпка 10: Сензорна тръба
- Стъпка 11: Алтернатива на сензорните тръби
- Стъпка 12: Пелета върху осцилоскоп и калибриране
- Стъпка 13: Още …
Видео: Хронограф с въздушна пушка, хроноскоп. 3D печат: 13 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:50
Здравейте на всички, днес ще преразгледаме проект, който направих през 2010 г. Хронограф с въздушна пушка. Това устройство ще ви каже скоростта на снаряд. Пелетна, BB или дори въздушна мека BB пластмасова топка.
През 2010 г. си купих въздушна пушка за забавление. Удряше консерви, бутилки, прицелваше се. Знам, че скоростта на този пистолет е била максимална 500 фута/сек. Защото това е законът на Канада. Предлагат се някои по -силни въздушни пушки, но трябва да имате лиценз за и не можете да си купите тези неща в Walmart.
Сега, когато имах този лиценз, можех да си купя друг. Но кратка история, същият пистолет беше на разположение на САЩ на 1000 фута/с. КАКВО!? Същият пистолет? да … В Канада ударът има дупка и пружината е по -мека.
Първото нещо, което трябва да направите, е да запълните дупката. Това направих с спойка. Следващото нещо, което трябва да направите, е да поръчате резервна пружина. Но изчакайте … каква е текущата скорост на новата ми играчка? Наистина ли пролетта е необходима? Не знам и искам да знам. Искам да знам сега, но как?
Затова направих този проект. Всичко, от което се нуждаех, беше 2 сензора, UC и дисплей и ние сме в бизнес.
Миналата седмица видях стария си син хронограф на рафт и си говоря: „Защо не споделиш това и не направиш инструкции с него?“Между другото, бихме могли да повишим точността и да добавим индикатор за батерията. Поставете 1 бутон вместо 2 за включване/изключване. Всички повърхностен монтаж. Сега сме 2020!
Ето го … нека започнем!
Стъпка 1: Функция
-Скорост на пелетите
-Скорост
-20 mhz работи, огромна точност
-Автоматично изключване
-Показва се напрежението на батерията
-схематично налично
-налична платка
-наличен списък с части
-STL наличен
-Наличен C код
Стъпка 2: Теория на работа и точност
-Имаме UC, работещ на 20Mhz. Използваният осцилатор е TCX0 +-2,5 ppm
-Имаме 2 сензора на 3 инча далеч един от друг.
-Снарядът удари първия сензор. uC стартиране на броене (timer1)
-Снарядът удари втория сензор. uC спре да брои.
-uC проверка на таймер1 стойност, направете математика и покажете скоростта и скоростта.
Използвам 16 -битов таймер1 + флаг за препълване tov1. 17 бита общо за 131071 "тик" за пълен брой.
1/20 mhz = 50 ns. Всеки тик е 50ns
131071 x 50 ns = 6.55355 ms до 3 инча.
6.55355 ms x 4 = 26.21 ms до 12 инча.
1/26,21 ms = 38,1472637 фута/сек
Това е най -бавната скорост, която устройството може да измери.
Защо 20 mhz? Защо не използвате вътрешните 8 mhz или дори кристала?
Първото ми устройство използваше вътрешния осцилатор. Работеше, но този не беше достатъчно точен. Разликата е твърде голяма. Кристалът е по -добър, но температурата е с различна честота. Не можем да направим точно измервателно устройство с това. Освен това, колкото по -висока е честотата, толкова повече тик ще се броят за същата скорост. Вземането на проби ще бъде по -добре да има много добра точност. Тъй като тикът не се дели, загубата е малка, ако работният цикъл е бърз.
При 20 MHz имаме стъпки от 50 ns. Знаем ли колко точно е 50 ns за снаряд при 38 ft/s.
38.1472637 ft/s разделено на 131071 = 0, 000291042 фута
0, 0003880569939956207 фута x 12 = 0, 003492512 инча
1/0, 003492512 = 286.37 ". С други думи. При 50 ft/s имаме точност от +- 1/286" или +- 0, 003492512 инча
Но ако осцилаторът ми е най -лошият и работи на 20 mhz +2,5 ppm, добре ли е? Нека разберем…
2,5 ppm от 20 000 000 е: (20000000/1000000) x 2,5 = 20000050 Hz
Така че в най -лошия случай имаме още 50 часовника на 20 mhz. Това е 50 часовник на 1 секунда. Колко повече тик на timer1, ако пелетите вършат същата скорост (38.1472637 фута/сек или 6.55ms)?
1/20000050 = 49.999875 ns
49.999875 ns x 131071 = 6, 553533616 ms
6, 553533616 ms x 4 = 26,21413446 ms
1/26.21413446 ms = 38.14735907 фута/сек
Така че имаме 38.14735907 фута/с вместо 38.1472637 фута/с
Сега знаем, че 2,5 ppm не влияе на резултата.
Ето един пример за различна скорост
За 1000 фута/сек
1000 ft/s x 12 е 12000 инча/s
1 секунда за 12000 "колко време да направите 3"? 3x1/12000 = 250 us секунди
250 us / 50 ns = 5000 тик.
Таймер 1 ще бъде на 5000
uC направете математиката и се показва 1000 ft/s. Дотук добре
За 900 фута/сек
900 ft/s е 10800 /s
3x1/10800 = 277.77 us
277, 77 ns / 50 ns = 5555, 5555 тик
Таймер 1 ще бъде на 5555
uC направете математиката и 900, 09 ще се покаже вместо 900
Защо ? тъй като таймер 1 е на 5555 и 0, 5555 е загубен. Таймерът за включване на таймера не се дели.
Имаме грешка за 0, 09 на 900 ft/s
0, 09/900x100 = 0, 01% само грешка
За 1500 ft/s1500 ft/s е 18000 /s 3x1/10800 = 166,66 us
166,66 us / 50 ns = 3333,333 tic Timer 1 ще бъде на 3333
uC направете математиката и 1500.15 ще се покаже вместо 1500, това е.15/1500x100 = 0, 01%
За 9000 фута/сек
9000 x 12 = 180000 инча / сек
3x1/180000 = 27,7777 us
27,77 us / 50 ns = 555, 555
Таймер 1 ще бъде на 555 и ще се покаже 4/(1/555x50ns) 9009, 00 ще се покаже
Тук грешката е от 9 фута/сек при 9000 = 0, 1%
Както можете да видите, % грешка се увеличава, когато скоростта е по -висока. Но останете <0,1%
Тези резултати са много добри.
Но точността не е линейна. При 10000 ft/s е 0, 1 %. Добро ново е, че никога не тестваме пелети от 10 000 ft/s.
Друго нещо, което трябва да имате предвид. Когато се случи прекъсване, uC винаги завършва последната инструкция, преди да влезе в прекъсване. Това е нормално и всички UC правят това. Ако кодирате arduino, в C или дори асемблер. През повечето време ще чакате завинаги … да чакате. Проблемът е, че в цикъл прекарваме 2 цикъла. Обикновено това не е важно. Но в нашия случай. ДА, всеки тик е важен. Нека да разгледаме безкраен цикъл:
асемблер:
цикъл:
rjmp цикъл
В C:
докато (1) {}
Всъщност компилаторът C използва инструкция rjmp. RJMP е 2 цикъла.
Това означава, че ако прекъсването се случи с първия цикъл, ние губим един цикъл (тик) (50ns).
Моят начин да поправя това е да добавя много инструкции nop в цикъла. NOP е 1 цикъл.
цикъл:
не
не
не
не
не
rjmp цикъл
Ако прекъсването се случи по инструкция nop. Добре сме Ако това се случи на втория цикъл на инструкция rjmp, ние сме добре. Но ако това се случи в първия цикъл на инструкция rjmp, ние ще загубим един тик. Да, това е само 50 ns, но както можете да видите по -горе, 50 ns на 3 инча не е нищо. Не можем да поправим това чрез софтуер, защото не знаем кога точно се случва прекъсването. Ето защо в кода ще видите много инструкции nop. Сега съм почти сигурен, че прекъсването ще падне на инструкция nop. Ако добавя 2000 nop, имам 0, 05% да попадна на инструкцията rjmp.
Друго нещо, което трябва да имате предвид. Когато се случи прекъсване. Компилаторът прави много push and pull. Но винаги е един и същ номер. Така че сега можем да направим софтуерна корекция.
В заключение по този въпрос:
Точността за среден пелет от 1000 ft/s е 0, 01%
100 пъти по -точен от останалите 1% на пазара. Честотата е по -висока и с TCXO, по -точна
Например, 1% от 1000 ft/s е повече или по -малко 10 ft/s. Това е огромна разлика.
Стъпка 3: Схеми и списък с части
Тук реализирах моята верига за включване/изключване с един бутон. (вижте последната ми инструкция) Тази схема е много удобна и работи много добре.
Използвам atmega328p. Този е програмиран в C.
Дисплеят е стандартен двуредов LCD, съвместим с HD44780. Използва се 4 -битов режим.
За осигуряване на напрежение към TCXO 20mhz се използва регулатор 3.3v.
D1 е за LCD подсветка. По избор. Батерията ще издържи по -дълго, ако не инсталирате D1.
Всички резистори и капачки са с пакет 0805
C1.1uf 25v
C2 1uf 16v
C3 2.2uf 10v
C4.1uf
C5.1uf
C6.1uf
C7 1uf
C8.1uf
C9.1uf
C10.1uf
D1 1n4148 SM SOT123
D2 5.1v SOT123
IC1 ATMEGA328p
IC2 MIC5225-5.0YM5-TR TPS70950DBVT SOT23-DBV
OSC1 TXETDCSANF-20.000000
R1 1M
R2 1M
R4 2.2k
R5 160
R6 160
R7 1M
R8 1M
U1 MIC5317-3.3 MIC5317 SOT23-5
U2 DMG6601LVT DMG6601LVT SOT23-6
Дисплей LCD 2 ред HD44780. Няма нужда да купувате i2c модул.
Сензори:
2x излъчвател OP140A
2x приемник OPL530
Енкодер: PEC11R-4215K-S0024 *Не забравяйте да добавите 4x 10k резистора и 2x.01uf, за да направите филтъра на енкодера. вижте снимката по -долу
Стъпка 4: PCB Gerber файл
Ето гербер файлове
Стъпка 5: Запоявайте вашата печатна платка
С схематична помощ запоявайте всичките си компоненти на печатната платка. Всяка част или написана на печатна платка, r1, r2 … и така нататък.
Нямам инсталиран D1. Това е за подсветката на LCD дисплея. Това е красиво, но животът на батерията е засегнат. Затова избирам да изключвам подсветката на LCD дисплея.
Стъпка 6: Програмиране на Atmega328p
Проверете тук на стъпка 12, за да програмирате atmega328p. Предлагам тук.hex файла за това.
Ето програмата avrdude, готова за програмиране на партиден файл. Щракнете само върху програмата usbasp.bat и вашият usbasp е инсталиран правилно. Всичко ще се направи автоматично, включително бита на предпазителя.
1drv.ms/u/s!AnKLPDy3pII_vXaGPIZKMXxaXDul?e…
В този проект споделям и C изходния код. Имайте предвид, че някои бележки в него могат да бъдат на френски. Https: //1drv.ms/u/s! AnKLPDy3pII_vXUMXHdxajwGRFJx? E…
Стъпка 7: LCD дисплей
Инсталирайте лента и свържете платка и LCD заедно
Стъпка 8: STL файл
stl файл
1drv.ms/u/s!AnKLPDy3pII_vgezy0i0Aw3nD-xr?e…
Необходима е поддръжка за корпус, сензорна тръба и държач за пушка.
Отпечатал съм всички на височина.2 мм.
Стъпка 9: Ротационен енкодер
Този въртящ се енкодер е свързан към isp конектора. използва се за промяна на теглото на пелетите и за включване и изключване на устройството.
vcc isp pin 2 (издърпайте резистора)
Клема А (жълта) отидете на пин 1 на ISP
Клема В (зелена) отидете на пин 3 на ISP
Клема C (gnd) isp pin 6
Добавям 2 снимки, за да видя разликата между да имаш филтър срещу филтър. Можете лесно да видите разликата между двете.
Бутонът отива към съединителя за печатна платка SW.
Стъпка 10: Сензорна тръба
ВАЖНО:
Сензорната тръба трябва да е черна и приемникът на сензора трябва да бъде скрит
Първите ми опити бяха да имам красива червена тръба. Но това е сложно! Изобщо не работеше. Разбрах, че входящата светлина идва, пластмасата и сензорът на приемника винаги са включени.
За да имам добър резултат, нямах избор да променя цвета на черен.
Инсталирайте приемника отгоре. И скрийте прозрачната пластмаса с черна боя, лента или дъвка, черен силикон.
Инсталирайте излъчвател отдолу. Проверете с химикалка дали сензорите реагират добре. Може би дупката на излъчвателя ще трябва да се увеличи малко. това ще зависи от калибрирането на вашия принтер.
Имам и по -добър резултат на сянка. Избягвайте пряка слънчева светлина.
Стъпка 11: Алтернатива на сензорните тръби
Ако нямате 3D принтер, можете да направите същото с медна тръба. Ще работи много добре. Трудно е да се направи отвора на точно 3 инча и приемникът и излъчвателят трябва да бъдат подравнени.
Стъпка 12: Пелета върху осцилоскоп и калибриране
Това е истински пелет, преминаващ през тръбата. Сонда 1 жълта е сензор 1. Сонда 2 лилава е сензор 2.
Времето/div е 50 us.
Можем да преброим 6 дивизии по 50us. 50 us x 6 = 300 us (за 3 инча). 300 us x 4 = 1,2 ms за 1 фута
1/1.2ms = 833.33 ft/s
Можем също да видим, че сензорът обикновено е на 5v. Можем ли да блокираме излъчващата светлина, сензорът да падне до 0.
Това е начинът, по който uC стартира и спира своя conter (timer1)
Но за да знам точно дали скоростта е била точна, имах нужда от начин да го определя.
За да направя софтуерно калибриране и да проверя точността на това устройство, използвах референтен осцилатор от 10 mhz. Вижте моя GPSDO на други инструкции.
Аз захранвам друг atmega328 с тези 10 mhz. И програмирайте този в асемблер да ми изпраща 2 импулса всеки път, когато натисна бутон, за да симулира пелета. Точно както видяхме на снимката, но вместо това, за да имам истински пелети, беше друг UC, който ми изпрати 2 импулса.
При всяко натискане на бутон се изпраща 1 импулс и точно 4 ms след изпращане на друг импулс.
По този начин ще мога да балансирам софтуерния компилатор, така че винаги да се показват 1000 ft/s.
Стъпка 13: Още …
Това е първият ми прототип за 2010 г.
За всякакви въпроси или доклад за грешка можете да ми пишете. Английски или френски. Ще направя всичко възможно да помогна.
Препоръчано:
Проверка на печат без специален софтуер или принтер с MS Excel (печат на банкови чекове): 6 стъпки
Печат на чекове без специален софтуер или принтер с MS Excel (Печат на банкови чекове): Това е проста работна книга на Excel, която ще бъде много полезна за всеки бизнес да пише много банкови чекове В допълнение към техните доставчици. Не се нуждаете от специален принтер или софтуер, имате нужда само от компютър с MS Excel и нормален принтер. Да, сега можете да
Как да си направим безжична въздушна пиано ръкавица: 9 стъпки
Как да си направим безжична въздушна пиано ръкавица: Цели и функции: Нашият технологичен проект за носене е да създадем безжична ръкавица за въздушно пиано със синхронизирани светлини, използвайки основна електроника, микроконтролер като HexWear и лаптоп със софтуер Arduino и Max 8 . Използването на нашия проект
Хронограф Nerf и скорост на стрелба: 7 стъпки
Nerf Chronograph и Rate of Fire Barrel: Въведение Като тинкер винаги е много удовлетворяващо да видиш числените резултати от твоята работа. Много от нас са модифицирали пистолети Nerf преди това и кой не обича да хвърля парчета пяна из къщата с над 100 кадъра в секунда? След като променихме много Nerf g
Дистанционно управляван кораб на въздушна възглавница: 8 стъпки (със снимки)
Дистанционно управляван кораб на въздушна възглавница: ss
Arduino за Nerf: хронограф и брояч на изстрели: 28 стъпки (със снимки)
Arduino за Nerf: Хронограф и брояч на изстрели: Моят предишен Instructable обхващаше основите на откриване на скоростта на стрела с помощта на инфрачервен излъчвател и детектор. Този проект прави още една крачка напред, като използва печатна платка, дисплей и батерии, за да направи преносим брояч на амуниции и хронограф