【使い方】
外部スイッチと電池オモチャ等の間に挟んで使用
① 電源スイッチを入れる(赤LED点灯)
② 外部スイッチを押すとリレーON(緑LED点灯)
[パルス モード] 外部SWONでリレー0.1秒間ON
[ラッチ モード] 外部SWをONするたびにリレー交互にON ・OFF
モードの切り替え:青のジャンパー線の位置で切り替え
【部品】 ( )は入手先 判然としないものあり
ATtiny13A-PU(秋月電商)、リレーモジュール(アマゾン中華製5V)
乾電池ボックス(シリコンハウス、オルタネイトスイッチ(シリコンハウス or 100均タッチライトから?)
ブレッドボード(アマゾン中華製)、ジャンパー線(シリコンハウス ブレッドボード用)
3.5φモノラルジャック・プラグ、ケース(100均or ホームセンター?)
【回路】
【スケッチ】 → sketch のダウンロード
/* ================================== one shot helper by ATtiny13.ino ================================== ATtiny13A-PU 電源電圧:1.8~5.5V、コアサイズ:8bit、クロック:20MHz、プログラムメモリ:1kB ピン配置 RESET・ ・VCC A3 D3・ ・D2 A1 SCK <= SW RELAY => A2 D4・ ・D1(PWM) MISO GND・ ・D0(PWM) MOSI <= dip 書き込み 学習回路:HIDaspx(トップマン製ヒダピオ学習回路) or Arduino as ISP ボード:ATtiny13(bitduino13) Clock:★9.6MHzのみが無難 */ #define SW 2 #define RELAY 4 #define dip 0 //状態の定義 #define SW_ON LOW //入力:ONのときLOW(pullup抵抗なので) #define SW_OFF HIGH // OFFのときHIGH #define OUT_ON LOW //出力:LOWでON #define OUT_OFF HIGH // HIGHでOFF #define FLG_ON 1 //フラグ #define FLG_OFF 0 //変数の定義 int SW_state = SW_OFF; //外部スイッチ入力の入力状態 int old_SW_state = SW_OFF;// 古い外部スイッチの状態 (初期設定はOFF) int RELAY_state = FLG_OFF; // LED点滅の状態 (初期設定はOFF) int pulse_time = 100; //パルス出力時間(ミリ秒) void setup() { pinMode(SW, INPUT_PULLUP); pinMode(dip, INPUT_PULLUP); pinMode(RELAY, OUTPUT); digitalWrite(RELAY, HIGH); //リレー出力OFF } void loop() { if (digitalRead(dip) == SW_OFF) { //ディップスイッチがオフの時、パルスモード if (digitalRead(SW) == SW_ON) { //外部スイッチが押されて、かつ if (SW_state == 0) { //OFFからONになったときだけパルス出力する SW_state = 1; digitalWrite(RELAY, OUT_ON); //LED出力ON delay(pulse_time); digitalWrite(RELAY, OUT_OFF); //LED出力OFF } } else if (SW_state == 1) { //ONからOFFになったとき SW_state = 0; delay(50); //チャタリング対策 } } else if (digitalRead(dip) == SW_ON){ // ディップスイッチがオンの時、ラッチモード // 外部スイッチをONするたびに出力のON・OFFが切り替わる SW_state = digitalRead(SW); // 外部スイッチの状態を読み取る //スイッチがON、前回がOFFだったとき if ( SW_state == SW_ON && old_SW_state == SW_OFF ) { //RELAY点滅の状態を切り替える if (RELAY_state == FLG_ON) { // フラグがONのとき RELAY_state = FLG_OFF; // OFF } else { // フラグがOFFのとき RELAY_state = FLG_ON; // ON } delay(50); // チャタリング防止のウエイト } old_SW_state = SW_state; // スイッチの状態をold_SW_stateへ保存 if (RELAY_state == FLG_ON) { // LEDの点滅状態がONのとき digitalWrite(RELAY, OUT_ON); //リレー出力ON } else { // OFFのとき digitalWrite(RELAY, OUT_OFF); //リレー出力OFF } } }