Альфа-версия комплекса измерения и индикации времени заезда для Мотоджимханы.

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Альфа-версия комплекса измерения и индикации времени заезда для  Мотоджимханы.

Мотоджимхана — спортивное испытание на время, в котором участники на мотоциклах соревнуются на самое быстрое маневрирование на асфальтовой площадке среди искусственных препятствий в виде конусов.

Комплекс состоит из:

1.ИК датчики китайские барьерные датчики

https://ru.aliexpress.com/item/Free-Shipping-30Meter-Home-Security-2-Beam-Photoelectric-Infrared-Detector-ABT-30M/2043528350.html?spm=a2g0s.9042311.0.0.NE2LLU.

Разобраны и установлены на основания.

2.Плата TX . Содержит  Wemos D1 mini + NRF24L01 + 18650 Wemos шилд;

3. Плата RX – секундомер. Содержит Wemos D1 mini + NRF24L01 + 18650 Wemos шилд (2 шт. для отдельно питания контроллера и индикатора)+ MAX 7219 MATRIX (8 матриц 8х8);

4. Индикатор MAX 7219 MATRIX (8 матриц 8х8) для отдельно питания контроллеров и индикатора;

5. Батарейные контейнеры для питания барьерных датчиков ;

6. 18650 Wemos шилд для Arduino 3 штуки

https://ru.aliexpress.com/item/Wemos-18650-Battery-shield-V3-RaspberryPi-Arduino/32812129147.html?spm=a2g0s.9042311.0.0.6NvnLx.

 

Модуль срабатывает по «первому колесу». Задержка прерывания от датчика 5 сек. для предотвращения повторно срабатывания от «второго колеса». Результат индицируется, но не фиксируется. Индикация сохраняется до следующего старта. Питание каждого датчика от 8 батареек А2 или аккумуляторов. Питание контроллеров и индикатора независимое от элементов 18650, установленных в Wemos шилд, причем этот шилд, позволяет заряжать батарею по USB  без выемки. Предусмотрен режим тестирования без подключенных датчиков. Всего установлено 3 шилда.

Схемы (пардон от руки, рабочий материал):

 

 

Датчики:

приемник

 

передатчик

 

 

секундомер+индикатор

 

На всякий случай скетчи

// Передатчик   версии - Wemos D1 mini
//    таймаут - задержка - игнорирования входа
//   GPIO_PIN  - принудительно на земле. Прерывание от внешнего датчика подачей единицы (VСС).
//   
// последняя рабочая версия
//31.12.2017

 /*
#define CE           D7   // Chip Enable Activates RX or TX mode          
#define CSN          D4  // SPI Chip Select   D4 - default
#define SCK_PIN      D1  // SPI Clock    
#define MOSI_PIN     D3  // SPI Slave Data Input    
#define MISO_PIN     D2  // SPI Slave Data Output, with tri-state option
#define IRQ          RX   // Maskable interrupt pin   D8 - default
*/



#include "NRF24L01.h"

#define TX_ADR_WIDTH    5   // 5 unsigned chars TX(RX) address width
#define TX_PLOAD_WIDTH  1   // 3 unsigned chars TX payload
unsigned char TX_ADDRESS[TX_ADR_WIDTH]  = 
{
    0x34,0x43,0x10,0x10,0x01
}; 
unsigned char tx_buf[TX_PLOAD_WIDTH] = {0};
#define GPIO_PIN D5  // D5 через резистор 10к
int i=0;
void setup()
{
  pinMode(GPIO_PIN, INPUT);
    Serial.begin(115200);
    tx_buf[0] = 0x55;
//    tx_buf[1] = 0xAA;
//    tx_buf[2] = 0x11;
//        pinMode(0, OUTPUT);  
//    digitalWrite(0, LOW); 
    NRF_Init();    // Initialize IO port
    Serial.println("");
    Serial.println("TX_Mode Start");    
        digitalWrite(GPIO_PIN,0);
        attachInterrupt(GPIO_PIN, blink, RISING );



}

void loop()
{ 
if(i==1){
  delay(5000); 
  attachInterrupt(GPIO_PIN, blink, RISING );
  i=0;
}
}
void blink()
{
     NRF_SeTxMode();

 while(!NRF_CheckAck()); 
          Serial.println("TX");  
          NRF_Send(tx_buf);
            detachInterrupt(GPIO_PIN);
            i=1;

         
}

// Упрощенный вариант=приемник+секундомер
// Последняя рабочая версия
//31.12.2017
//  
// работает по приему сигнала от NRF24L01
// только вывод результата
//  WEMOS D1 R2 & mini
//  MAX 7219 MATRIX  
//  динамическое отображение секундомера 
// 
// 

#include <String.h>
#include "LedControl.h"
#include "NRF24L01.h"

unsigned char RX_ADDRESS[TX_ADR_WIDTH]  = 
{
  0x34,0x43,0x10,0x10,0x01
};
#define TX_PLOAD_WIDTH  1
//unsigned char rx_buf[TX_PLOAD_WIDTH] = {0};
unsigned char rx_buf[1] = {0};

