Хобби электроника

все то что можно спаять и собрать вручную с помощью паяльника и незамысловатого инструмента: -тут!
 
Реклама  ФорумФорум  КалендарьКалендарь  ЧаВоЧаВо  ПоискПоиск  РегистрацияРегистрация  ВходВход  

Поделиться | 
 

 СЧЕТЧИК УДАРОВ НА ГРУШЕ НА АРДУИНО

Предыдущая тема Следующая тема Перейти вниз 
АвторСообщение
viktor1983



Сообщения : 80
Дата регистрации : 2017-06-13

СообщениеТема: СЧЕТЧИК УДАРОВ НА ГРУШЕ НА АРДУИНО   Пт Сен 15, 2017 11:35 pm

Здравствуйте выкладываю совместно сделанный с администратором сайта Сергеем проект счетчик ударов для бокса и единоборств на основе ардуино . Когда создавался этот проект в основу легли простота сборки , маленький бюджет (около 350-400 руб) и простота установки изделия (его можно вешать на любую грушу без последствий для самой груши ) И так приступим нам надо ардуино нано ,монитор 16/2,датчик вибрации (фото будет ниже), 3 кнопки ,пищалка (фото тоже будет ) провода и желание .
и так фото



так теперь схема сборки не судите строго рисовать не умею но я думаю все поймете если нет то пишите отвечу

после сборки счетчика я нашел пластиковую коробку и все туда в монтировал кстати чтобы можно было использовать его в спортзале в качестве питания я подключил батарейку крону вот что получилось



теперь работа самого устройства на видео

огромное спасибо хочу сказать админу Сергею без его помощи у меня ничего бы не получилось


вот скетч на счетчик

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C _lcd1(0x3f, 16, 2);
int _dispTempLength1=0;
boolean _isNeedClearDisp1;

int _FLPArray85392936[12] = {30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360 };
bool _gtv1 = 0;
int _gtv2 = 0;
bool _gtv5 = 0;
bool _gtv6 = 0;
bool _count3I = 0;
int _count3P = 0;
bool _trgs1 = 0;
bool _trgrt6 = 0;
bool _trgrt6I = 0;
bool _pzs1OES = 0;
int _pzs1OFS = 0;
int _disp2oldLength = 0;
bool _bounseInputD5S = 0;
bool _bounseInputD5O = 0;
unsigned long _bounseInputD5P = 0UL;
bool _count1I = 0;
int _count1P = 0;
bool _trgrt5 = 0;
bool _trgrt5I = 0;
bool _bounseInputD3S = 0;
bool _bounseInputD3O = 0;
unsigned long _bounseInputD3P = 0UL;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _trgrt3 = 0;
bool _trgrt3I = 0;
bool _count4I = 0;
int _count4P = 0;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
bool _gen1I = 0;
bool _gen1O = 0;
unsigned long _gen1P = 0UL;
bool _changeNumber1_Out = 0;
int _changeNumber1_OLV;
bool _trgrt4 = 0;
bool _trgrt4I = 0;
bool _bounseInputD4S = 0;
bool _bounseInputD4O = 0;
unsigned long _bounseInputD4P = 0UL;
bool _dms1Q0 = 0;
bool _dms1Q1 = 0;
bool _dms1Q2 = 0;
bool _dms1Q3 = 0;
bool _dms1Q4 = 0;
int _disp3oldLength = 0;
int _swi1;
void setup()
{
Wire.begin();
delay(10);
pinMode(2, INPUT);
digitalWrite(2, HIGH);
pinMode(3, INPUT);
digitalWrite(3, HIGH);
pinMode(4, INPUT);
digitalWrite(4, HIGH);
pinMode(5, INPUT);
digitalWrite(5, HIGH);

_lcd1.init();
_lcd1.backlight();
_bounseInputD3O = digitalRead(3);
_bounseInputD4O = digitalRead(4);
_bounseInputD5O = digitalRead(5);
}
void loop()
{int _tempVariable_int;
if (_isNeedClearDisp1) {_lcd1.clear(); _isNeedClearDisp1= 0;}

bool _bounceInputTmpD4 = (digitalRead (4));

if (_bounseInputD4S)
{
if (millis() >= (_bounseInputD4P + 40))
{_bounseInputD4O= _bounceInputTmpD4; _bounseInputD4S=0;}
}
else
{
if (_bounceInputTmpD4 != _bounseInputD4O )
{_bounseInputD4S=1; _bounseInputD4P = millis();}
}
bool _bounceInputTmpD5 = (digitalRead (5));

if (_bounseInputD5S)
{
if (millis() >= (_bounseInputD5P + 40))
{_bounseInputD5O= _bounceInputTmpD5; _bounseInputD5S=0;}
}
else
{
if (_bounceInputTmpD5 != _bounseInputD5O )
{_bounseInputD5S=1; _bounseInputD5P = millis();}
}
bool _bounceInputTmpD3 = (digitalRead (3));

if (_bounseInputD3S)
{
if (millis() >= (_bounseInputD3P + 40))
{_bounseInputD3O= _bounceInputTmpD3; _bounseInputD3S=0;}
}
else
{
if (_bounceInputTmpD3 != _bounseInputD3O )
{_bounseInputD3S=1; _bounseInputD3P = millis();}
}




//Плата:1
if (( (!( (digitalRead (2)))) && (_gtv6) )) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};

