スタックチャンみたいに、前にいる人物の方に視線を向けるプログラムをArduinoで作ってみようと。
使ったセンサーは余っている赤外線ユニット基盤
とりあえず基盤のピンで出力されるデジタル出力を使ってみた。
が、最大で10数cm程度までしかスキャンできない。
ちゅうことでこの計画は中止
「コインで自動販売機」に変身させるかな。
コインの高さを測って投入金額を計算させる。
規定金額になったら品物が出てくる。
お釣りは出さないよw
上記写真は縦位置を図る4個目のセンサーを付けている。(後で削除)
各基盤に5V電源を加えておいて、信号線を見る。
何も検知しなければ通常はHIGHで、検知するとLOWになる。
デジタルピン3..5の3本を使って右、中央、左を監視
ダンボーくんで台座を組んでOLED1513へ状態表示してみた。
自分でOLEdプログラムを組みのは初めて。
気づき:clearLine()やclearDisplay()を使うと表示がチラつくので使えない。
なので、空白を上書きするが吉。でなければバッファ転送かな。
左・中央センサー前に障害物を置いた。当然だけど反応してる。
何かこれだけ配線が整然としてると賢くなったような気がするw
とはいえ距離が出ないのでスタックチャンの視線切り替えには使えませんね。
OLEDのホルダを作ってやろう。つままれたままではかわいそうだ。
===========================
/*
赤外線センサー基盤を3個用意し、横一列に並べる
各センサーの状態をOLED 1513へ表示する
2024/5/5
*/
#include "U8x8lib.h"
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
#define RIGHT_PIN 3
#define MID_PIN 4
#define LEFT_PIN 5
void setup(void) {
pinMode(RIGHT_PIN, INPUT);
pinMode(MID_PIN, INPUT);
pinMode(LEFT_PIN, INPUT);
u8x8.begin();
// u8x8.setFont(u8x8_font_chroma48medium8_r); // 通常の小型文字
u8x8.setFont(u8x8_font_px437wyse700b_2x2_r); // 4倍角
}
赤外線センサー基盤を3個用意し、横一列に並べる
各センサーの状態をOLED 1513へ表示する
2024/5/5
*/
#include "U8x8lib.h"
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
#define RIGHT_PIN 3
#define MID_PIN 4
#define LEFT_PIN 5
void setup(void) {
pinMode(RIGHT_PIN, INPUT);
pinMode(MID_PIN, INPUT);
pinMode(LEFT_PIN, INPUT);
u8x8.begin();
// u8x8.setFont(u8x8_font_chroma48medium8_r); // 通常の小型文字
u8x8.setFont(u8x8_font_px437wyse700b_2x2_r); // 4倍角
}
#define right_ptr 2
#define mid_ptr 1
#define left_ptr 0
char sensor[ ] = "210";
void loop(void) {
if (digitalRead(RIGHT_PIN) == LOW) sensor[right_ptr] = '*'; else sensor[right_ptr] = '_';
if (digitalRead(MID_PIN) == LOW) sensor[mid_ptr] = '*'; else sensor[mid_ptr] = '_';
if (digitalRead(LEFT_PIN) == LOW) sensor[left_ptr] = '*'; else sensor[left_ptr] = '_';
u8x8.setCursor(0,2); u8x8.print(sensor);
}
#define mid_ptr 1
#define left_ptr 0
char sensor[ ] = "210";
void loop(void) {
if (digitalRead(RIGHT_PIN) == LOW) sensor[right_ptr] = '*'; else sensor[right_ptr] = '_';
if (digitalRead(MID_PIN) == LOW) sensor[mid_ptr] = '*'; else sensor[mid_ptr] = '_';
if (digitalRead(LEFT_PIN) == LOW) sensor[left_ptr] = '*'; else sensor[left_ptr] = '_';
u8x8.setCursor(0,2); u8x8.print(sensor);
}