■ Unoマイコンの端子の利用状況
折り返されて見ずらいかもしれません。興味ある方は別テキストエデッタにコピー展開してご覧ください。
=========================================================================================================
Unoには4個のLEDを取付け--> D4?,D7,D8,D9
---------------------------------------------------------------------------------------------------------
基板番号 機能(Diodeは3~9) 信号状態 用途 接続回路
---------------------------------------------------------------------------------------------------------
9~ D9(L9) ledPin9 (緑LED)プログラム実行確認LED Normal Low プログラム実行確認LED 点滅現象
8 D8(L8) ledPin8 (赤LED)◎A-夜間 [真] Normal Low ◎A-夜間 [真 true]
7 D7(L7) ledPin7 (青LED) △B―昼間[偽] Normal Low △B―昼間 [偽 false]
6~ D6(L6) ledPin6 xx:x5 Normal ★High 電子音Ⅱ(12V10W-AMP) Shoot#2 (黄LED)
5~ D5(L5) ledPin5 xx:x3 Normal ★High PIC電子音Ⅰ Shoot#1 (黄LED)
4 D4(L4) ledPin4 (緑LED) xx:x0 Normal ★High ラジオON Shoot#3 (黄LED) 77秒
3 D3(L3) ledPin3 未使用 空き
2 INPUT(INT) [分]更新中にINTが入ると、時刻取得が正しく行われず時刻が乱れた。INT動作は採用できません。
--------------------------------------------------------------
A0 アナログ 0 --> デジタルへ LED
A1 アナログ 1 --> デジタルへ BZ Tr:2SC1815の最大コレクタ電流は150mAである
---------------------------------------------------------------------------------------------------------
Oneshoot IC555 は、 2pin Active Lowで3pin OUT(HIGH)
=========================================================================================================
One Shoot#1 PIC電子音Ⅰ C=33μF R=100KΩ T=3.6 [Sec] PICに引き渡すので周期Tを越えて可能
One Shoot#2 電子音Ⅱ_12vAMP C=33μF R=100KΩ T=3.6 [Sec] 周期T以内の動作
One Shoot# C=33μF R=100KΩ T=3.6 [Sec]
One Shoot#3 ラジオ C=33μF R=2M(2x10^6)Ω T=77[Sec] 周期T以内の動作
=========================================================================================================
T=1.1xCR=1.1x33x10^(-6)x1x10^6=36秒
T=1.1xCR=1.1x33x10^(-6)x10x10^6=360秒(6分) 茶黒緑 デジタル抵抗計で 10.8MΩ <--- カラー表示おかしい
Shoot#3 赤黒緑 20x10^5=2x10^6 2MΩ T=1.1CR=1.1x33x10Exp(-6)x2x10Exp(6)=72.6秒
*実測値は理論値より長めの値となる。すると4~5分のワンショットを設計するなら、
理論値
2MΩ 73秒
3MΩ 108秒(1分超)
5MΩ 181秒(3分)
10MΩ 6分
One Sootの強制動作スイッチ(IC555の2pinを10KΩでPull Up,IC555の2pinをGND)は設ける必要がある。
このスイッチにより、電子音Ⅰ・電子音ⅡのONを確認できる。
=====================================================================================
2023.7.5 現在の設定
[xx:x3] pin5 PIC電子音 ショット#1 約4秒
[xx:x5] pin6 電子音Ⅱ_12vAMP ショット#2 約4秒
[xx:x0] pin4 ラジオON ショット#3 77秒
==============================================================
■ [xx:x0] 時刻でラジオがONとなります
プログラムの一部です。
時刻「分」の桁が例えば、10,20,30,40,50,00 で動作します。要するに10分間隔の動作が実現できます。ON継続時間はおおよそ77秒間です。この77秒とはワンショット・マルチ・バイブレータのパルス長です。
このような記述で [xx:x3] 電子音1 [xx:x5] 電子音2 の各回路を起動動作させます。
下記がArduino Uno のプログラム(スケッチ)です。
p_alarm = "xx:x0"; //ポインタalarmに時分をセット @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ xx:x0 1件目の検索設定あり
Serial.println(p_Ntime);//ポインタNewTimeの意味
Serial.println("p_alarm");//ポインタalarmの意味
Serial.print(p_alarm);//シリアルモニタに印字(変数p_alarmの内容)
int m = 4;//基数0 "xx:x0" 下1桁を照合 "xx:xx" は照合無し
int n = 4;//基数0 4で最下位となる
//xx:x0 10分インターバルでラジオ駆動 ワンショットマルチバイブレーターをトリガーします
if (strncmp(p_alarm + m, p_Ntime + m, n + 1 - m) == 0) { //<-- 注意 n-m=4-3=1 1文字を比較
Serial.println("_Detected time●◎xx:x0●");//あたり
digitalWrite(ledPin4, HIGH); // //Normal High LEDを点灯 ラジオを Soot#3使用。
digitalWrite(ledPin4, LOW);// One Shoot Active Low
delay(100);// One Shoot Active Low
digitalWrite(ledPin4, HIGH);
} else {
//Serial.println("_was not detected△");// はずれ
//digitalWrite(ledPin4, HIGH); // LEDを消灯 ラジオをOFF
}
p_alarm = "xx:x3"; //ポインタalarmに時分をセット @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ xx:x3 件目の検索設定
Serial.println(p_Ntime);//ポインタNewTimeの意味
Serial.println("p_alarm");//ポインタalarmの意味
Serial.print(p_alarm);//シリアルモニタに印字(変数p_alarmの内容)
m = 4;//基数0 "xx:30" m = 3; n = 4;下2桁を照合 "xx:xx" は照合なし
n = 4;//基数0
if (strncmp(p_alarm + m, p_Ntime + m, n + 1 - m) == 0) { //<-- 注意 n-m=4-3=1 1文字を比較
Serial.println("_Detected time●◎xx:x3●");//あたり
digitalWrite(ledPin5, HIGH);
delay(100);
digitalWrite(ledPin5, LOW); // LED消灯灯させる xx:x8でOne Shoot#2 PIC警報音 電子音Ⅱを送出
delay(100); //PIC電子音1 Up Edge でトリガーされる
digitalWrite(ledPin5, HIGH); // One Shoot#1 の2pin Active Low 信号をPIC alarmの起動信号に利用
/*
digitalWrite ( A0, 1 );//A0に接続したLEDを点灯
delay(1000);
digitalWrite ( A0, 0 );//A0に接続したLEDを
// LEDの状態をトグル(反転)
if (A0 == 0) {
//A0 = 1; // 消灯から点灯に変更
digitalWrite ( A0, 1 );
} else {
//A0 = 0; // 点灯から消灯に変更
digitalWrite ( A0, 0 );
}
*/
if(global_night_flag){
digitalWrite ( A0, 1 );//A0に接続したLEDを点灯
}
else { digitalWrite ( A0, 0 );//A0に接続したLEDを
}
} else {
Serial.println("_was not detected△");// はずれ
//digitalWrite(ledPin3,HIGH); // LEDを消灯
}
p_alarm = "xx:x5"; //ポインタalarmに時分をセット @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ xx:x5 3件目の検索設定
Serial.println(p_Ntime);//ポインタNewTimeの意味
Serial.println("p_alarm");//ポインタalarmの意味
Serial.print(p_alarm);//シリアルモニタに印字(変数p_alarmの内容)
m = 4;//基数0 "20:10" 5桁を照合
n = 4;//基数0
if (strncmp(p_alarm + m, p_Ntime + m, n + 1 - m) == 0) { //<-- 注意 n-m=4-3=1 1文字を比較
Serial.println("_Detected time●◎xx:x5●");//あたり
digitalWrite(ledPin6, HIGH);
delay(100);
digitalWrite(ledPin6, LOW); // Active Low ワンショット#2 のTrigger Normal High
delay(100); //電子音Ⅱ
digitalWrite(ledPin6, HIGH);
} else {
Serial.println("_was not detected△");// はずれ
//digitalWrite(ledPin6, HIGH); // LEDを点灯 ワンショットのTrigger Normal High ハード部でプルアップ済
}
******************************
■ プログラムの後半です。部分抜き書きで申し訳ありません。
main ルーチン すなわちUnoプログラムのloop 内を60秒(1分)以内に実行完了する必要があります。
理由はRTCが「60秒」毎に新時刻を送り出します。
RTCからのこの新時刻を受信スタンバイの状態であることが必要です。Unoでそのようなプログラムとしています。
digitalWrite(ledPin7, LOW);//RTCの「分」更新時に1回だけ点滅
確認のため、上記の命令を入れています。
イメージ的にはこの「マイコンの生存確認プログラム」と理解してください。
60秒以内に点滅を繰り返します。
この点滅を見ると安心できます。
//char n_time[6] = "06:00"; // 現在時刻を文字列で指定
char *hour_str = strtok(p_Ntime, ":");
char *minute_str = strtok(NULL, ":");
Serial.println(hour_str);
Serial.println(minute_str);
int hour = atoi(hour_str);
int minute = atoi(minute_str);
if ((hour >= 18 && minute >= 00) || (hour <= 4 && minute >= 00)) {
// 04時00分は真 04時01分は真 04時59分は真 05時00分は偽 05時01分は偽
// (注意)04時代は真となる. 00時代~04時代は真となる。18時以降は真となる。
//if ((hour >= 17 && minute >= 30)) {
// 17時30分 以降 真 00時00分 偽
// 夜間の時間帯にある場合の処理を想定
digitalWrite(ledPin8, HIGH); // LEDを点灯させる
delay(1000);
digitalWrite(ledPin8, LOW);//RTCの「分」更新時に1回だけ点滅
Serial.println("●◎A-夜間 [真 true] 動作です●");
int night_flag = 1;
global_night_flag= night_flag;
}
else {
// Bの動作を行います
digitalWrite(ledPin7, HIGH); // LEDを点灯させる
delay(1000);
digitalWrite(ledPin7, LOW);//RTCの「分」更新時に1回だけ点滅
Serial.println("△B―昼間 [偽 false] else動作です.");
int night_flag = 0;
global_night_flag= night_flag;
}
******************************