Arduino nano 33 ble based capacitance measurement

Hello ! I am trying to measure the capacitance value using Arduino Nano 33 ble. I know the Arduino Nano 33 ble is based on the Uno and other chips. When only the pullup resistance and stray capacitance values are changed, the measurement is not good. If I need to completely change the coding, does anyone know how to measure capacitance using Arduino Nano 33 ble?

Here is my code (Used on Unoboard)

#include <ArduinoBLE.h>

const int OUT_PIN = A2;
const int IN_PIN = A1;
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(F("C:"));
  Serial.print(capacitance, 3);
  Serial.print(F(" pF ("));
  Serial.print(val);
  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);

  Serial.print(F("C:"));

  if (capacitance > 1000.0)
  {
    Serial.print(capacitance / 1000.0, 2);
    Serial.print(F(" uF"));
  }
  else
  {
    Serial.print(capacitance, 2);
    Serial.print(F(" nF"));
  }
}

}

Wrong, it has nothing in common with the UNO (despite coming from Arduino). It has another processor, another base voltage, another board layout, etc.

I have some doubts that you can use the same constants for the calculation as you did on the UNO (as input capacitance).

That's right, I expected the Nano 33 ble to use a different chip than the Uno, so the constants and coding itself would be different. If so, do you know another way to measure the capacitance value using the Nano 33 ble ?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.