Активная мишень "Орудийный дот"

Автор Zloyuzver, 00:28:45

« предыдущая - следующая »

0 Пользователей и 1 гость просматривают эту тему.

Zloyuzver

Давно вынашивал идею создать активную мишень с несколькими режимами работы, которая бы привнесла разнообразие в танковый триал и танковые бои. Знаю, что активная мишень была сделана и москвичами ("Сова", вроде, или "Филин")), и вами, питерцы (Юра, я о тебе и твоём танковом доте с башней от тигра ;) ). Загвоздка была в том, на основе чего делать эту мишень (что будет "мозгом") и как научить её отстреливаться от неприятелей (нужны были протоколы ИК-боя). С протоколами мне помог Денис, чем сэкономил мне кучу времени. За это ему огромное спасибо. В качестве "мозга" я выбрал всё ту же ардуину. Можно было и Raspberry Pi использовать, но как по мне, для данного проекта это избыточная плата, функции которой не будут использоваться на полную мощь, а переплачивать за то, что я использовать не буду, мне не улыбается. Итак, это мой второй проект и я начал его потихоньку реализовывать. Прежде всего я набросал характеристику мишени в плане того, что хочу получить в результате. Получилось следующее:

Технические характеристики:

  • Питание 7.4-12в.
  • ИК-диод - длина волны 940 нм
  • ИК-приёмник - частота 38КГц
  • Диапазон работы дальномера – от 2 см до 4 метров (тестовый вариант, возможно исключение этого пункта)

Возможности:

  • Стрельба на разных протоколах
  • Понимание попаданий на разных протоколах
  • Возможность работать в пассивном и активном режимах
  • Возможность автоматически регистрировать появление объектов (танков) перед мишенью. (тестовый вариант, возможно исключение этого пункта)
  • Деактивация (заморозка) мишени при попадании в неё (пауза 10 или 20 секунд с электронной блокировкой ИК-диода).
  • Минимальное время перезарядки 5 секунд (вне зависимости от режима работы активной мишени).
  • Световая индикация попадания.
  • Световая индикация обратного отсчёта. (тестовый вариант, возможно исключение этого пункта)

Режимы работы:
1.      Активный: - Автоматический режим
[INDENT=2]- На основании дальномера (тестовый вариант, возможно исключение этого пункта)
[INDENT=2]- Через определённое время (5, 10, 15, 20 секунд)
- Ручной режим стрельбы
2.      Пассивный

Особенности работы в автоматическом режиме на основании данных дальномера:

  • Если мишень активна и стоит в автоматическом режиме по данным дальномера, то, при появлении в поле дальномера объекта, выводится индикация об обнаружении и идёт обратный отсчёт до выстрела (5 сек) с индикацией (табло или светодиоды).
  • Если объект исчез из поля зрения дальномера, то обратный отсчёт прекращается и обнуляется, а мишень дальше ждёт появления объекта в поле зрения дальномера.
  • Если объект в течение обратного отсчёта попал по мишени, то отсчёт прекращается и обнуляется, мишень переводится в режим заморозки на 10 или 20 секунд с индикацией обратного отсчёты этих секунд (табло или светодиоды). По окончании обратного отсчёта мишень размораживается и ждёт появления объекта в поле зрения дальномера
  • Если объёкт в течение обратного отсчёта не попал по мишени, то по завершении обратного отсчёта происходит выстрел на разных протоколах. После выстрела мишень дальше ждёт появления объекта в поле зрения дальномера.

Особенности работы в автоматическом режиме со стрельбой через определённое время:

  • Если мишень активна и стоит в режиме стрельбы через определённое время, то происходит индикация обратного отсчёта этого времени (табло или светодиоды) с последующим выстрелом на разных протоколах. После выстрела идёт перезарядкой в 5 секунд и начинается новый обратный отсчёт на основании выставленного времени.
  • Если объект в течение обратного отсчёта попал по мишени, то отсчёт прекращается и обнуляется, мишень переводится в режим заморозки на 10 или 20 секунд с индикацией обратного отсчёты этих секунд (табло или светодиоды). По окончании обратного отсчёта мишень размораживается и заново начинается новый обратный отсчёт на основании выставленного времени.