float times;
int start=0;
int finish=0;
int finish1=0;
int cycle=0;
int ind=0;
float shas=0.0;
float minut=0.0;
float secund=0.0;
float secundOld=0.0;
int delay_2=0; // признак задержки после ФИНИШа => 0 снята, 1 установлена
int delay_ =0; // признак задержки после СТАРТа => 0 снята, 1 установлена
int ij=0;
char res;

int i;
int fin=1;
int intsec=0;
int rassec=0;
int sh=0;
int mi=0;
int se=0;   
int sh1 =0;
int sh2 =0;  
int mi1 =0;
int mi2 =0;        
int se1 =0;
int se2 =0;    
int rs1 =0;
int rs2 =0;  
int hh=0;
int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
int count=0;
char td1=' ';
char td2=' ';
char td3=' ';
char td4=' ';
char td5=' ';
char td6=' ';

int th1=0;
int th2=0;
int tm1=0;
int tm2=0;

int h11=0;
int h22=0;
int m11=0;
int m22=0;


/*
 * Подключение max7219
 pin D0 is connected to the DataIn 
 pin D6 is connected to the CLK 
 pin D5 is connected to CS 
 * 
 */
LedControl lc=LedControl(D0,D6,D5,8);
unsigned long delayTime=1000;  // Delay between Frames

// Переменные для матрицы
int poz,dig,zap; // позиция,значение,разделитель)
// Ш Р И Ф Т 
byte c1[] =  // 1
{
0b00000010,
0b00000110,
0b00001110,
0b00000110,
0b00000110,
0b00000110,
0b00000110,
0b00000000

};
byte c2[] = // 2
{
0b00001110,
0b00011011,
0b00000011,
0b00000110,
0b00001100,
0b00011000,
0b00011111,
0b00000000

};
byte c3[] =  // 3
{
0b00001110,
0b00011011,
0b00000011,
0b00001110,
0b00000011,
0b00011011,
0b00001110,
0b00000000

};
byte c4[] =  // 4
{
0b00000011,
0b00000111,
0b00001111,
0b00011011,
0b00011111,
0b00000011,
0b00000011,
0b00000000

};
byte c5[] =  // 5
{
0b00011111,
0b00011000,
0b00011110,
0b00000011,
0b00000011,
0b00011011,
0b00001110,
0b00000000

};
byte c6[] =  // 6
{
0b00001110,
0b00011011,
0b00011000,
0b00011110,
0b00011011,
0b00011011,
0b00001110,
0b00000000

}; 
byte c7[] =  // 7
{
0b00011111,
0b00000011,
0b00000110,
0b00001100,
0b00001100,
0b00001100,
0b00001100,
0b00000000

};
byte c8[] =  // 8
{
0b00001110,
0b00011011,
0b00011011,
0b00001110,
0b00011011,
0b00011011,
0b00001110,
0b00000000

};
byte c9[] =  // 9
{
0b00001110,
0b00011011,
0b00011011,
0b00001111,
0b00000011,
0b00011011,
0b00001110,
0b00000000

};

byte c0[] =  // 0
{
0b00001110,
0b00011011,
0b00011011,
0b00011011,
0b00011011,
0b00011011,
0b00001110,
0b00000000 

};


//----------- с точкой
byte _c1[] =  // .1
{
0b00000010,
0b00000110,
0b00001110,
0b00000110,
0b00000110,
0b00000110,
0b11000110,
0b11000000

};
byte _c2[] = // .2
{
0b00001110,
0b00011011,
0b00000011,
0b00000110,
0b00001100,
0b00011000,
0b11011111,
0b11000000

};
byte _c3[] =  // .3
{
0b00001110,
0b00011011,
0b00000011,
0b00001110,
0b00000011,
0b00011011,
0b11001110,
0b11000000

};
byte _c4[] =  // .4
{
0b00000011,
0b00000111,
0b00001111,
0b00011011,
0b00011111,
0b00000011,
0b11000011,
0b11000000

};
byte _c5[] =  // .5
{
0b00011111,
0b00011000,
0b00011110,
0b00000011,
0b00000011,
0b00011011,
0b11001110,
0b11000000

};
byte _c6[] =  // .6
{
0b00001110,
0b00011011,
0b00011000,
0b00011110,
0b00011011,
0b00011011,
0b11001110,
0b11000000

}; 
byte _c7[] =  // .7
{
0b00011111,
0b00000011,
0b00000110,
0b00001100,
0b00001100,
0b00001100,
0b11001100,
0b11000000

};
byte _c8[] =  // .8
{
0b00001110,
0b00011011,
0b00011011,
0b00001110,
0b00011011,
0b00011011,
0b11001110,
0b11000000

};
byte _c9[] =  // .9
{
0b00001110,
0b00011011,
0b00011011,
0b00001111,
0b00000011,
0b00011011,
0b11001110,
0b11000000

};
byte _c0[] =  // .0
{
0b00001110,
0b00011011,
0b00011011,
0b00011011,
0b00011011,
0b00011011,
0b11001110,
0b11000000 

};


