アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、初めて質問させていただきます。


ホール素子を用いて磁界がS→N、N→Sへと変化するのを検出する回路を作っています。

Arduinoを用いており、VDDにはArduinoから5Vを、GNDには900Ω抵抗(手元に150Ω抵抗しかなかったので6つ直列)を、OUTにはArduinoの2pinを接続しています。

使用しているホール素子はN極でHIGH,S極でLOWを返す、下のUS1881LUAです。
http://akizukidenshi.com/catalog/g/gI-05274/

INPUTに設定した2pinからdigitarReadでホール素子の出力を読み込み、磁界の変化があった時にSerial.printlnでパソコンに0か1を表示させるようにしています。


以上の構成で動作させたところ、N極を近づけると延々と1と0を繰り返し表示させ続けます。
S極を近づけた場合は0を一度だけ表示し、正常です。

正常ではN極を近づけた時に一度だけ1を表示するはずですが、上記のような挙動をします。


正常に作動させるためにはどうすればいいでしょうか?
ご回答宜しくお願いします。

A 回答 (4件)

出力がオープンドレインだったのはうかつでした。



間違いなく、No.2 の形の指摘が正解でしょう。

ちなみに、「プルアップ」とは、ホール素子の out と Arduinoの2pin の間に抵抗を入れることではありません。

せめて、ホール素子の資料は確認しましょう。

13.1 Typical Three-Wire Application Circuit

にある回路とちゃんと比べてみましょう。
    • good
    • 0
この回答へのお礼

すみません、一応資料は確認していたのですが、コンデンサ等は使ってなかったので13.1あたりは読み飛ばしてました。

最近入門したばかりで不勉強で申し訳ないのですが、あの図からコンデンサ関連の部分を取り除いたような回路でいいのでしょうか?

お礼日時:2011/12/07 22:22

> 最近入門したばかりで不勉強で申し訳ないのですが、あの図からコンデンサ関連の部


> 分を取り除いたような回路でいいのでしょうか?

まず、やってみましょう。
ダメかもしれませんが。
でも、挙動は明らかに変わるはずです。
    • good
    • 0
この回答へのお礼

先ほどVDDと2PINの間に10kΩ抵抗を入れて試してみたところ、上手く作動しました!

お二人の助言がなければ解決できなかったので、大変感謝しております。ありがとうございました。
解決の一番のきっかけになったので、AsanoNagiさんにベストアンサーをつけさせて頂きます。

お礼日時:2011/12/08 08:56

GNDには900Ωがなぜ必要なのか回路図がないのでわかりませんが。


US1881は出力がオープンドレインになっていると思いますが、2PINはプルアップされているのでしょうか?
10kΩ位でプルアップが必要です。
微妙に回路電流が流れていると、論理の0Vだけ確実に引っ張っていると考えられます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ご指摘を受けて考えてみたところ、900Ωの抵抗は必要ありませんね。ミスでした。

そこで、GNDはそのままGNDへ、ホール素子のOUTと2PINとの間に10kΩ抵抗を挟んでみましたが、それでも解決しませんでした。
10MΩでも試してみましたが、やはり同じでした。

お礼日時:2011/12/07 21:19

おそらく、プログラムのループの中で、不用意にゼロをセットしているからでしょう。



いずれにしても、まず、オシロスコープで

・ホール素子単独で
・ボードをつないだ状態で

それぞれ出力を確認するが一番良いです。

この回答への補足

ご回答ありがとうございます。

以下にプログラムを書いておきます。
ホール素子の値を代入する引数(val)を宣言する時にint val = 0 としていたのを int valのみにしてみましたが、状況は改善されませんでした。

手元にテスターはあるのですがオシロスコープはないので、ちょっと調べられません。。



#define hole 2 //ホール素子をPin2に接続
#define LED 11 //LEDをPin11に接続

int val;
int old_val;

void setup(){
Serial.begin(9200);
pinMode(hole, INPUT);
pinMode(LED, OUTPUT);
}

void loop(){
val = digitalRead(hole); //ホール素子の出力を取得
digitalWrite(LED, val); //ホール素子の出力に応じてLEDをON/OFF

//ホール素子の出力が変化した時にPCに数値を送る
if(val != old_val){
Serial.println(val);
}

old_val = val;

}

補足日時:2011/12/07 20:46
    • good
    • 0
この回答へのお礼

すみません、返信はこちらからだったみたいですね。
ご回答ありがとうございます。

お礼日時:2011/12/07 20:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!