Особенности работы в ручном режиме:
  • Если мишень активна и стоит в ручном режиме, то стрельба осуществляется оператором посредством нажатия соответствующей кнопки.
  • После каждого выстрела идёт перезарядка в 5 секунд, в течение которых стрельба не возможна.
  • Если объект попал по мишени, она переводится в режим заморозки на 10 или 20 секунд с индикацией обратного отсчёты этих секунд (табло или светодиоды). В течение этого времени мишень не реагирует на манипуляции оператора. По завершении обратного отсчёта мишень размораживается и вновь реагирует на манипуляции оператора.

Железо

Изначально всё собиралось на беспаечных макетках и имело такой вид:

 IMG_20180210_204638.jpg

Потом, по мере написания кода (о нём немного позже), вырисовалось более чёткое представление, что, как и куда будет подключаться, какие блоки и электронные компоненты нужны и где их лучше размещать на плате. Как итог этого электронные компоненты стали паяться на мекетку 5,0х7,3 см и постепенно вырисовывался проект в железе. На плате для было размещены 5-ти пиновый разъём для подключения ИК-диода и ИК-приёмника (распиновака как у ХЛ на разъёме CN2), 5-ти пиновый разъём для подключения вспышки имитации выстрела, индикации попадания, и ещё двух устройств, которые управляются посредством биполярных транзисторов, пара двухпиновых разъёмов для подключения динамика и кнопки ручного выстрела, два трёхпиновых разъёма для подключения двух сервоприводов (первый используется на откате, а второй пока в резерве). Также на плате расположен разъём подключения внешнего питания (используется БЭК на 5в/5А). Для сглаживания просадки используется конденсатор на 1000мкф 16в и диод, расположенные сразу за разъёмом питания, также перед разъёмами для сервоприводов стоят ещё два конденсатора на 1000мкф 16в, которые стоят последовательно друг за другом, что в сумме даёт 2000мкф (не было у меня иных конденсаторов, а так бы воткнул один на 6000-6300 мкф и всё). Все внешние потребители питания берут "+" и "-" от единой шины посредством управляемых ключей на биполярных транзисторах. От ардуины приходят только управляющие сигналы на ключи, сервоприводы и MP3-плеер. Вот пара фото плат (с обратной стороны мешанина из проводов):

 IMG_20180204_204223.jpgIMG_20180209_023418.jpgIMG_20180209_023525.jpgIMG_20180209_030620.jpgIMG_20180209_023347.jpg    

Для выбора режима работы использовался галетный выключатель, который был подключён к плате с резисторами таким образом, чтобы весь этот блок стал играть роль переменного резистора, сопротивление которого зависело бы от позиции галетного выключателя.

 IMG_20180213_070007.jpgIMG_20180213_065550.jpg

В процессе работы некоторые платы были переделаны в свете изменившихся нюансов работы мишени. Ну и никуда без спиртования плат для очистки от флюса:
  IMG_20180211_195007.jpgIMG_20180211_194959.jpg

По окончании сборки было сделано основание для макетной платы, дабы спрятать мешанину проводов.

  IMG_20180218_101648.jpgIMG_20180218_101659.jpg

Была собрана стойка для галетного выключателя и всё было прикинуто, в плане компоновки, на листе пластика 21х13 см. Итог на фото ниже.

IMG_20180221_203534.jpgIMG_20180221_203831.jpg

Zloyuzver

Ну а теперь программная часть мишени.

Программный код

Код будет приведён не весь, дабы дать реализоваться творческому потенциалу тех, кто решит сделать нечто подобное.

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

Вот тело программы, в котором прописываются все глобальные переменные, указывается назначение портов ввода\вывода и вызываются нужные процедуры.
/* Скетч для активной мишени "Орудийный дот"
 *  ---------------------------------------
 *  Используемые пины:
 *  Пины с ШИМ у arduino nano: 3, 5, 6, 9, 10, 11
 *  2 - Имитация вспышки
 *  3 - ИК-диод
 *  4 - ИК-приёмник
 *  5 - сервопривод отката
 *  6 - серво блокировки ИК-диода
 *  7 - Serial TX для MP3 плеера
 *  8 - Serial RX для MP3 плеера
 *  9 -  
 *  10 -
 *  11 -
 *  12 - Проверка состояния плеера LOW когда играет и HIGH
 *  A0 - пин настройки режима работы
 *  A1 - световой индикатор попадания
 *  A2 - тригер УЗ-дальномера
 *  A3 - Эхо УЗ-дальномера
 *  A4 - Кнопка ручного выстрела
 *  A5 -
 *  A6 -
 *  A7 -
 */


#define Led_Vistrela 2 // световая имитация вспышки - пин D2
#define IRpin 3 // ИК-диод - пин D3
#define txPin 7 // tx для плеера - пин D7
#define rxPin 8 // rx для плеера - пин D8
#define MP3_svoboden 12 //пин проверки занятости плеера проигрыванием - пин D12
#define Rej_raboti A0 // пин выбора режима работы
#define G_LedPin A1 // световой индикатор попадания - пин A1
#define trigUZI A2 // тригер для УЗ-дальномера - пин A2
#define ehoUZI A3 // эхо для УЗ- дальномера - пин A3
#define Butt_Fire A4 // пин кнопки ручного огня испоьзовать INPUT_PULLUP, который ПРИ НАЖАТОЙ КНОПКЕ ВЫДАЁТ 0, а при ненажатой 1
#include <avr/pgmspace.h>
#include <IRLibDecodeBase.h>
#include <IRLibSendBase.h>
#include <IRLib_P01_NEC.h>
#include <IRLib_P02_Sony.h>
#include <IRLib_HashRaw.h>
#include <IRLibCombo.h>
#include <IRLibRecv.h>
#include <Servo.h>
#include <Ultrasonic.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>


// -------------- Прописывание сервоприводов ---------------
Servo servoOtkat; // сервопривод отката
Servo servoBlok; // сервопривод резервный
// ---------------------------------------------------------


// -------------- Прописывание программного серийного порта -----------------
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin); //закрепление за программным серийным портом mySerial пинов: 7 - tx, 8 - rx
// --------------------------------------------------------------------------


// -------------- Прописывание ИК-приймника и ИК-переменных (отправки и декодирования) ---------------
IRsendRaw mySender;      //объявляем переменную mySender типа IRsendRaw (3 PIN)
IRdecode myDecoder;      //объявляем переменную myDecoder типа IRdecode
IRrecv myReceiver(4);    //Присваиваем ИК-приёмнику пин D4
// ---------------------------------------------------------------------------------------------------


// ---------- Иницилизация Ик боя ---------------


// эта часть кода скрыта \\


// ------------------------------------------------


// ------------------ Переменные для разрешения стрельбы и переменные для паузы --------------------
unsigned long LastShotTime; // время последнего выстрела от начала работы программы
byte vremyaPausi = 5; // переменная, содержащая длительность паузы В СЕКУНДАХ
unsigned long StartPause; // переменная с временем начала паузы
bool EndPause = true; //флаг окончания паузы
bool needRepair = false;
// ---------------------------------------------------------------------------------------------


// ---------- настройка подключения УЗ-дальномера --------------


Ultrasonic ultrasonic(trigUZI,ehoUZI, 17400); // назначаем триггер - А2 пин, эхо - А3 пин. ограничение расстояния в 300 см посредством частоты 17400 = 300 см * 58
// -------------------------------------------------------------


// ----------- переменные настройки работы мишени --------------
int DistanciyaDefault = 0; // переменная, содержащая зарегистрированную дистанцию до препятствия при калибровке УЗ-дальномера в сантиметрах
byte RejimRaboti = 15; // переменная, содержащая номер режима работы мишени: 1 - режим ожидания (не стреляем и не принимаем сигнал), 2 - пассивный режим (не стреляем, но принимаеи ИК-сигнал), 3 - работа в автоматическом режиме по дальномеру, 4-6 - работа в автоматическом режиме по таймеру, 7 - режим автономной мишени на 9 жизней, 8 - работа в ручном режиме. Значение 15 (выходящее за пределы 1-8) присвоена для последующего определения режима работы
bool NaydenTank = false; //флаг обнаружения танка: false - танк не обнаружен, true - танк обнаружен
byte countHit = 0; //число попаданий в мишень (максимум 9) для режима автономной мишени на 9 жизней
// -------------------------------------------------------------


void setup() {
  LastShotTime = millis(); // присваиваем времени последнего выстрела значение текущего времени (прошедшего с момента запуска программы)
  pinMode (Led_Vistrela, OUTPUT); // Пин имитации вспышки при выстреле D2 в режим входа
  pinMode (IRpin, OUTPUT); // Пин ИК-диода D3 в режиме выхода
  pinMode (4, INPUT); //Пин Ик-приёмника D4 в режим входа
  digitalWrite (4, LOW); // гасим напряжение (если оно есть) на ИК-приёмнике, чтобы не мешал получению ИК-сигнала (D4)
  servoOtkat.attach(5); // привязываем сервопривод отката к аналоговому выходу 5
//  servoBlok.attach(6); // привязываем сервопривод механической блокировки ИК-диода к аналоговому выходу 6  
  pinMode (txPin, OUTPUT); // Пин передачи данных плееру D7 в режим выхода
  pinMode (rxPin, INPUT); // Пин получения данных от плеера D8 в режим входа
  pinMode (MP3_svoboden, INPUT); //пин проверки занятости плеера проигрыванием D12
  digitalWrite (MP3_svoboden, HIGH); // поднимаем флаг, что плеер изначально свободен (D12)
  pinMode (Rej_raboti, INPUT); // Пин выбора режима работы A0 в режим входа
  pinMode (G_LedPin, OUTPUT); // Пин светового индикатора попадания A1 в режим выхода
  pinMode (trigUZI, OUTPUT); // Пин траггера для УЗ- дальномера A2 в режим выхода
  pinMode (ehoUZI, INPUT); // Пин эхо для УЗ- дальномера A3 а режим вход
  pinMode (Butt_Fire, INPUT_PULLUP); //Пин кнопки ручного выстрела A4 в режим входа, который ПРИ НАЖАТОЙ КНОПКЕ ВЫДАЁТ 0, а при ненажатой 1
  digitalWrite (Butt_Fire, HIGH); // указываем, что кнопка ручного выстрела изначально не нажата (A4)
   
  Serial.begin(115200);
  delay(2000); while (!Serial); //delay for Leonardo
  mySerial.begin(9600); // выставление скорости программного серийного порта
  mp3_set_serial(mySerial); //установка softwareSerial для модуля DFPlayer-mini mp3
  mp3_set_volume(15); // уровень громкости из диапазоно 0~30
 
  ZAPUSK (); //функция индикации о включении мишени
 
  servoOtkat.write(90); // ставим качалку сервы отката в положение 90 градусов
  myReceiver.enableIRIn(); // Start the receiver
  Serial.println(F(&quot;Ready to receive IR signals&quot;));


  randomSeed(millis());
}


void loop() {
 
  if (RejimRaboti > 1)
  {
    HITS_CT(); //функцмя приёма ИК-сигнала и декодирования его
  };
  REJIMI_RABOTI ();
  if ((EndPause == true) && (needRepair == true))
    {needRepair = false;
     PLAY_SOUND (17); //проигрываем звук команды для наводки
       delay (40);
        while (digitalRead (MP3_svoboden) == LOW) //ждём, пока проигрывание закончится
         {
          delay (100); //даём ардуине чуток &quot;отдышаться&quot;
         }
       
    }
  if (EndPause == false )
    {
    PAUSA (vremyaPausi); //функция паузы, в точение которой мишень не стреляет (перезарядка, или пауза после попаданиея)
    }
  }