//--------------------------------------------------------------------------------------------------------------------
void setup(void)
{
      Serial.begin(115200);
      Serial.println();
    NRF_Init();                           
    NRF_SetRxMode();
        Serial.println("");
    Serial.println("RX_Mode start...");

    lcclear(); //  О Ч И С Т К А   И Н Д И К А Т О Р А     
    lcOut();// Вывод результата  на индикатор
//------------------------------------------------------------------------------------------------   
}

void loop(void)
{
if(NRF_Receive(rx_buf))
    {
        if((rx_buf[0]==0x55)){
                  Serial.println();
                          Serial.println("Yes");
                          Serial.write(rx_buf,5);
                          rx_buf[0] = 0;
//start_();
blink();

        }
    }
     
  if(fin==1){
     lcOut(); 
  }
// Задержка после ФИНИШа
if (delay_2==1){
         delay_2=0; 
          fin=1;
}

// Задержка после СТАРТа
if (delay_==1){

// Динамическая индикация

   while (ind==1){


    delay(1);
     finish1=millis();
                         delay_=0;

    times = finish1-start;
    if (times>=5000 && times<=6000){
      // задержка
    }
 
    shas=times/3600000;
    minut=times/60000;
    secund=times/1000;

   intsec=secund;
   rassec=(secund-intsec)*100;

                  sh=shas;
                  mi=secund/60;
                  se=secund-(mi*60);   
                  sh1 = sh/10;
                  sh2 = sh%10;  
                  mi1 = mi/10;
                  mi2 = mi%10;        
                  se1 = se/10;
                  se2 = se%10;    
                  rs1 = rassec/10;
                  rs2 = rassec%10;     
                       

if(NRF_Receive(rx_buf))
    {
        if((rx_buf[0]==0x55)){
                  Serial.println();
                          Serial.println("Yes2");
                            Serial.write(rx_buf,5);
blink();
        }
    }   

lcOut();// Вывод результата  на индикатор

    } 
  } 
}

void blink()
{
  delay_=1;
  ind=0;
    if(cycle==1){

    finish=millis();
    cycle=0;
  
        
    Serial.print("times: ");
    times = finish-start;
    Serial.println(times);

    shas=times/3600000;
    minut=times/60000;
    secund=times/1000;
    int intsec=secund;
    int rassec=(secund-intsec)*100;
    
            Serial.print("Shas      : ");
                Serial.println(shas,4);
                            Serial.print("Minut     : ");
                            Serial.println(minut,4);
                                                        Serial.print("Secund    : ");
                                                        Serial.println(secund,4);
                sh=shas;
                mi=secund/60;
                se=secund-(mi*60);                                        
                Serial.print(sh);
                Serial.print(".");
                Serial.print(mi);
                Serial.print(".");
                Serial.print(se);
                Serial.print(".");
                Serial.println(rassec);
                sh1 = sh/10;
                sh2 = sh%10;    
                Serial.print(sh1);
                Serial.println(sh2);                     
                mi1 = mi/10;
                mi2 = mi%10;    
                Serial.print(mi1);
                Serial.println(mi2);                                  
                se1 = se/10;
                se2 = se%10;
                Serial.print(se1);
                Serial.println(se2);
                rs1 = rassec/10;
                rs2 = rassec%10;
                Serial.print(rs1);
                Serial.println(rs2);
     Serial.println("Finish ");               
lcclear();// Вывод результата  на индикатор
lcOut(); 
   

  delay_=0;   
  delay_2=1;
  fin=1;
    }
    else {   // СТАРТ   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
              lcclear();    //  О Ч И С Т К А   И Н Д И К А Т О Р А
               start=millis();

          h11=th1;
          h22=th2;
          m11=tm1;
          m22=tm2;
         
          Serial.println("");
          Serial.println("Start "); 

      cycle=1;
      ind=1;
      fin=0;
    }
//  }
 }





////////////////////////////////////////////////
// Функции вывода на индикатор

// вывод символа без точки
void cc1() // Изображение символа "1"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,c1[i]);
  }
}
void cc2()// Изображение символа "2"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,c2[i]);
  }
}
void cc3()// Изображение символа "3"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,c3[i]);
  }
}
void cc4()// Изображение символа "4"
{
  for (int i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,c4[i]);
  }
}
void cc5()// Изображение символа "5"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,c5[i]);
  }
}
void cc6()// Изображение символа "6"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,c6[i]);
  }
}
void cc7()// Изображение символа "7"
{
  for (i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,c7[i]);
  }
}
void cc8()// Изображение символа "8"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,c8[i]);
  }
}
void cc9()// Изображение символа "9"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,c9[i]);
  }
}
void cc0()// Изображение символа "0"
{
  for (i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,c0[i]);
  }
}

// вывод символа с точкой

