静電気はとても身近で、私たちの周りのどこにでもあります。
小学校の理科の時間に、「はく検電器」を使って、帯電したもの(例えば、下敷き、物差しなど)を、近づけたり遠ざけたりすることによって、箔が開いたり閉じたりしたのを覚えておられる方も多いのではないでしょうか?
「はく検電器」は、単純な仕組みなので、自作することも可能です。
多くのサイトで、その作り方を詳しく紹介しておられるので、一度ご覧になって、自作してみてください。
今回は、この静電気を、電子部品で検知して、LCDに表示させる「簡易静電気メーター」を製作してみました。
<静電気センサー>
静電気センサには、FET(2SK315NチャネルJFET)使用しました。
NチャネルJFETは、ゲートにマイナスの電圧が加わると空乏層が広がりチャネルが狭くなって、ドレイン-ソース間の抵抗値が大きくなります。この特性を今回の簡易静電気メーターでは利用しています。
尚、感度を上げるために、アンテナ(5cm程度のリード線)を接続します。
※FETには、今回使用した2SK315以外にも、NチャネルJFETタイプであれば、使用できるものがあるのでいろいろと試してみてください。
<表示>
ドレイン電圧を、A/D変換で取り込み、LCDに電圧値とバー(80ポイント)を表示します。
サンプリングは、高速モードと低速モードとしました。
バー表示は、80ポイントとし、1ポイント当たりは、約62.5mVになります。
//********************************************************************** /* 『簡易静電気メーター(バー表示)』 */ //********************************************************************** 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); } } //**********************************************************************