🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

3回答

1114閲覧

Arduinoを用いてタクトスイッチを1回押すと12VDCファンが1分間のみ駆動するプログラムと回路が作りたいです。

sso1

総合スコア0

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2021/02/02 17:32

編集2021/02/02 17:34

イメージ説明### 前提・実現したいこと

卒業研究の制作物の駆動システムの一部としてArduinoを用いて12VDCファンを1分間のみ駆動するプログラム(押してない時は駆動しない)と回路を構築したいです。単3乾電池8本を直列につないで12VDCファンの電源を供給しています。Arduinoを用いて制御するためトランジスタ(2SC1815Y)を用いて電流を増幅する必要があり、そのスイッチング回路の実装に苦戦しています。データシートより使用するトランジスタのhFEを200とし、使用するファンは12Vの電源をつないだときの電力が1.20Wのため、この時0.1Aの電流が流れます。そのためベースに流れる電流は0.1/200=0.00005A(0.5mA)となります。そこから各部分の抵抗値を計算する必要があるのですが、初めて回路を組むのでそこからの計算方法と実装した回路のどこが間違っているかがわかりません。構築した回路図の写真と組んだプログラムは以下のようになっております。ファンは電源を繋げば当然駆動するのですが、タクトスイッチを押しても全く制御できません。何か回路図やプログラムなどで不明な点、おかしな点、アドバイスがございました、どうぞよろしくお願い致します。

int fan = 13;
int buttonpin = 7;

void setup() {
pinMode(fan, OUTPUT);
pinMode(buttonpin, INPUT_PULLUP);
Serial.begin(9600);
}

void loop() {
int d_val;
d_val = digitalRead(buttonpin);
if (d_val == HIGH) {
digitalWrite(fan, HIGH);
delay(60000);
digitalWrite(fan, LOW);

}

else {
digitalWrite(fan, LOW);
}
delay(100);
}

イメージ説明

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/02/02 22:08

まずは手書きでいいから、回路図を書きましょう そして、現状どういうふうに動作してるんでしょうか。 回りっぱなしになるのかな? そこらへん詳しく説明しましょう
guest

回答3

0

実体配線図/現物写真は「回路図」とは違うものです。くれぐれも「研究」の発表資料に回路図と称してそんな写真を貼ることのありませんように。私が査読するとしたらそんなことをやった時点でrejectします。

ブレッドボードは、その写真のものであればa-b-c-d-e、f-g-h-i-jはそれぞれ繋がっていますがeとfの間は繋がっていません。そこが繋がっていることを期待している気配もありますが...そこが繋がっていたとしたら、スイッチを押すと電源がショートするというとんでもないことになるので、そもそもどうしたかったのか疑問です。やはり、「回路図」を書いて、ちゃんと動くか机上検討したうえでそれを元に配線を行って下さい。

トランジスタの電極は、2SC1815の場合は印刷面から見て左からECBです。

モーターの電流は、平均値が0.1Aだったとしても瞬時値は0~数百ミリAで変化しています。Icの「絶対最大定格」150mAの2SC1815は壊れる可能性が高いです。かわいそうなので使わないでやって下さい。スイッチングのトランジスタは少なくともIc500mA、できれば1A以上のものにしておいたほうが安全かと思います。
あと、モーターには並列に逆起電力をダンプするダイオードかコンデンサをつけておきましょう。

そのためベースに流れる電流は0.1/200=0.00005A(0.5mA)となります。

コレクタに流せる電流は、単純化して考えればIb x HFE以下です。スイッチング用途であればIbは多めに流しておけばよいです。確実に100mAを流したいのであれば、0.5mA「以上」をベースに流せばいいという話。しかし、先程の話にもなりますが、モーターの電流は瞬時値としてはもっと流れます。それを流し切るだけのベース電流を流してやりましょう。なお、ベース抵抗に2Wの抵抗ってのは...たまたまあったものを使っただけ、とかですか?

もし、一枚目の写真の下側電源ラインの左端/右端がそれぞれファン/ファン電源(あるいはその逆)であれば、この回路はファンと電源が繋がっているだけで、マイコンによる制御は介在せず、ファン電源を入れればファンが回る、それだけのものです。

実装した回路のどこが間違っているかがわかりません

全く合っているところがない、と言っても過言ではないと思います。ゼロから再出発して下さい。

ソフト面では...
スイッチ入力をプルアップにしているということは、スイッチをピンとGNDの間に入れることを期待しているのでは? そうだとすればピン電圧はスイッチが押されたときに0V、押されていない時5Vになります。そういうプログラムになっていませんが、意図とあっていますか?

最後に、タイトルは「12VDCファン1分間のみ駆動するプログラムと回路作りたい」としたほうが日本語として落ち着くように思います。

投稿2021/02/02 23:54

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2021/02/02 23:58

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2021/02/03 03:53 編集

その参照先も結構やってることがアレなので、トランジスタのピン接続の図とか以外は参考にしないほうが...
guest

0

スイッチが片方が5Vにつながっていて、もう片方は入力ピンにつながっているように見えます。
だとすると、入力ピンがINPUT_PULLUPなので押しても離してもHIGHです。

というかよく見たらスイッチがつながってませんね
ブレッドボードの真ん中は切れてます。

(仮につながっていたとしたら5VとGNDが短絡してたので勘違いしててよかったねって感じですが)

投稿2021/02/02 23:50

編集2021/02/02 23:57
ozwk

総合スコア13551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問