// вывод символа без точки
void _cc1() // Изображение символа ".1"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,_c1[i]);
  }
}
void _cc2()// Изображение символа ".2"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,_c2[i]);
  }
}
void _cc3()// Изображение символа ".3"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,_c3[i]);
  }
}
void _cc4()// Изображение символа ".4"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,_c4[i]);
  }
}
void _cc5()// Изображение символа ".5"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,_c5[i]);
  }
}
void _cc6()// Изображение символа ".6"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,_c6[i]);
  }
}
void _cc7()// Изображение символа ".7"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,_c7[i]);
  }
}
void _cc8()// Изображение символа ".8"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,_c8[i]);
  }
}
void _cc9()// Изображение символа ".9"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,_c9[i]);
  }
}
void _cc0()// Изображение символа ".0"
{
  for ( i = 0; i < 8; i++)  
  {
    lc.setRow(poz,i,_c0[i]);
  }
}

// Вывод на индикатор

void setDig()// poz,dig,zap - позиция,значение,разделитель
{
lc.clearDisplay(poz);  // очистить позицию

if(zap==0){
switch (dig) {
  case 1:
        cc1();
        break;

  case 2:
        cc2();
        break;

  case 3:
        cc3();
        break;
   case 4:
        cc4();
        break;
   case 5:
        cc5();
        break;  
  case 6:
        cc6();
        break;  
  case 7:
        cc7();
        break;  
  case 8:
        cc8();
        break; 
  case 9:
        cc9();
        break; 
  case 0:
        cc0();
        break;                              
  default:
  break;
}
}
else {
  switch (dig) {
  case 1:
        _cc1();
        break;

  case 2:
        _cc2();
        break;

  case 3:
        _cc3();
        break;
   case 4:
        _cc4();
        break;
   case 5:
        _cc5();
        break;  
  case 6:
        _cc6();
        break;  
  case 7:
        _cc7();
        break;  
  case 8:
        _cc8();
        break; 
  case 9:
        _cc9();
        break; 
  case 0:
        _cc0();
        break;                              
  default:
  break;
}
}    
return;  
}


void lcclear()//  О Ч И С Т К А   И Н Д И К А Т О Р А
{
  lc.shutdown(0,false);  
  lc.shutdown(1,false);
  lc.shutdown(2,false);
    lc.shutdown(3,false);
      lc.shutdown(4,false);
        lc.shutdown(5,false);
          lc.shutdown(6,false);
            lc.shutdown(7,false);
  lc.setIntensity(0,5);  
  lc.setIntensity(1,5);
  lc.setIntensity(2,5);
    lc.setIntensity(3,5);
      lc.setIntensity(4,5);
        lc.setIntensity(5,5);
          lc.setIntensity(6,5);
            lc.setIntensity(7,5);
  lc.clearDisplay(0);  
  lc.clearDisplay(1);
  lc.clearDisplay(2);
    lc.clearDisplay(3);
      lc.clearDisplay(4);
        lc.clearDisplay(5);
          lc.clearDisplay(6);
            lc.clearDisplay(7);
 
}


void lcOut() // ВЫВОД РЕЗУЛЬТАТА НА ИНДИКАТОР
{
    if(mi1>>0){
    poz=5;
dig=mi1;
zap=0;
setDig();
       
    }
    if((mi2>=0 && mi1>>0) || (mi2>>0)){  
    poz=4;
dig=mi2;
zap=0;
setDig();   
    }

    poz=3;
dig=se1;
zap=1;
setDig();

    poz=2;
dig=se2;
zap=0;
setDig();

    poz=1;
dig=rs1;
zap=1;
setDig();
  
    poz=0;
dig=rs2;
zap=0;
setDig(); 
}
void start_(){
  // СТАРТ   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
              lcclear();    //  О Ч И С Т К А   И Н Д И К А Т О Р А
               start=millis();

          h11=th1;
          h22=th2;
          m11=tm1;
          m22=tm2;
         
          Serial.println("");
          Serial.println("Start "); 

      cycle=1;
      ind=1;
      fin=0;
    
}


void stop_(){

      finish=millis();
    cycle=0;
  
        
    Serial.print("times: ");
    times = finish-start;
    Serial.println(times);

    shas=times/3600000;
    minut=times/60000;
    secund=times/1000;
    int intsec=secund;
    int rassec=(secund-intsec)*100;
    
            Serial.print("Shas      : ");
                Serial.println(shas,4);
                            Serial.print("Minut     : ");
                            Serial.println(minut,4);
                                                        Serial.print("Secund    : ");
                                                        Serial.println(secund,4);
                sh=shas;
                mi=secund/60;
                se=secund-(mi*60);                                        
                Serial.print(sh);
                Serial.print(".");
                Serial.print(mi);
                Serial.print(".");
                Serial.print(se);
                Serial.print(".");
                Serial.println(rassec);
                sh1 = sh/10;
                sh2 = sh%10;    
                Serial.print(sh1);
                Serial.println(sh2);                     
                mi1 = mi/10;
                mi2 = mi%10;    
                Serial.print(mi1);
                Serial.println(mi2);                                  
                se1 = se/10;
                se2 = se%10;
                Serial.print(se1);
                Serial.println(se2);
                rs1 = rassec/10;
                rs2 = rassec%10;
                Serial.print(rs1);
                Serial.println(rs2);
     Serial.println("Finish ");               
lcclear();// Вывод результата  на индикатор
lcOut(); 
   

  delay_=0;   
  delay_2=1;
  fin=1;
}

 

