LoginSignup
2
1

More than 1 year has passed since last update.

obnizのGPIOでGNDをとるときの注意

Last updated at Posted at 2023-03-22

はじめに

obnizを使ってとある工作↓をしているときに少し詰まったことがあったので、備忘録としてまとめました。

詰まったこと

無題の図形描画 (4).jpg

上記の様な感じでobnizのGPIOとセンサを繋いでいたのですが、センサに電源がうまく供給されず、センサを扱うことができませんでした。
当初書いていたobnizでのコードは下記の様な感じです。

const gnd = obn.getIO(0);
const vcc = obn.getIO(1);
const signal = obn.getIO(2);
gnd.output(false);
vcc.output(true);
signal.input(async (value) => {
  // signal検知 
});

とりあえず電源(vcc)のoutputをtrueにしてgndをfalseにすればセンサへの電源が取れるのではないだろうか?と、安直に考えてました。

しかし、実行すると以下のようなエラー表示が出てきました。

heavy output. output voltage is too low when driving high

どうやら電源vccのところの電源が足りていないとのこと

内部プルアップを有効化した

結論から書くと、以下のようにコードを修正するとうまくいきました。

const gnd = obn.getIO(sensor.gnd);
const vcc = obn.getIO(sensor.vcc);
const signal = obn.getIO(sensor.signal);
gnd.pull("5v"); // <--
gnd.drive("open-drain"); // <--
gnd.output(false);
vcc.output(true);
signal.input(async (value) => {
  // signal検知
});

追加したのは以下の2行です。

gnd.pull("5v");
gnd.drive("open-drain");

gnd.pull("5v")で、プルアップが有効化されます。gnd.drive("open-drain")はオープンドレインで駆動させるという意味ですが、試行錯誤で記述したものなので必要なものかよくわかってません。

さいごに

結論として、obnizのGPIOでGNDをとるときは内部プルアップを有効化しないとうまく電源が動作しないということがわかりました。
しかし、この解決方法はドキュメントを参考にしたわけでもなく、試行錯誤しながら結果として動作できるようになっただけのものなので、正しいかどうかわかりません。指摘あれば編集リクエストお願いします(特にobnizの方)。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1