私はArduinoで10個の異なる12V 600mA DCポンプを制御する予定の自動ディスペンシングプロジェクトに取り組んでいます。コンピュータは、次の形式でのArduinoへのUSB接続を介してメッセージを送信する:コンピュータとのシリアル接続を使用するArduinoの制御モーター
lh = pumps off
0h = pump 0 on
1h = pump 1 on
etc.
アルドゥイーノは12V 2A DC電源に接続されたTIP120のNPN抵抗を活性化することによってポンプに電力を与えます。一度に1台のポンプしか稼働しません。
LEDの電源を入れてテストすると、シリアル接続は問題なく動作します。しかし、私はポンプでそれを試して、Arduinoはコマンドにゆっくりと応答し始め、結局私はArduinoとシリアル接続を失う。私はArduinoに接続を失わせる何らかの電力問題があると想像することができます。私が間違っているアイデアは?
アルドゥイーノコード:
#define PUMP5 5 //pin for turning transistor on/off
const byte numChars = 32;
char msg[numChars];
void setup() {
Serial.begin(9600,SERIAL_8N1);
Serial.println(msg[0]);
pinMode(PUMP5, OUTPUT);
}
void loop() {
read_msg();
command_pumps();
}
void read_msg() {
char rc;
if (Serial.available() > 0) {
rc = Serial.read();
msg[0] = rc;
}
if(Serial.available() > 0) {
rc = Serial.read();
msg[1] = rc;
}
Serial.print("msg[0]: ");
Serial.println(msg[0]);
Serial.print("msg[1]: ");
Serial.println(msg[1]);
}
//PUMP5 is used for each of the scenarios since I am only testing with one pump
void command_pumps() {
if (msg[0] == 'l'||msg[1]=='l') {
digitalWrite(PUMP5, LOW);
} else if (msg[1] == 'h') {
if(msg[0]=='0') digitalWrite(PUMP5, HIGH);
else if (msg[0]=='1') digitalWrite(PUMP5, LOW);
else if (msg[0]=='2') digitalWrite(PUMP5, HIGH);
else if (msg[0]=='3') digitalWrite(PUMP5, HIGH);
else if (msg[0]=='4') digitalWrite(PUMP5, HIGH);
else if (msg[0]=='5') digitalWrite(PUMP5, HIGH);
else if (msg[0]=='6') digitalWrite(PUMP5, HIGH);
else if (msg[0]=='7') digitalWrite(PUMP5, HIGH);
else if (msg[0]=='8') digitalWrite(PUMP5, HIGH);
else if (msg[0]=='9') digitalWrite(PUMP5, HIGH);
}
return;
}
電源で何をしましたか?十分な容量がありますか? – barny
ダイオードの配置になります。 https://electronics.stackexchange.com/questions/31014/where-should-i-put-the-kickback-diode-in-a-transistor-switch –
を参照してください。図を表示できますか?ここに正しいフライバックダイオードがないような音がする。 – user3411864