Slavyanin55
Slavyanin55 аватар
Offline
Зарегистрирован: 01.06.2014

Во! годная аппаратура!

У нас в Омске мотоджимхана пока почти не развита совсем, но интерес у людей появляется.

Буду знать, где взять, как это сделать! Благодарю!

RN6LJK
Offline
Зарегистрирован: 24.03.2013

К началу сезона 2018 прибор был "причесан" Игорем RC7LL. Заменены датчики на китайские HW02 и помещены в корпуса вместе с источниками питания. Индикатор также помещен в корпус вместе с основной платой и батареями. Эксплутационный испытания прошли успешно. В настоящее время прибор применяется на тренировках. Выкладываю некоторые фото и ссылку на тренировочный заезд. Будут вопросы, пишите.

Видео тренировочного заезда с применением секундомера.

https://youtu.be/FO-OQRoaRh0

RN6LJK
Offline
Зарегистрирован: 24.03.2013
Oleg1975
Offline
Зарегистрирован: 05.06.2020

Сколько сейчас обойдется сборка данной телеметрии?

 

sser
Offline
Зарегистрирован: 25.12.2016

Всем привет.

Интересно , а где взять библиотеку NRF24L01.h  ?

На Гитхабе нашёл только  nRF24L01.h …..

b707
Offline
Зарегистрирован: 26.05.2017

sser пишет:

Всем привет.

Интересно , а где взять библиотеку NRF24L01.h  ?

На Гитхабе нашёл только  nRF24L01.h …..

по-моему, там любая подойдет, все что делает NRF - это пересылает байт 0x55. насколько я понял.

 

sser
Offline
Зарегистрирован: 25.12.2016

ага, понял , спс.

RN6LJK
Offline
Зарегистрирован: 24.03.2013

На Гитхабе нашёл только nRF24L01.h …..

Это она и есть. Самое капризное звено во всем проекте это как раз  nRF24L01

а вообще надежнее работает вариант модуля с антенной

b707
Offline
Зарегистрирован: 26.05.2017

RN6LJK пишет:

Это она и есть. Самое капризное звено во всем проекте это как раз  nRF24L01

а вообще надежнее работает вариант модуля с антенной

А какие там расстояния обычно между приемником и передатчиком? (абсолютно не представляю себе мотоджихану :)

Можно было бы перевести проект на HC-12, например - на открытой местности на 300-500м они должны работать надежно. Заодно и код немного переписать, а то уж больно он корявый :)

Кстати. в качестве табло можно взять матрицы типа таких - они значительно крупнее тех, что в проекте, для улицы будет удобнее (правда, от батарейки уже не пойдут, но наверно на месте соревнования всегда есть хоть одна машина, от аккумулятора вполне заработает)

IgorSadov
Offline
Зарегистрирован: 06.06.2020

Весь этот сетап должен быть небольших размеров и потреблять по минимуму, с рабоспособностью 6-8 часов, большой секундомер с управлением от пк и на р10 есть и давно используется на соревнованиях.

b707
Offline
Зарегистрирован: 26.05.2017

IgorSadov пишет:
Весь этот сетап должен быть небольших размеров и потреблять по минимуму, с рабоспособностью 6-8 часов, большой секундомер с управлением от пк и на р10 есть и давно используется на соревнованиях.

а ну как знаете

nRF  все-таки рекомендую поменять на что-то более надежное и дальнобойное

RN6LJK
Offline
Зарегистрирован: 24.03.2013

b707 пишет:

IgorSadov пишет:
Весь этот сетап должен быть небольших размеров и потреблять по минимуму, с рабоспособностью 6-8 часов, большой секундомер с управлением от пк и на р10 есть и давно используется на соревнованиях.

а ну как знаете

nRF  все-таки рекомендую поменять на что-то более надежное и дальнобойное

может подскажете на что ?

b707
Offline
Зарегистрирован: 26.05.2017

RN6LJK пишет:

может подскажете на что ?

например HC-12

ребята. вы в сообщении #9 видимо только картинку табло увидели и сочли за рекламу :) А там еще текст был и вопросы :)

А картинка, кстати, не моя, а какого-то индийца или пакистанца, я сам  не знаю толком :) и я его не рекламирую

RN6LJK
Offline
Зарегистрирован: 24.03.2013

b707 пишет:

RN6LJK пишет:

может подскажете на что ?

например HC-12

ребята. вы в сообщении #9 видимо только картинку табло увидели и сочли за рекламу :) А там еще текст был и вопросы :)

А картинка, кстати, не моя, а какого-то индийца или пакистанца, я сам  не знаю толком :) и я его не рекламирую

Смело. Обоснуйте.

b707
Offline
Зарегистрирован: 26.05.2017

RN6LJK пишет:

Смело. Обоснуйте.

что именно? что вы сообщение #9 не читали? - сделал вывод. потому что переспрашиваете, на что заменить NRF, хотя я сразу указал

Или еще что обосновать?

RN6LJK
Offline
Зарегистрирован: 24.03.2013

