Управление спуском для Panasonic G3 на коптере

Задумал я недоброе дело, для фото цеплять не 100 граммовую мыльницу, а Panasonic G3, нагуглил распиновку провода для фотографирования: www.doc-diy.net/photo/remote_pinout/ (там же под все фотики), оказалось что японцы выпендрились и пришлось городить схемку с резисторами, которые еще и перемешались все у меня в пакетике 😦
Спаял вот такого зверуса (под термоусадкой от 3 до 4 резисторов, ибо нужного номинала не нашел у себя, да и то всеравно не совсем точно получилось)

  • выпаял NFET с убитого регуля (старый hk blueseries, не переживший прошивки).
    Получилась вот такая схемка:

    Резюк было лениво искать (между D3 и GND), постави какой нашел на 60 с чем то кОм.
    Спасибо soliada, за проверку компиляции гугления.
    небольшой скетч на основе примера Blink

void setup() {
  pinMode(13, OUTPUT);
  pinMode(3, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  digitalWrite(3, HIGH);
  delay(500);
  digitalWrite(3, LOW);
  digitalWrite(13, LOW);    // set the LED off
  delay(5000);              // wait for a second
}

Засталяет нажимать на кнопку спуск в течении 0.5 секунды и повторяет это дело каждые 5 секунд. Позже это всё будет заменено на сигнал с пульта (+ есть желание 1 канал использовать под кучу подобных переключалок, но придется ардуинки и на отправляющую сторону ставить).

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

ну и видео работы этого безобразия

www.youtube.com/watch?v=sPU0riRdexI

UPD: новый код, чтобы с аппы нажимать кнопку, канал приемника в D2, нфет на D3


/*

(copypast from BaronPilot and MultiWii)

D2 - RC input
D3 - n-fet output
D13 - LED

*/
#define SERIAL_COM_SPEED 115200
int rawIn;
static uint32_t rcTime;
static uint32_t currentTime;

  #define LEDPIN_PINMODE             pinMode (13, OUTPUT);
  #define LEDPIN_OFF                 PORTB &= ~(1<<5);
  #define LEDPIN_ON                  PORTB |= (1<<5);

  #define SHUTTER_PINMODE            pinMode (3, OUTPUT);
  #define SHUTTER_OFF                PORTD &= ~(1<<3);
  #define SHUTTER_ON                 PORTD |= (1<<3);


byte newbit,oldbit,changed;
unsigned long startIn;
unsigned long time;
int blockedRX=0;

#define MASKPCINT0 (1<<2)
ISR(PCINT2_vect)
{
  time=micros();
  newbit=PIND;
  changed=newbit^oldbit;
  if (changed&MASKPCINT0)
    if (newbit&MASKPCINT0) startIn=time;
    else rawIn=time-startIn;
  oldbit=newbit;
  blockedRX=0;
}


void setup() {
  (SERIAL_COM_SPEED);
  LEDPIN_PINMODE
  pinMode(2, INPUT);
  PCICR |= (1 << PCIE2);
  PCMSK2 = (1 << PCINT18);
  rawIn=1499;
  delay(200);
}

void loop () {
  if (currentTime > (rcTime + 20000) ) { // 50Hz
    (rawIn);
    if (rawIn>1500) {
      LEDPIN_ON
      SHUTTER_ON
    } else {
      LEDPIN_OFF
      SHUTTER_OFF
    }
    rcTime = currentTime;
  }
  currentTime = micros();
}
  • 1803