if (_trgrt3)
{
if (! _count4I)
{
_count4P = _count4P+1;
_count4I = 1;
}
}
else
{
_count4I=0;
}
if (( (!(_bounseInputD3O)) || (_gtv1) )) _count4P = 0;
if(!(_bounseInputD4O)) _trgs1 = 1;
if(( (!(_bounseInputD3O)) || (_trgrt5) )) _trgs1 = 0;
if (_trgs1) { if (_trgrt4I) { _trgrt4 = 0;} else {_trgrt4 = 1; _trgrt4I = 1;} } else {_trgrt4 = 0; _trgrt4I = 0;};
if(( (_dms1Q1) || (_dms1Q3) ))
{if((!_pzs1OES) || (_swi1 != _pzs1OFS)){ tone(12, (_swi1)); _pzs1OES =1;_pzs1OFS = _swi1;}} else {if(_pzs1OES){noTone(12); _pzs1OES =0; }}
if((_gtv2 == 0)){_dms1Q0 = 1;} else {_dms1Q0 = 0;}
if((_gtv2 == 1)){_dms1Q1 = 1;} else {_dms1Q1 = 0;}
if((_gtv2 == 2)){_dms1Q2 = 1;} else {_dms1Q2 = 0;}
if((_gtv2 == 3)){_dms1Q3 = 1;} else {_dms1Q3 = 0;}
if((_gtv2 == 4)){_dms1Q4 = 1;} else {_dms1Q4 = 0;}
if (_dms1Q1)
{ if (_tim1I) { if (_isTimer(_tim1P, 500)) {_tim1O = 1;}} else {_tim1I =1; _tim1P = millis();}} else {_tim1O = 0; _tim1I = 0;}
if (( (!(_bounseInputD3O)) || (_trgrt5) )) { if (_trgrt6I) { _trgrt6 = 0;} else {_trgrt6 = 1; _trgrt6I = 1;} } else {_trgrt6 = 0; _trgrt6I = 0;};
if (_dms1Q4) { if (_trgrt5I) { _trgrt5 = 0;} else {_trgrt5 = 1; _trgrt5I = 1;} } else {_trgrt5 = 0; _trgrt5I = 0;};
if(_dms1Q3)
{_swi1=800;}
else
{_swi1=1200;}
if (( (_dms1Q2) || (_dms1Q3) )) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = millis(); } } else { _gen1I = 0 ; _gen1O= 0;}
if (_gen1I) { if ( _isTimer ( _gen1P , 500 )) { _gen1P = millis(); _gen1O = ! _gen1O;}}
if(( (_changeNumber1_Out) || ((_gtv2) == (0)) || (_trgrt6) )) _count3P = ((_FLPArray85392936[_count1P]));
if (_gen1O)
{
if (! _count3I)
{
_count3P = _count3P-1;
_count3I = 1;
}
}
else
{
_count3I=0;
}
if(_trgrt1) _count1P = (0);
if (( ((_gtv2) == (0)) && (!(_bounseInputD5O)) ))
{
if (! _count1I)
{
_count1P = _count1P+1;
_count1I = 1;
}
}
else
{
_count1I=0;
}
if (_gtv5) _count1P = 0;
if (!(0)) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if (!(0)) {
_dispTempLength1 = ((((String("Score:")) + ((String(_count4P, DEC)))))).length();
if (_disp2oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp2oldLength = _dispTempLength1;
_lcd1.setCursor(0, 0);
_lcd1.print((((String("Score:")) + ((String(_count4P, DEC))))));
} else {
if (_disp2oldLength > 0) {_isNeedClearDisp1 = 1; _disp2oldLength = 0;}
}
if (!(_bounseInputD3O)) {
_gtv2 = 0;
}
_gtv1 = _count4P >= 32766;
if (_trgrt4) {
_gtv2 = 1;
}
_gtv6 = !(_dms1Q0);
if (_tim1O) {
_gtv2 = 2;
}
if (_tim1O) {
_gtv6 = 1;
}
if (_dms1Q4) {
_gtv2 = 0;
}
if ((_count3P) == (1)) {
_gtv2 = 3;
}
if ((_count3P) == (0)) {
_gtv2 = 4;
}
_gtv5 = _count1P >= 11;
if (!(0)) {
_dispTempLength1 = ((((String("Time:")) + ((String(_count3P, DEC)))))).length();
if (_disp3oldLength > _dispTempLength1) {_isNeedClearDisp1 = 1;}
_disp3oldLength = _dispTempLength1;
_lcd1.setCursor(0, 1);
_lcd1.print((((String("Time:")) + ((String(_count3P, DEC))))));
} else {
if (_disp3oldLength > 0) {_isNeedClearDisp1 = 1; _disp3oldLength = 0;}
}
if (_changeNumber1_Out) {_changeNumber1_Out = 0;} else {_tempVariable_int = (_FLPArray85392936[_count1P]);
if (_tempVariable_int != _changeNumber1_OLV) {_changeNumber1_OLV = _tempVariable_int; _changeNumber1_Out = 1;}
}




}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
Вернуться к началу Перейти вниз
Admin
Admin
avatar

Сообщения : 423
Дата регистрации : 2013-02-08
Возраст : 44
Откуда : Нижний Новгород

СообщениеТема: Re: СЧЕТЧИК УДАРОВ НА ГРУШЕ НА АРДУИНО   Сб Сен 16, 2017 12:34 pm

Виктор ,поздравляю тебя!
Отличный прибор получился.
Успехов начинающему боксёру!
Вернуться к началу Перейти вниз
http://sser.jimdo.com
 
СЧЕТЧИК УДАРОВ НА ГРУШЕ НА АРДУИНО
Предыдущая тема Следующая тема Вернуться к началу 
Страница 1 из 1

Права доступа к этому форуму:Вы не можете отвечать на сообщения
Хобби электроника :: категория :: форум-
Перейти: