2023年オーストラリア・インドネシア    金環皆既日食のたくらみ

Seeeduino XIAOでGo!-②
2021.12.25:Open  2022,01.10 部品配置図訂正

Seeeduino XIAOをどう組むか?

 Seeeduino XIAOは11本のGPIOピンがあります。
 そこに、
  1. デジイチからのシャッター信号を受けるため…2本
  2. リアルタイムクロック(RTC:GS1307)とOLEDディスプレイとのI2C通信…2本+3.3V電源
  3. RTCからの1秒毎の信号を受ける…1本
  4. GPSとのUART通信…2本+5V電源
  5. TFカードとのSPI通信…3本+1本+3.3V電源
 の11本をフルに使います。 
 デジイチからのシャッター信号は、ニコンZ6の場合、ホットシューからシャッターが切れた後、感知に使う電流・電圧を一旦切らないとシャッター信号が出続ける。そのため、1本のピンでシャッター信号を受ける入力ピンと共に、その感知のために電圧をかけるピンを1本加え、シャッター信号が感知されたらそのピンによる電圧・電流をオフにする仕掛けを入れる必要があると考えました。
 仕掛けとしては、
  1. GPSで正確な時刻(UTC)を受けたら、その時刻でRTCを設定する
  2. Seeeduino XIAOで1/100秒のストップウォッチを走らせ、RTCからの1秒毎の信号でリセットする
  3. 上で得られた時刻をOLEDディスプレイに表示する
  4. シャッター信号を得たら割り込みを発生し、時刻をTFカードに書き込む
  5. 加えてPICでシャッター信号を検知し、信号が得られたらLEDを2秒間5~10Hzで点滅させる
 という事をして行きます。
 想定される必要事項に対応した回路図は下のようになります。

回路図

  
部品配置図 裏面の配線と配置


プラケースに収めるとこんな形:TFカードスロットは本当はGPSの下側に配置します。

Seeeduino XIAOとこれを使った実験-0

 本当はI2C通信の実験を始める所ですが、先ずは何より「Lチカ」でしょう、という事で、簡単なプログラムを走らせる事にしました。
 0ピンでプルアップしLEDも繋いで、1ピンに取り付けたスイッチの状態を感知する
 スイッチがOnになったら、0ピンをLowにして25ms置いて再度0ピンをHigh状態にします。
const int buttonPin = 1; // the number of the pushbutton pin

const int ledPin =  0; // the number of the LED pin

int buttonState = 1;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is LOW:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
    delay(25);
    digitalWrite(ledPin, HIGH);
    delay(25);
  }
}

inserted by FC2 system