Код процедуры выстрела
void FIRE ()
{
// ----- объявление локальных переменных, которые используются только в этой функции -------
 byte UgolServiOtkata = 90; //переменная положения качалки сервы отката (в градусах)
// -----------------------------------------------------------------------------------------
 //myReceiver.disableIRIn(); // запрещаем принимаем следующую команду  
 PLAY_SOUND(15); //проигрываем звук выстрела
 digitalWrite (Led_Vistrela, HIGH); //включение вспышки выстрела
 delay (10);
 // ------------------- отката ствола ------------------
 servoOtkat.write(180);
 while (servoOtkat.read() != 180) //ставим ствол в положение максимального отката
  {  
  };
 UgolServiOtkata = 180;
 delay (270);  
  // ------------------- возврат ствола обратно после отката -----------------------
 while (servoOtkat.read() != 90) //медленно возвращаем ствол назад
  {
  UgolServiOtkata=UgolServiOtkata-1 ;
  if ((UgolServiOtkata >= 2) && (digitalRead(Led_Vistrela) == HIGH))
   {
   digitalWrite (Led_Vistrela, LOW); //выключение вспышки выстрела
   };
  servoOtkat.write(UgolServiOtkata);
  delay (8); //задержка при возврате после отката  
  };
 // ----------------------- отправка ИК-сигнала ------------------------

// эта часть кода скрыта \\

 // ---------------------------------------------------------------------
 LastShotTime = millis (); // призваиваем времени последнего выстрела текущее время
}

Код процедуры приёма ИК-сигнала
void HITS_CT()
{
if (needRepair) //проверка на необходимость восстановления мишени после попадания в неё
  {
  myReceiver.disableIRIn(); // запрещаем принимаем следующую команду  
  } else myReceiver.enableIRIn();// принимаем следующую команду
if (!needRepair)
{
  if (myReceiver.getResults() && EndPause && (countHit < 9)) //если что-то получили на ИК-приёмник и пауза закончилась и число попаданий меньше 9, то:
    {
     
    if (myDecoder.decode()) //если декодировали то, что получили, то:
      {

      // эта часть кода скрыта \\

      for (int i = 0; i <= len; i++) //цикл для сравнения кода ИК-боя с полученным декодированным значением
        {  
          if // эта часть кода скрыта \\
           {//если декодированное значение = одному из кодов ИК-боя и флаг обнаружения совпадения = 0, то выводится индикация попадания.
           
            flag = 1; // поднимаем флаг опознания кола ИК-боя
            Err = 0; // сбрасываем флаг ошибки совпадения кода с базой ИК-боёв            
            PLAY_SOUND(18);
            delay (400);
            HIT (); // выводим индикацию попадания
            StartPause = millis(); // запись времени начала паузы
            EndPause = false;
            if (RejimRaboti == 7) // для режима автономной мишени с 9-ю жизнями
              {
              countHit++; //увеличиваем число попаданий на 1
              vremyaPausi = 10; // пауза после попадания в мишень, в течение которой мишень полностью не активна              
              LastShotTime = StartPause + 10000;  
              } else
                    {
                    vremyaPausi = 20; // пауза после попадания в мишень, в течение которой мишень полностью не активна
                    LastShotTime = StartPause + 20000;  
                    }                                
            PAUSA(vremyaPausi);
            needRepair = true;
         
            }
         }
      //-----------------------------
      if (Err == 1)  // если поднят флаг ошибки совпадения кода с базой ИК-боёв, то:
        {
        Serial.println( "...not found..." ); // выводим в com-порт сообщение об отсутствии совпадения с ИК-боем из базы
        }
      }
      //-----------------------------
    myReceiver.enableIRIn();// принимаем следующую команду    
    };


flag = 0;
}
}