b707 пишет:

RN6LJK пишет:

Смело. Обоснуйте.

что именно? что вы сообщение #9 не читали? - сделал вывод. потому что переспрашиваете, на что заменить NRF, хотя я сразу указал

Или еще что обосновать?

Я просил обосновать замену NRF на HC-12

b707
Offline
Зарегистрирован: 26.05.2017

RN6LJK пишет:

Я просил обосновать замену NRF на HC-12

Вы меня с продавцом на рынке не спутали? :) Зачем мне вас уговаривать, я их продаю, что ли? :) Вы сами жаловались в сообщении 8, что NRF -ки капризные

Сами посмотрите характеристики, если сравнивать обычный (не "дальнобойный")  NRF и HC-12 - у последнего почти на порядок больше дальность как на открытой местности, так и в зданиях сквозь стены. Из-за популярности NRF очень много поддельных на Али, с надежностью как повезет.

Про  HC-12 подобных отзывов нет, все что продается - работает одинаково устойчиво.

Из минусов - у HC-12 связь через УАРТ, что в принципе может давать задержки несколько миллисекунд

 

 

 

 

RN6LJK
Offline
Зарегистрирован: 24.03.2013

Мой прибор прекрасно  работает с NRF, я просто предупредил о возможных капризах при настройке. Вы можете продемонстрировать свои наработки с НС-12 ? Интересно взглянуть.

b707
Offline
Зарегистрирован: 26.05.2017

RN6LJK пишет:

Мой прибор прекрасно  работает с NRF,

ну работает и работает, значит я зря влез

 

RN6LJK
Offline
Зарегистрирован: 24.03.2013

ну так тому и быть

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

привет ребятушки!)

интересный проект, мне бы тоже позамерять своего корча на время ускорения, на отрезке 200-300 метров. 

1) например ставлю два датчика на дороге на расстоянии 200 метров, встаю передним колесом к первому датчику не пересекая его, сигнала нет - ардуина не считает. 

2) стартую, переднее колесо пересекает датчик ардуина засекает время

3) пересекаю второй датчик расположенный через 200 метров

4)?? тут надо понять как  передать сигнал со второго датчика на первый чтоб ардуина остановила счет и выдала время на дисплей

есть идеи как реализовать? 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Основных идеи две:

1. По проводам.

2. Без проводов.

b707
Offline
Зарегистрирован: 26.05.2017

можно и не передавать, если предварительно синхронизировать время на обоих датчиках

sadman41
Offline
Зарегистрирован: 19.10.2016

Можно ещё по замкнутой кривой поехать - тогда вторая ардуина не нужна ))
Или измеритель поставить на мопед.

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019
andriano пишет:
 
Основных идеи две:
 
1. По проводам.
 
2. Без проводов.
 
 
уже хорошо)
с учетом того что мне что так что так разносить датчики на 200 метров то я могу по пути и провод размотать)
вопрос насколько это упростит схему-систему-программный код?
ну и финансовая составляющая не последняя
200 метров провода это не дешево, кстати какой провод нужен?
 
 
b707 пишет:
 
можно и не передавать, если предварительно синхронизировать время на обоих датчиках
 
 
а как их синхронизировать? допустим я стартую - колесо переезжает первый датчик и он отправляет сигнал на второй датчик для синхронизации? опять же чем на 200 метров проще передать сигнал по проводам или еще какая беспроводная технология хорошо работающая на прямой дороге без преград?
 
sadman41 пишет:
Можно ещё по замкнутой кривой поехать - тогда вторая ардуина не нужна )) Или измеритель поставить на мопед.
 
по замкнутой это очень опасно будет) в конце трассы надо будет максимально быстро оттормаживаться и выстреливать обратно) велик шанс разложиться при замерах)
а измеритель на мопед не понял, ну и как он будет работать? 
 
sadman41
Offline
Зарегистрирован: 19.10.2016

Не понял зачем экстренное торможение и выстрелы. Ардуина прибытие зафиксировала и вошла в режим ожидания рестарта - езди потом вокруг нее хоть сутки.

Как будет работать ардуина на мопеде - думайте, на то вам голова дадена. Идею просили - вам ее выдали.

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

sadman41 пишет:
Не понял зачем экстренное торможение и выстрелы. Ардуина прибытие зафиксировала и вошла в режим ожидания рестарта - езди потом вокруг нее хоть сутки.

стоп стоп стоп... чтоб ардуине начать отсчет она должна получить сигнал от стартового датчика при пересечении его колесом при старте

ардуина при этом может находиться либо стационарно рядом со стартовым датчиком либо в кармане гонщика

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

если ардуина установлена стационарно у стартового датчика то сигнал надо передать от финишного датчика на 200 метров либо по размотанным проводам либо по безпроводному каналу

если ардуина лежит в кармане гонщика то она примет сигнал на расстоянии 3-4 метров от финишного датчика во время его пересечения - тут только бес проводной канал связи

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Т.е. фраза "езда по кругу" вам вообще ни о чем не говорит - правильно понимаю?

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

