実現したいこと
下記ページの"Capacitance Meter for 470 uF to 18 pF Capacitors"を参考にシングルチャネルでの静電容量を測定するためのプログラムは組めました。今度はこれを拡張して複数チャネル、例えば5チャネルで同時に静電容量を測定したいと思っています。
https://www.circuitbasics.com/how-to-make-an-arduino-capacitance-meter/
発生している問題・分からないこと
使用しているのはarduino unoのため下記のプログラムのやり方ではアナログ入力端子が足りず拡張しようとしても、回路が組めません。色々ネット上を探しているとアナログ入力端子を使っても5つの入力でもグランドを共通にしてるのか、6本のアナログ入力にしていたり、ディジタル入力端子を使っていそうなものも見られるのですがいずれにしても具体的な配線方法やプログラムが全くわかりません。ちなみに、下記の"Capacitance Meter for 470 uF to 18 pF Capacitors"と同様に外部抵抗無しで測定したいと思ってます。
https://www.circuitbasics.com/how-to-make-an-arduino-capacitance-meter/
該当のソースコード
const int OUT_PIN = A2; const int IN_PIN = A0; const float IN_STRAY_CAP_TO_GND = 24.48; const float IN_CAP_TO_GND = IN_STRAY_CAP_TO_GND; const float R_PULLUP = 34.8; const int MAX_ADC_VALUE = 1023; void setup(){ pinMode(OUT_PIN, OUTPUT); pinMode(IN_PIN, OUTPUT); Serial.begin(9600); } void loop(){ pinMode(IN_PIN, INPUT); digitalWrite(OUT_PIN, HIGH); int val = analogRead(IN_PIN); digitalWrite(OUT_PIN, LOW); if (val < 1000){ pinMode(IN_PIN, OUTPUT); float capacitance = (float)val * IN_CAP_TO_GND / (float)(MAX_ADC_VALUE - val); Serial.print(capacitance, 3); Serial.print(F("e-12")); Serial.println(F(") ")); } else{ pinMode(IN_PIN, OUTPUT); delay(1); pinMode(OUT_PIN, INPUT_PULLUP); unsigned long u1 = micros(); unsigned long t; int digVal; do{ digVal = digitalRead(OUT_PIN); unsigned long u2 = micros(); t = u2 > u1 ? u2 - u1 : u1 - u2; } while ((digVal < 1) && (t < 400000L)); pinMode(OUT_PIN, INPUT); val = analogRead(OUT_PIN); digitalWrite(IN_PIN, HIGH); int dischargeTime = (int)(t / 1000L) * 5; delay(dischargeTime); pinMode(OUT_PIN, OUTPUT); digitalWrite(OUT_PIN, LOW); digitalWrite(IN_PIN, LOW); float capacitance = -(float)t / R_PULLUP / log(1.0 - (float)val / (float)MAX_ADC_VALUE); if (capacitance > 1000.0){ Serial.print(capacitance / 1000.0, 2); Serial.print(F("e-6")); } else{ Serial.print(capacitance, 2); Serial.print(F("e-9")); } Serial.println(F(") ")); Serial.print(digVal == 1 ? F("Normal") : F("HighVal")); Serial.print(F(", t= ")); Serial.print(t); Serial.print(F(" us, ADC= ")); Serial.print(val); Serial.println(F(")")); } while (millis() % 1000 != 0); }
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
アナログ入力を使った静電容量測定に関する情報は比較的出てきますが、デジタル入出力を使ったものはあまり出てきません。
補足
特になし

回答1件
あなたの回答
tips
プレビュー