Code Arduino

Génération de Potentiel d’Action

int potPin = A0;
const int ledPin = 9;

float lambda = 8.0;
int spikeDuration = 15;
int refractoryPeriod = 200; // ms

unsigned long lastSpikeTime = 0;

bool poissonEvent(float lambda) {
  float dt = 0.01;
  float p = lambda * dt;
  return random(0, 10000) < p * 10000;
}

void setup() {
  pinMode(ledPin, OUTPUT);
  randomSeed(analogRead(0));
}

void loop() {
  unsigned long now = millis();
  int val = analogRead(potPin);
  float lambda = map(val, 0, 1023, 1, 30);

  // réfractaire
  if (now - lastSpikeTime < refractoryPeriod) {
    digitalWrite(ledPin, LOW);
    return;
  }

  if (poissonEvent(lambda)) {
    digitalWrite(ledPin, HIGH);
    delay(spikeDuration);
    digitalWrite(ledPin, LOW);

    lastSpikeTime = now;
  }

  delay(5);
}

Courbes caractéristiques NMOS

const int gatePWM = 9;

const int shuntPin = A0;
const int vdsPin   = A1;

const float VREF = 5.0;
const float RSHUNT = 1.0;

void setup()
{
  Serial.begin(115200);
}

void loop()
{
  for(int pwm = 0; pwm <= 255; pwm += 5)
  {
    analogWrite(gatePWM, pwm);

    delay(200);

    float vshunt =
      analogRead(shuntPin) * VREF / 1023.0;

    float ids =
      vshunt / RSHUNT;

    float vds_adc =
      analogRead(vdsPin) * VREF / 1023.0;

    float vds =
      vds_adc * (133.0 / 33.0);

    float vgs =
      pwm * VREF / 255.0;

    Serial.print(vgs,3);
    Serial.print(";");

    Serial.print(vds,3);
    Serial.print(";");

    Serial.println(ids,3);
  }

  delay(3000);
}