sadman41 пишет:
Т.е. фраза "езда по кругу" вам вообще ни о чем не говорит - правильно понимаю?

ну какая езда по кругу?)) у нас что кольцевые гонки?)) а вы пробовали максимально ускоряться в повороте?)))

мне надо по прямой на отрезке 200-300 метров замерить время ускорения)

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

это уже предпологает наличие двух датчиков и наверное двух ардуин

одна ардуина установлена стационарно рядом со стартовым датчиком и читает с него сигнал о начале старта и так же держит открытый канал связи с финишной ардуиной

как только я стартанул она по открытому каналу передает финишной ардуине мол засекай время

финишная ардуина начинает считать попутно мониторя свой финишный датчик рядом с которым она стационарно установлена на наличие от него сигнала пересечения финишной черты

дальше просто выводит время заезда на экран

нужно установить канал связи между двумя ардуинами на расстоянии 200-300 метров по открытой прямой для передачи одного байта информации - "Поехали"))

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

baby_in_Arduino пишет:

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

это уже предпологает наличие двух датчиков и наверное двух ардуин

Зкачем?

Достаточно 2 меток - на старте и на финише и 1 ардуины - на мотоцикле.

b707
Offline
Зарегистрирован: 26.05.2017

baby_in_Arduino пишет:

нужно установить канал связи между двумя ардуинами на расстоянии 200-300 метров по открытой прямой для передачи одного байта информации - "Поехали"))

и за чем дело встало?

вы это уже талдычите неделю, давно можно было собрать готовые схемы на разных радиомодулях и попробовать

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

andriano пишет:

baby_in_Arduino пишет:

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

это уже предпологает наличие двух датчиков и наверное двух ардуин

Зкачем?

Достаточно 2 меток - на старте и на финише и 1 ардуины - на мотоцикле.

ардуино на мотоцикле не лучший вариант наверно, а если несколько мотоциклов учавствует в замерах?

и как ардуина на мотоцикле должна ловить сигнал с датчиков? если ардуина стоит стационарно рядом с датчиком она проводами соединена с датчиком проводами и читает его а так как ?

 

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

b707 пишет:

и за чем дело встало?

вы это уже талдычите неделю, давно можно было собрать готовые схемы на разных радиомодулях и попробовать

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

мы даже пока не решили как это все должно выглядеть, все на стадии обсуждения, а вы говорите попробовать...

b707
Offline
Зарегистрирован: 26.05.2017

а что там решать-то?

- берете две ардуины. условно одну "старт". другую "финиш".

- пишете код для датчика фотофиниша и для передачи сигнала "Поехали" с одной на другую.

- а теперь. вместо того чтоб ставить одну на старте. другую на финише - ставите их рядом, чтобы датчики срабатывали одновременно

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

baby_in_Arduino пишет:

ардуино на мотоцикле не лучший вариант наверно, а если несколько мотоциклов учавствует в замерах?

Варианта, миниум, два:

1. По очереди.

2. По числу мотоциклов.

Цитата:

и как ардуина на мотоцикле должна ловить сигнал с датчиков? если ардуина стоит стационарно рядом с датчиком она проводами соединена с датчиком проводами и читает его а так как ?

Ну очевидно же: датчик стоит на мотоцикле рядом с Ардуиной.

Вопросы какие-то детские. Обратитесь лучше в раздел "Ищу исполнителя". Судя пор вопросам (а также по тому, сколь небрежно Вы относитесь к языку), Вам этот проект не одолеть.

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

andriano пишет:

Ну очевидно же: датчик стоит на мотоцикле рядом с Ардуиной.

Вопросы какие-то детские. Обратитесь лучше в раздел "Ищу исполнителя". Судя пор вопросам (а также по тому, сколь небрежно Вы относитесь к языку), Вам этот проект не одолеть.

а метки у дороги тогда что? если и датчик и ардуина на мотоцикле?

мне интересно самому сделать иначе мне это не особо интересно)

Вы правы такое отношение к языку показывает меня не с хорошей стороны, учту.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

baby_in_Arduino пишет:

а метки у дороги тогда что? если и датчик и ардуина на мотоцикле?

Метками я назвал то, на что дрлжны реагировать датчики Ардуино. Я не знаю, как Вы их представляете в совем проекте.

Цитата:

мне интересно самому сделать иначе мне это не особо интересно)

Судя по вашему поведению на форуме (сами Вы ничего сделать даже не пытаетесь, советов не слушаете, зато задаете массу глупых вопросов), цель у Вас другая - получить что-нибудь на халяву, т.к. платить за работу Вы не хотите.

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

andriano пишет:

Судя по вашему поведению на форуме (сами Вы ничего сделать даже не пытаетесь, советов не слушаете, зато задаете массу глупых вопросов), цель у Вас другая - получить что-нибудь на халяву, т.к. платить за работу Вы не хотите.

сам я пытаюсь понять как это сделать, вот советуюсь с вами как это реализовать

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

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

но вы почему то понимаете это в контексте денежных отношений как будто я пришел не на форум самодельщиков а на биржу

 

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

b707 пишет:

а что там решать-то?

