組込み系システム開発室by藤原技研M

製作中の組込み機器や気になる開発ツールなどを中心に記事を書いています。

ESP-WROOM-02開発ボードをArduino IDEで使う

ファイル→環境設定を開きます。
Settingタブ内のAdditional Boards Manager URLsに次のURLを入力します。
http://arduino.esp8266.com/stable/package_esp8266com_index.json

これだとボードマネージャーにesp8266 by WSP8266 Communityがありません。
以下に変更すると見えるようになったので、最新のバージョンをインストールしました。

https://github.com/esp8266/Arduino/releases/download/2.3.0/package_esp8266com_index.json

f:id:fujiharagiken:20200402192242p:plain

これで、ボードマネージャーで Generic ESP32 Moduleを選択することができました。

PoE給電で何番ピンを使っているか

PoE給電とは、Power over Ethernetの事で、LANケーブルを使ってEthernet機器に電力を供給するためのものです。
IP監視カメラなど遠隔地に設置することが多い機器については採用される機器が増えています。

f:id:fujiharagiken:20200318124221p:plain
(引用)エム・システム技研

f:id:fujiharagiken:20200318124436p:plain
コネクタピン配置(メス側)(引用)高速無線LAN情報局

4と5番ピンがプラス(+)
7と8番ピンがマイナス(ー)

となります。

蜜蝋ワックスを作る

DIY用に蜜蝋ワックスを作ってみました。

【材料】
・蜜蝋 50g
・シードオイル 400g
・ワトコオイル ダークウォルナット 50g

【作り方】
湯煎しながら容器の中で上記材料を混ぜ合わせ冷やすと完成です。
好みに合わせてワトコオイルの配合量を増やして色を変えると良いです。

f:id:fujiharagiken:20200229140557j:plain
材料

f:id:fujiharagiken:20200229141412j:plain
完成

太陽光発電(オフグリッド)(2)

設備投資が2年程度で回収できたので、新たに太陽光パネルを1枚追加しました。
以前のと同サイズにもかかわらず出力が20Wもアップしています。

■サンテックパワー 太陽光発電パネル STP320S-20/Wfh H4コネクター(MC4ではない)
【製品仕様】
・セルタイプ:単結晶 78mm×156mm(6インチ)
・セルの配列:120枚(6×20)
・最大出力(Pmax):320W
・最大出力動作電圧(Vmp):33.3V
・最大出力動作電流(Imp):9.61A
・開放電圧(Voc):40.1V
・短絡電流(Isc):10.04A
・モジュール変換効率:19.3%
・サイズ:L1670mm×W992mm×D35mm
・重量:18.5kg

キッチンタイマーの製作(7)確認音の追加

①ポートの反転処理で発音する関数を追加します。

void beep(int time) {
	int i;

	for (i = 0; i < time; i++) {
		IO_RB14_SetHigh(); // portに’H’を出力
		__delay_us(500); // [us]待つ

		IO_RB14_SetLow(); //	portに’L’を出力
		__delay_us(500); // [us]待つ
	}
}

②スイッチ操作時に上記関数を呼び出します。
beep(70); // ピッ音

キッチンタイマーの製作(8)確認音の音程を変える

キッチンタイマーのタイムアップ時に、PWM機能を応用したオルゴールを鳴らす機能を追加したいと思います。
①まずは、TMR2をPeripheralsに追加しTimer Periodを1msに設定します。


f:id:fujiharagiken:20181219100020p:plain
TMR2の設定


②今回は、RP14(25Pin)をキャプチャーコンペア出力1に割り当てます。
マニュアルのSELECTABLE OUTPUT SOURCES (MAPS FUNCTION TO OUTPUT)を参考にします。

(Output Function Number) (Function) (Output Name)
ーーーーーーーーーーーーーーーーーー
0 NULL(2) Null
1 C1OUT Comparator 1 Output
2 C2OUT Comparator 2 Output
3 U1TX UART1 Transmit
4 U1RTS(3) UART1 Request To Send
5 U2TX UART2 Transmit
6 U2RTS(3) UART2 Request To Send
7 SDO1 SPI1 Data Output
8 SCK1OUT SPI1 Clock Output
9 SS1OUT SPI1 Slave Select Output
10 SDO2 SPI2 Data Output
11 SCK2OUT SPI2 Clock Output
12 SS2OUT SPI2 Slave Select Output
18 OC1 Output Compare 1               ←これを使用する
19 OC2 Output Compare 2
20 OC3 Output Compare 3
21 OC4 Output Compare 4
22 OC5 Output Compare 5
23-28 (unused) NC
29 CTPLS CTMU Output Pulse
30 C3OUT Comparator 3 Output
31 (unused) NC

ポートRP14の設定Resistor(RP14R)は、RPOR7レジスタにあり、そのレジスタを18に設定するため、
pin_manager.cのvoid PIN_MANAGER_Initialize(void)関数の最後に以下の処理を追加します。

	/**************************************************************************
	* Set the PPS
	***************************************************************************/
	__builtin_write_OSCCONL(OSCCON & 0xbf); // unlock PPS
	
	//------------------------------------
	// PWM関係の設定 by fujihara
	//------------------------------------
	RPOR7bits.RP14R = 18;		// RP14ピンの機能を, 18:OC1に割り当てる
	
	OC1CON1bits.OCTSEL = 0;		// 0:Timer2 Clock
	
	//OC1CON1bits.OCM = 0b011;	// 3:シングルコンペア連続パルスモード(Fullカウントでトグルする)
	//OC1CON1bits.OCM = 0b110;	// 6:OC1でエッジアラインPWMモード
	OC1CON1bits.OCM = 0b101;	// 5:ダブルコンペア連続パルス(OC1RでHigh,OC1RSでLow)
	
	OC1R            = PR2/2;	// Highになるタイミング(仮の値)
	OC1RS           = PR2;		// Low になるタイミング(仮の値)
				// 実際の回路はトランジスタのためHigh/Lowが反転する
	
	OC1CON2bits.OCTRIS = 0;		// 0:出力コンペアモジュールが駆動する
				// 1:OC1ピンを3ステートにする
	
	__builtin_write_OSCCONL(OSCCON | 0x40); // lock   PPS
	/****************************************************************************/
	


③main.cに以下の発音関数を追加します。

/**
* 発音関数
* @param freq:周波数(Hz)  例:A4の時、440 (Hz)
*/
void tone(int freq) {

	if (freq != NON) {
#ifdef __24FJ128GB204_H
		PR2 = 8000000 / freq; //発音
#else
		PR2 = 4000000 / freq; //発音
#endif
		OC1R = PR2 / 2; // Highになるタイミング
		OC1RS = PR2; // Low になるタイミング
	} else {
		PR2 = 0; //発音停止
	}
}

④ボタンが押されたタイミングで以下の処理を行うと、ドミソドという音が発音されます。

	
	tone(131); //C3(ド)
	__delay_ms(250);
	tone(165); //E3(ミ)
	__delay_ms(250);
	tone(196); //G3(ソ)
	__delay_ms(250);
	tone(262); //C4(ド)
	__delay_ms(250);
	tone(0);