ダウンロード

ユーザーマニュアル、プログラムのダウンロードは
こちらから「Arduino_Nano_Every_xx.zip」ファイルをダウンロードしてください
※xxはバージョン

注意

  • エアコンの近くでセンサーを動作させると、エアコンのリモコンが効かないことがあります。場所や角度を変えると避けることができます。
  • 動作中はマイコン、基板、センサーに触れないで下さい。静電気で壊れる事があります。
  • 8個のセンサーについての注意
    • センサーは必要な時以外、なるべく触らないようにして下さい。
    • センサーを抜き差しするときは電源をオフしてから行って下さい。
    • 壊れやすいのでセンサーの抜き差しは優しくして下さい。
  • 技術説明はこちらのYouTubeから
  • 応用例:32x16LEDモニター例

マニュアルの補足

  • 校正電源ON直後にLEDが青く光りセンサーの校正をして周囲の明るさ基準値を取得します。
    この時、蛍光灯の真下を避け、センサー上空に何もない状態にして下さい。
    そうしないと校正が影響されてセンサーの感度が悪くなる場合があります。
    センサーの感度が悪い時は正しい状態でマイコンリセットか電源抜き差しすると正常に動作します。
  • LED ONピン:センサーの13ピン(OE_CLED)と14ピン(PWM_CLED)はAND(両方ON)でカラーLEDをONします。
    一部で13ピンと14ピンの配線が入れ替わっている場合がありますが正しく動作します。

センサーの接続方法

電源を入れてからセンサーが青く光るまでは校正を行うのでセンサーに手などを近づけないで下さい。感度が下がります。

基板パターン図

配線図

Arduinoディレクトリへの移動

プログラムディレクトリ(フォルダ)は下記の通りPCのArduinoディレクトリへ移動して下さい。

スケッチ(sketch) ディレクトリ
IHS11_Nano_Every(IHS11_Nano_Every.ino)

ライブラリ(libraries) ディレクトリ
Sensor(Sensor.cpp, Sensor.h)
CLED(CLED.cpp, CLED.h)

ツール設定例

Arduino IDEでツールの設定は下図を参考にして下さい。

プログラム

sketchディレクトリの「IHS11_Nano_Every.ino」を開きます。
sensor.setAd()で配列adVal[8]にセンサー値をセットしています。この値から上空の変化が推測できるのでそれに合わせてフィギュアなどを制御すると魔法のように感じられます。

#include "CLED.h"
#include <SPI.h>

Sensor sensor(0);               // Sensor型オブジェクト定義、0はエラー対策です。これを直すと影響が大きいのでこのままで
CLED cled(0);                   // CLED型オブジェクト定義、0はエラー対策です。同上です
// ************************** setup ********************************
void setup() {
  //下(9行)のコメントを外すとシリアルモニタで距離(max4300)が見られます
  //#define Monitor
  #ifdef Monitor
  Serial.begin(57600);          // ** シリアルモニタのボーレート57600 **
  #endif
  sensor.init();
  cled.set(5);                  // init blink
  delay(1000);
}

// *************************** loop ********************************
int adVal[COL_LEN];
void loop() {
  sensor.setAd();              // ** この関数実行後、配列adVal[8]にセンサー値が入ります **
  #ifdef Monitor               // ** ここから下はシリアルモニタ用なのでセンシングとは関係ありません **
  sensor.getColAd(adVal);
  for (int i=0; i<COL_LEN;i++) {
    Serial.print(adVal[i]);    // シリアルモニタで8個のセンサー値を出力します
    Serial.print(", ");
  }
  Serial.println("");
  #endif
}

ロジック_センシング(YouTubeから

  • センサー値は精度を上げるため2回演算します。
    • 赤外線LEDオンと赤外線LEDオフのADコンバータ値とのです。
    • 上の値から起動時に保存した初期値(周囲の明るさ)を引いた値です。

カラーLED表示

  • カラーLEDは3個のシフトレジスタ(74HC595)で24bit(3×8)値をシリアルーパラレル変換します。
  • FIX_CLEDを HIGH → LOWで値がシフトレジスタに保存されます
  • OE_CLEDとPWM_CLEDが両方ONのときカラーLEDが光ります。
  • 24bit値は下図のように計算します。

カラーLED プログラム

void CLED::set(byte* pAry, bool isInd) { 				// 1-12[8]:{7, 3,..}
	if (isInd) {										// *** blink indicator ***
		int indiCnt = INDI_CNT << ((inOn) ? 0 : 2);
		if (++inCnt == indiCnt) {						
			inCnt = 0;
			inOn = !inOn;
		}
	}
// ****************************
	unsigned long val24 = 0;
	bool isCledOn = false;
	for (int col = 0; col < COL_LEN; col++) { 			// LED number is opposit direction
		isCledOn |= (pAry[col] > 0);
		bool indiOn = isInd && inOn && (col == COL_LEN - 1) && (!isCledOn);	// indicator 
		byte val1_6 = indiOn ? 6 : pAry[col];
		val24 += (unsigned long)color[val1_6] << col * 3;
	}
	digitalWrite(SEL_SEN, LOW);
	digitalWrite(OE_CLED, LOW);        
	digitalWrite(SS, LOW);
	for (int b = 2; b>=0; b--) {
		SPI.transfer((val24 >> b * COL_LEN) & 0xff);
	}
	digitalWrite(FIX_CLED, HIGH);
	digitalWrite(FIX_CLED, LOW);      
	digitalWrite(SS, HIGH);
	digitalWrite(OE_CLED, HIGH);
}