Код опроса на предмет выбранного режима работы
void OPROS_NASTROEK ()
{
  /* Если - То
   * map(analogRead(Rej_raboti), 0, 1023, 1, 9) = 1 - Режим ожидания    
   * map(analogRead(Rej_raboti), 0, 1023, 1, 9) = 2 - Пассивный режим работы    
   * map(analogRead(Rej_raboti), 0, 1023, 1, 9) = 3 - Режим стрельбы по дальномеру    
   * map(analogRead(Rej_raboti), 0, 1023, 1, 9) = 4 - Режим автоматической стрельбы с паузой 5 секунд    
   * map(analogRead(Rej_raboti), 0, 1023, 1, 9) = 5 - Режим автоматической стрельбы с паузой 10 секунд    
   * map(analogRead(Rej_raboti), 0, 1023, 1, 9) = 6 - Режим автоматической стрельбы с паузой 15 секунд    
   * map(analogRead(Rej_raboti), 0, 1023, 1, 9) = 7 - Режим автономной мишени с 9-ю жизнями  
   * map(analogRead(Rej_raboti), 0, 1023, 1, 9) = 8 - Режим ручной стрельбы
   */
byte CurrRejimRaboti = map(analogRead(Rej_raboti), 0, 1023, 1, 9); //считываем режим работы на текущий момент


 if (RejimRaboti != CurrRejimRaboti) //если изменился режим работы то проигрываем звуковое предупреждение о выбранном режиме и запоминаем этот режим
   {
        if (CurrRejimRaboti == 1)
    {
      PLAY_SOUND (3); //проигрываем озвучивание режима
    }
    if (CurrRejimRaboti == 2)
    {
      PLAY_SOUND (4); //проигрываем озвучивание режима
    }
    if (CurrRejimRaboti == 3)
    {
      // ----- рассчитываем среднее расстояние до эталонного препятствия исходя из среднего по пяти проведённым измерениям -----


      // эта часть кода скрыта \\


      // -----------------------------------------
      PLAY_SOUND (5); //проигрываем озвучивание режима
    }
    if (CurrRejimRaboti == 4)
    {
      PLAY_SOUND (6); //проигрываем озвучивание режима
    }
    if (CurrRejimRaboti == 5)
    {
      PLAY_SOUND (7); //проигрываем озвучивание режима
    }
    if (CurrRejimRaboti == 6)
    {
      PLAY_SOUND (8); //проигрываем озвучивание режима
    }
    if (CurrRejimRaboti == 7)
    {
      PLAY_SOUND (9); //проигрываем озвучивание режима
    }
    if (CurrRejimRaboti == 8)
    {
      PLAY_SOUND (10); //проигрываем озвучивание режима  
    }
    RejimRaboti = CurrRejimRaboti;
    delay(40);  
    while (digitalRead (MP3_svoboden) == LOW) //ждём, пока проигрывание закончится
         {
          delay (100); //даём ардуине чуток "отдышаться"
         }
    LastShotTime = millis();
    EndPause = true;
    needRepair = false;
    vremyaPausi = 5;
    countHit = 0; //обнуляем число попаданий в мишень для режима автономной мишени с 9-ю жизнями при смене режима
    if (RejimRaboti < 2) //проверка на необходимость восстановления мишени после попадания в неё для режимов 2-8
     {
      myReceiver.disableIRIn(); // запрещаем принимаем следующую команду  
     } else myReceiver.enableIRIn();// принимаем следующую команду
   }
}

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

Скажу сразу - т.к. работа над мишенью ещё не завершена, то программный код постоянно меняется, что-то в него добавляется, что-то удаляется. Именно поэтому есть расхождения между указанными выше характеристиками и текущим результатом. А он таков:
Режимы работы мишени:

1) Режим ожидания, в течение которого мишень проигрывает несколько старых военных песен в случайном порядке.
2) Пассивный режим работы, в котором мишень только принимает выстрела по протоколам Хенг Лонг, Тамия, Тайген, Де Агостини.
3) Режим стрельбы по обнаружению танка ультразвуковым дальномером (режим пока тестовый)
4) Режим активной мишени с автоматической стрельбой с интервалом 5, 10, 15 секунд на выбор.
5) Режим автономной мишени на 9-ть жизней с автоматической стрельбой через каждые 5 секунд
6) Ручной режим стрельбы.

Мишень озвучивает:
1) Рандомно выбранные старые военные песни в режиме ожидания
2) Выбранный режим работы
3) Выстрел
4) Попадание в мишень
5) Восстановление работоспособности мишени после попадания.
6) Также в режиме стрельбы по дальномеру озвучивается обнаружение и потеря танка из видимости.

На сим пока откланиваюсь.

Zloyuzver

Пока я маюсь с электроникой, коллега Михаил потихоньку приводит пушку к нормальному виду (у нас вышло 15 номеров и всё заглохло) и занимается оформлением ДОТа.
  IMG-42859b3ae3064bae4d9a2ba37ad50a21-V.jpgIMG-98c5b5778c48207c4d592af3e9a64b2a-V.jpgIMG-586e4a47c200d45e52efba712903f654-V.jpgIMG-9a4406675acc64e8b8d97f93cf9ac854-V.jpg

Вот так потихоньку, не спеша делаем совместно этот проект.

юрий

Я не силен в программировании но хочу внедрить модернизацию в дот помагите.
Седой Урал куёт победу!!

Zloyuzver

Работы над внешностью потихоньку продолжаются. Миша сделал поворотную ось.

01.jpg02.jpg03.jpg

Поставил пушку на колёса (использовали катки от Т-72)

04.jpg05.jpg

Сделал пробный шаблон передней стенки дота и примерили к пушке.

05.jpg06.jpg07.jpg08.jpg

Прикинули место расположения сервопривода для поворота пушки по горизонтали.

09.jpg09.jpg10.jpg11.jpg12.jpg13.jpg

Как будет завершена работа с расположением элементов и блок с пушкой будет у меня - примусь за отладку программной части для реализации поворота пушки на основе данных от выносных дальномеров.[/attach][/attach][/attach][/attach][/attach][/attach][/attach][/attach]

Zloyuzver

Цитата: юрий;6393Я не силен в программировании но хочу внедрить модернизацию в дот помагите.
Юра, озвучь, что конкретно хочешь реализовать?

юрий

Ну звук мп модуль есть ардуино, откат совпадал с выстрелом датчик движения хотелос
Цитировать
ь бы еще есть ультразвуковой поставить ардуино. Ну пока все.
Седой Урал куёт победу!!

Zloyuzver

Датчик движения на PIR на танк не реагирует, только на человека срабатывает. По УЗ-дальномеру нормально берёт только на 2 метра.

Zloyuzver

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

IMG-83b7156a3167a9ac6b26ffd00e393d2e-V.jpgIMG-4454741c1500336feb4b770f24ee900d-V.jpgIMG-39abb44f3438a4df2c18e25220240025-V.jpgIMG-bd18a49504ed86abcae08f938ac41e37-V.jpg    

И добавили небольшие детали для красоты

IMG-7a854af0836ddb20fdf2fd37d069410f-V.jpgIMG-4de70d704caf78100dd3bfff6d0c40bc-V.jpg

Zloyuzver

В планах - "прикрутить", таки, к мишени выносные УЗ-дальномеры (пока 2 штуки), ибо встроенный с его 2 метрами, на которых он нормально видит танк, лично меня не устраивает. Также планирую подключить матричную индикаторную панель (см. фото ниже) для вывода информации о попадании в мишень и времени, оставшемся до её реактивации.
Free-Shipping-MAX7219-Dot-Matrix-Module-For-arduino-Microcontroller-4-In-One-Display-with-5P-Lin.jpg