capaciteitsmeter
4 berichten
• Pagina 1 van 1
capaciteitsmeter
ik ben bezig met een capaciteitmeter zoals beschreven bij Hackerstore.
als display heb ik een Adafruit_SSD1306
Ik heb het voorbeeldschript van Adafruit aangepast en daar de sketch van de capaciteitsmeter in gekopieerd.
Jammer maar geen succes. Ik heb het idee dat het programma niet doorloopt. Wie kan mij helpen, wat doe ik fout?
als display heb ik een Adafruit_SSD1306
Ik heb het voorbeeldschript van Adafruit aangepast en daar de sketch van de capaciteitsmeter in gekopieerd.
Jammer maar geen succes. Ik heb het idee dat het programma niet doorloopt. Wie kan mij helpen, wat doe ik fout?
- Code: Alles selecteren
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define ANALOGE_PEN A3 // Analoge pen tussen R1/R2 en de condensator
#define R1_PEN 2 // Pen aan R1 (22k-weerstand)
#define R2_PEN 3 // Pen aan R2 (1,5k-weerstand)
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
void setup() {
Serial.begin(9600);
pinMode(R1_PEN, OUTPUT);
digitalWrite(R1_PEN, LOW);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
// init done
// Clear the buffer.
display.clearDisplay();
}
void loop() {
}
void testdrawbitmap(const uint8_t *bitmap, uint8_t w, uint8_t h) {
uint8_t icons[NUMFLAKES][3];
// initialize
for (uint8_t f = 0; f < NUMFLAKES; f++) {
icons[f][XPOS] = random(display.width());
icons[f][YPOS] = 0;
icons[f][DELTAY] = random(5) + 1;
Serial.print("x: ");
Serial.print(icons[f][XPOS], DEC);
Serial.print(" y: ");
Serial.print(icons[f][YPOS], DEC);
Serial.print(" dy: ");
Serial.println(icons[f][DELTAY], DEC);
}
while (1) {
// draw each icon
for (uint8_t f = 0; f < NUMFLAKES; f++) {
display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE);
}
display.display();
delay(200);
// then erase it + move it
for (uint8_t f = 0; f < NUMFLAKES; f++) {
display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, BLACK);
// move it
icons[f][YPOS] += icons[f][DELTAY];
// if its gone, reinit
if (icons[f][YPOS] > display.height()) {
icons[f][XPOS] = random(display.width());
icons[f][YPOS] = 0;
icons[f][DELTAY] = random(5) + 1;
}
{
//Ontlaad();
digitalWrite(R1_PEN, LOW);
pinMode(R2_PEN, OUTPUT);
digitalWrite(R2_PEN, LOW);
while (analogRead(ANALOGE_PEN) > 0);
pinMode(R2_PEN, INPUT);
// Meet de condensator
digitalWrite(R1_PEN, HIGH); // Laadt de condensator (indien er 1 is aangesloten tenminste) op
long tStart = millis();
while (analogRead(ANALOGE_PEN) < 647);
long nDuur = abs(millis() - tStart);
// Bereken de waarde van de gemeten condensator
float fMicroFarad = ((float)nDuur / 22000.0) * 1000;
// Toon de waarde op het LCD
if (fMicroFarad >= 1.0) {
static char mf[3];
mf[0] = 0xe4; // Dit is het micro-symbool (Griekse letter mu), voor microFarad
mf[1] = 'F';
mf[2] = 0;
display.clearDisplay();
display.print(" ");
display.print(fMicroFarad);
display.print(" ");
display.print(mf);
delay(200);
}
else {
// Toon waarde in nF
display.clearDisplay();
display.print(" ");
display.print(fMicroFarad * 1e3);
display.print(" ");
display.print("nF");
delay(500); // Iets langere delay dan bij uF!
}
{
//Ontlaad();
digitalWrite(R1_PEN, LOW);
pinMode(R2_PEN, OUTPUT);
digitalWrite(R2_PEN, LOW);
while (analogRead(ANALOGE_PEN) > 0);
pinMode(R2_PEN, INPUT);
}
}
}
}
}
Advertisement
Re: capaciteitsmeter
De setup() wordt eenmalig uitgevoerd en de loop() steeds opnieuw.
Wat doet jouw loop() ?
Kun je een link geven naar waar je die sketch hebt gevonden ? De code is nog best merkwaardig.
Ik heb in het verleden meerdere condensator-meet-sketchen geprobeerd. Deze ene doet het veel beter dan de andere, en sommigen kunnen een hele kleine capaciteit nog goed meten.
Dit is een goede start om mee te beginnen: https://www.gammon.com.au/forum/?id=12075.
Gevonden: https://www.hackerstore.nl/BlogArtikel/4
Maar die code lijkt niet op jouw sketch
Wat doet jouw loop() ?
Kun je een link geven naar waar je die sketch hebt gevonden ? De code is nog best merkwaardig.
Ik heb in het verleden meerdere condensator-meet-sketchen geprobeerd. Deze ene doet het veel beter dan de andere, en sommigen kunnen een hele kleine capaciteit nog goed meten.
Dit is een goede start om mee te beginnen: https://www.gammon.com.au/forum/?id=12075.
Gevonden: https://www.hackerstore.nl/BlogArtikel/4
Maar die code lijkt niet op jouw sketch
Re: capaciteitsmeter
inderdaad de loop is helemaal leeg, en eronder staat een functie testdrawbitmap, prima maar daaronder staat while (1) en dat vwordt niet meer uitgevoerd.
paul deelen
shooter@home.nl
shooter@home.nl
Re: capaciteitsmeter
Na verder testen en proberen hier het resultaat.
de schets is van Hackerstore maar aangepast voor een ander display.
de schets is van Hackerstore maar aangepast voor een ander display.
- Code: Alles selecteren
// Digitale capaciteitsmeter
// (C) 2013 Hackerstore
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000 };
#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
#define ANALOGE_PEN A3 // Analoge pen tussen R1/R2 en de condensator
#define R1_PEN 2 // Pen aan R1 (22k-weerstand)
#define R2_PEN 3 // Pen aan R2 (1,5k-weerstand)
void setup() {
Serial.begin(9600);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
// init done
display.display();
delay(1000);
pinMode(R1_PEN, OUTPUT);
digitalWrite(R1_PEN, LOW);
display.clearDisplay();
}
void loop() {
Ontlaad();
// Meet de condensator
digitalWrite(R1_PEN, HIGH); // Laadt de condensator (indien er 1 is aangesloten tenminste) op
long tStart = millis();
while(analogRead(ANALOGE_PEN)<647);
long nDuur = abs(millis()-tStart);
// Bereken de waarde van de gemeten condensator
float fMicroFarad = ((float)nDuur/22000.0) * 1000;
// Toon de waarde op het LCD
if(fMicroFarad >= 1.0){
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
static char mf[3];
mf[0]=0xe4; // Dit is het micro-symbool (Griekse letter mu), voor microFarad
mf[1]='F';
mf[2]=0;
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,10);
display.print(fMicroFarad);
display.print(" ");
display.print(mf);
display.display();
delay(800);
}
else {
// Toon waarde in nF
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(1,10);
display.print(fMicroFarad*1e3);
display.print(" ");
display.print("nF");
display.display();
delay(1000); // Iets langere delay dan bij uF!
}
}
void Ontlaad() { // Ontlaad de condensator zodat hij gereed is voor een volgende meting
digitalWrite(R1_PEN, LOW);
pinMode(R2_PEN, OUTPUT);
digitalWrite(R2_PEN, LOW);
while(analogRead(ANALOGE_PEN)>0);
pinMode(R2_PEN, INPUT);
display.clearDisplay();
display.display();
delay(10);
}
4 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: itedipi, PatrickAbomi en 83 gasten