- берете две ардуины. условно одну "старт". другую "финиш".

- пишете код для датчика фотофиниша и для передачи сигнала "Поехали" с одной на другую.

- а теперь. вместо того чтоб ставить одну на старте. другую на финише - ставите их рядом, чтобы датчики срабатывали одновременно

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

вообще какая может быть задержка по радиоканалу на 300 метров? измеряется наверно милисекундами?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

baby_in_Arduino, консультации на форуме предполагают, что Вы прежде всего обдумаете полученную информацию, затем попытаетесь сделать что-либо из предложенного, выясните, что получится, и поделитесь на форуме полученными результатами и сделанными выводами. И весь этот процесс ну никак не может уложиться в те 11 минут, которые Вам потребовались на последний ответ.

Вместо того, чтобы что-то сделать, Вы торопитесь сразу написать ответ на форуме. Настолько быстро, насколько это возможно. Притом вопросы - явно необдуманные. Заведите за правило - прежде, чем бросаться отвечать на сообщение, хотя бы полчаса обдумайте его - львиная доля вопросов сразу отпадет.

И еще: почитайте приклеенную тему в "Песочнице" ДЛЯ ВСЕХ НОВИЧКОВ. Ибо только что Вы злостным образом нарушили одно из правил, нарушение которого воспринимается на форуме очень болезненно.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

baby_in_Arduino пишет:

вообще какая может быть задержка по радиоканалу на 300 метров? измеряется наверно милисекундами?

Опять торопитесь отвечать, не подумав?

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

andriano пишет:

baby_in_Arduino, консультации на форуме предполагают, что Вы прежде всего обдумаете полученную информацию, затем попытаетесь сделать что-либо из предложенного, выясните, что получится, и поделитесь на форуме полученными результатами и сделанными выводами. И весь этот процесс ну никак не может уложиться в те 11 минут, которые Вам потребовались на последний ответ.

Вместо того, чтобы что-то сделать, Вы торопитесь сразу написать ответ на форуме. Настолько быстро, насколько это возможно. Притом вопросы - явно необдуманные. Заведите за правило - прежде, чем бросаться отвечать на сообщение, хотя бы полчаса обдумайте его - львиная доля вопросов сразу отпадет.

И еще: почитайте приклеенную тему в "Песочнице" ДЛЯ ВСЕХ НОВИЧКОВ. Ибо только что Вы злостным образом нарушили одно из правил, нарушение которого воспринимается на форуме очень болезненно.

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

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ответ через 8 минут.

Вы что, за 8 минут успели прочитать тему, которую я рекомендовал?

Еще раз: не бросайтесь, сломя голову, отвечать на форуме. Сначала осмыслите написанное,потом сделайте, что рекомендуют... в общем, я об этом уже писал.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

baby_in_Arduino пишет:

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

Так не бывает.

А с полным отсутствием опыта, как у Вас, - и подавно.

Так что: закупайте, пробуйте, еще раз закупайте, еще раз пробуйте и т.д.

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

 

PS. И все-таки почитайте рекомендованную мной тему. Там очень много полезного для Вас.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ардуина на мотоцикле, блоки обнаружения старта/финиша на точках. Блок сработал, в какой-нить радиомодуль бренькнул, ардуина на мотоцикле поймала радиопосылку. Дальше сами думайте, как считать скорость перемещения ардуины между точками.

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

andriano пишет:

Так не бывает.

А с полным отсутствием опыта, как у Вас, - и подавно.

Так что: закупайте, пробуйте, еще раз закупайте, еще раз пробуйте и т.д.

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

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

 

 

baby_in_Arduino
Offline
Зарегистрирован: 21.07.2019

sadman41 пишет:
Ардуина на мотоцикле, блоки обнаружения старта/финиша на точках. Блок сработал, в какой-нить радиомодуль бренькнул, ардуина на мотоцикле поймала радиопосылку. Дальше сами думайте, как считать скорость перемещения ардуины между точками.

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

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

baby_in_Arduino пишет:

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

"Все было под рукой" - это слишком оптимистично. Я, например, потратил на закупки сумму, за которую можно купить новый автомобиль, но, увы, не достиг в полной мере ситуации "все под рукой".

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

Можно взять набор типа "Матрешки", вроде, там к нему тоже прилагается что-то вроде программы-конспекта.

В любом случае нужно понимать, что "на все случаи жизни" - это очень дорого, а "по списку" - делает практически невозможным "шаг вправо/шаг влево".

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

baby_in_Arduino пишет:

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

А если использовать импульс лазера для передачи момента старта? Т.е. только две только две ардуинки на старте и на финише. На старте будет испускать короткий импульс лазера, а на финише считать время с момента получения импульса.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

AndreyD пишет:

baby_in_Arduino пишет:

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

А если использовать импульс лазера для передачи момента старта? Т.е. только две только две ардуинки на старте и на финише. На старте будет испускать короткий импульс лазера, а на финише считать время с момента получения импульса.

А что будет этот импульс проводить и что принимать? Если световод, то чем это лучше провода? Если свободная атмосфера, то как осуществлять прицеливание?