elechobby:picdic:pic16f88:130

簡易静電気メーター

静電気はとても身近で、私たちの周りのどこにでもあります。
小学校の理科の時間に、「はく検電器」を使って、帯電したもの(例えば、下敷き、物差しなど)を、近づけたり遠ざけたりすることによって、箔が開いたり閉じたりしたのを覚えておられる方も多いのではないでしょうか?

<はく検電器>

「はく検電器」は、単純な仕組みなので、自作することも可能です。
多くのサイトで、その作り方を詳しく紹介しておられるので、一度ご覧になって、自作してみてください。

今回は、この静電気を、電子部品で検知して、LCDに表示させる「簡易静電気メーター」を製作してみました。

<静電気センサー>
静電気センサには、FET(2SK315NチャネルJFET)使用しました。
NチャネルJFETは、ゲートにマイナスの電圧が加わると空乏層が広がりチャネルが狭くなって、ドレイン-ソース間の抵抗値が大きくなります。この特性を今回の簡易静電気メーターでは利用しています。
尚、感度を上げるために、アンテナ(5cm程度のリード線)を接続します。

※FETには、今回使用した2SK315以外にも、NチャネルJFETタイプであれば、使用できるものがあるのでいろいろと試してみてください。

<表示>
ドレイン電圧を、A/D変換で取り込み、LCDに電圧値とバー(80ポイント)を表示します。
サンプリングは、高速モードと低速モードとしました。

  • 高速モード→100回取り込んで、その平均値を求めます。
  • 低速モード→5000回取り込んで、その平均値を求めます。

バー表示は、80ポイントとし、1ポイント当たりは、約62.5mVになります。

  • 62.5mV=(5V÷1024)×(1024÷80)

staticElectricityMeter.c
//********************************************************************** 
/*
  『簡易静電気メーター(バー表示)』 
*/
 
//********************************************************************** 
 
const char character1[] = {16,16,16,16,16,16,16,16};
const char character2[] = {24,24,24,24,24,24,24,24};
const char character3[] = {28,28,28,28,28,28,28,28};
const char character4[] = {30,30,30,30,30,30,30,30};
const char character5[] = {31,31,31,31,31,31,31,31};
 
void RegistCustomChar()
{
	static	char i;
	//
	LCD_Cmd(64);
	for (i = 0; i<=7; i++) {
		LCD_Chr_Cp(character1[i]);
	}
	for (i = 0; i<=7; i++) {
		LCD_Chr_Cp(character2[i]);
	}
	for (i = 0; i<=7; i++) {
		LCD_Chr_Cp(character3[i]);
	}
	for (i = 0; i<=7; i++) {
		LCD_Chr_Cp(character4[i]);
	}
	for (i = 0; i<=7; i++) {
		LCD_Chr_Cp(character5[i]);
	}
	LCD_Cmd(LCD_RETURN_HOME);
}
 
//********************************************************************** 
 
void	BarDisp(int dat)
{
	static	short	i, j, k, cnt;
	//
	Lcd_Cmd(LCD_FIRST_ROW);
	//
	i = (dat * 10) / 127;
	j = i / 5;
	k = i - (j * 5);
	//
	for (cnt = 1; cnt <= j; cnt++) {
		Lcd_Chr_Cp(4);
	}
	if (k != 0) {
		Lcd_Chr_Cp(k);
	}
	for (; cnt <= 16; cnt++) {
		Lcd_Chr_Cp(' ');
	}
}
 
//********************************************************************** 
 
void main()
{
	static	unsigned	char	buf[20];
	static	unsigned	int		cnt, add_cnt;
	static	double				ad;
	//
	OSCCON = 0b01110000;		// クロックは8Mhz 
	CMCON  = 0b00000111;		// コンパレータは使用しない。
	// A/D変換を使用する。 
	ANSEL  = 0b00000010;
	// ポートを初期化する。 
	TRISA  = 0b11111111;
	TRISB  = 0b00000000;
	// LCDを初期化する。 
	Lcd_Config(&PORTB, 3, 1, 2, 7, 6, 5, 4);
	RegistCustomChar();
	Lcd_Cmd(LCD_CURSOR_OFF);
	Lcd_Cmd(LCD_CLEAR);
	Lcd_Out(2, 6, "mV");
	//
	while (1) {
		//A/D変換のサンプリング数の設定(1000回、100回から選択する) 
		if (PORTA.F5 == 1)
			add_cnt = 5000;
		else
			add_cnt = 100;
		//電圧を測定し、その平均値を求める。 
		ad = 0.0;
		for (cnt = 0; cnt < add_cnt; cnt++) {
			ad += Adc_Read(1);
		}
		ad = ad / (double)add_cnt;
		//測定結果をバー表示する。(80ドット) 
		BarDisp(ad);
		//電圧値を表示する。 
		ad = ad * 4.8828125;
		WordToStr(ad, buf);
		Lcd_Out(2, 1, buf);
	}
}
 
//**********************************************************************

センサー(2SK351)部分です。
左側:5cm程度のリード線がアンテナです。
右側:アンテナが無くても、感度は少し落ちますが、感知します。

アンテナ部分に、静電気を帯びたもの(例えば、布で擦ったプラスチック定規など)を、近づけたり遠ざけたりしてみます。

近づけると電圧は高くなり、遠ざけると低くなります。

著作権表示 copyright notice

このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。詳細
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.Details
  • elechobby/picdic/pic16f88/130.txt
  • 最終更新: 2025/10/17 14:29
  • by 127.0.0.1