Ga naar hoofdinhoud

Ontwerpen

De basis van de Multiflexmeter bestaat uit een microcontroller, voeding en sensor. Dit maakt de meter bijzonder effectief maar toch goedkoop. Alle informatie is beschikbaar om aan te vullen of te verbeteren.

Multiflexmeter Ultrasoon

De ultrasoon sensor zendt een onhoorbare geluidspuls uit die reflecteert tegen het wateroppervlak. De tijd tussen verzenden en ontvangen is een maat voor de afstand. Een RTC-module registreert de tijd via een Unix Timestamp. Data opslag via SD-kaartje. Dit ontwerp gebruikt 2 microcontrollers: de rechter microcontroller dient als timer die elke 15 minuten de linkse microcontroller 2 s aan zet. Dit geeft meetmicrocontroller voldoende tijd om te meten en de data naar een SD-kaart te schrijven. In de tussentijd gebruikt de meetschakeling geen stroom. Tussen de metingen door staat de timer microcontroller in de rusttoestand.

Componenten:

Atmega328P-PU microcontroller met Arduino UNO R3 Bootloader (2x)

16 MHz kristaloscillator (2x)

10 µF 25V electrolytische condensator

22 pF keramische condensator (4x)

MOSFET N-type, IRF520N

SD card module
Aansluiten via SPI protocol: pin D12: MISO (Master In Slave Out) / pin D13: SCK (Serial Clock) / pin D11: MOSI (Master Out Slave In)

RTC module
Aansluiten via I2C protocol: pin A4: SDA (Serial Data) | pin A5: SCL (Serial Clock)

Ultrasoon sensor, HC-SR04 met afzonderlijke zend (Transmit) en ontvangst (Receive) sensor

Ultrasoon sensor, waterdichte versie (JSN-SR04T), aansluiting is identiek aan HC-SR04 ultrasoon sensor

Sketch Arduino 1 (rechts op breadboard):

// transistor_switch_lowpower_v4
// LowPower: 15 ms, 30 ms, 60 ms, 120 ms, 250 ms, 500 ms, 1 s, 2 s, 4 s, 8 s, forever
// Arduino schakelt Arduino 2 elk kwartier in om te meten
// schakelen via MOSFET om te hoge belasting van digital pin 9 te voorkomen

#include <LowPower.h> // https://github.com/rocketscream/Low-Power
const int transistorpin = 9; // pin 9 aangesloten op MOSFET

void setup() {
pinMode(transistorpin, OUTPUT);
}

void loop() {
digitalWrite(transistorpin, HIGH);
LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF); // pin 9 blijft 2 s hoog voor meting
digitalWrite(transistorpin, LOW);
for (int i = 0; i < 100; i++)
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); // pin 9 blijft 15 min laag, correctie voor tijdafwijking
}

Sketch Arduino 2 (links op breadboard):

// DS3231_parkeersensor_SDcard_v13
// DS3231 -> SDA = analog 4, SCL = analog 5
// ultrasoonsensor wordt periodiek ingeschakeld door digitale pin 9
#include <DS3231.h> // definieer library DS3231 clockmodule (www.rinkydinkelectronics.com)
DS3231  rtc(SDA, SCL); // initialiseer DS3231 clockmodule
const int powerpin = 9; // digitale pin 9 om gebruikers in en uit te schakelen
#include <JeeLib.h> // Low power functions library (https://github.com/jcw/jeelib/archive/master.zip)
ISR(WDT_vect) { Sleepy::watchdogEvent(); } // Setup the watchdog

/* SD module
MOSI – D11
MISO – D12
SCK – D13
CS – D10
*/
#include <SPI.h>
#include <SD.h>
#include <RunningMedian.h> // https://github.com/mchughj/RunningMedian
#include <NewPing.h> // https://github.com/PaulStoffregen/NewPing
#include <config.h>

const int chipSelect = 10;
char bestand[]=”KST749.CSV”;
int afstand_cm;

#define DISTANCE_ECHO 3
#define DISTANCE_TRIGGER 6
#define MAX_ULTRASONIC_DISTANCE 450
NewPing sonar(DISTANCE_TRIGGER, DISTANCE_ECHO, MAX_ULTRASONIC_DISTANCE);

void setup()
{
pinMode(powerpin, OUTPUT);
Serial.begin(9600);
digitalWrite (powerpin, HIGH); // gebruikers aan
Sleepy::loseSomeTime(50); // Arduino 0,05 s in slaapstand zetten
rtc.begin(); // initialiseer rtc object
// Verwijder eenmalig !! // voor volgende 3 regels om datum en tijd in te stellen
//  rtc.setDOW(SUNDAY); // dag van de week
//  rtc.setTime(9, 36, 0); // tijd (24u formaat)
//  rtc.setDate(4, 9, 2016); // datum 30 januari 2016
if (!SD.begin(chipSelect)) { return; }  // Configureer SD-module
digitalWrite (powerpin, LOW); // gebruikers uit
}

void loop()
{
digitalWrite (powerpin, HIGH); // gebruikers aan
afstand_cm = getDistanceFromUltrasonicSensor();

LogToSD();  // schrijf naar SD-card
digitalWrite (powerpin, LOW); // gebruikers uit
// pauzeer 15 minuten (900 s)
for (byte i = 0; i < 900; ++i)
Sleepy::loseSomeTime(1000);
// 10 s pauze voor testdoeleinden
//      Sleepy::loseSomeTime(10000);
}

int getDistanceFromUltrasonicSensor(){
//Create an instance of the RunningMedian class with the number of samples to use
RunningMedian samples = RunningMedian(13);

// mediaanfilter: meet 13x en neem de middelste meetwaarde
for(int i= 0; i<13; i++){
Sleepy::loseSomeTime(50);
int pingVal = sonar.ping();

int afstand = pingVal / US_ROUNDTRIP_CM;
if(afstand == 0){
afstand = 0;
}
samples.add(afstand);
}
//Return the median value
return samples.getMedian();
}

// schrijf tijd en peil naar SD-card
void LogToSD(){
File dataFile = SD.open(bestand, FILE_WRITE); // open file en schrijf data naar SD-card
if (dataFile) {
dataFile.print((rtc.getUnixTime(rtc.getTime()))); // schrijf tijd
dataFile.print(“,”);
dataFile.print(afstand_cm); // schrijf afstand
dataFile.print(“,”);
dataFile.print(rtc.getTemp()); // schrijf temp
dataFile.println();
dataFile.close(); // sluit file
}
}

Prototype 1

Weerbestendige datalogger op zonne energie

ABS-behuizing met montageflens, Velleman G340MF, 171 x 121 x 80 mm Zonnepaneel Adafruit 6V, 2.0 W

Modulaire opbouw

Lithium polymeer accu, 8000 mAh, 3.7 V
JSN-SR04T waterproof ultrasoon sensor

Silicagel module voor vochtabsorptie. Vooraf drogen in magnetron: 8 minuten 175 W

Meetmodule: 2x Atmega328P-PU microcontroller | SD-card module
Gebruikte componenten zijn identiek aan de breadboard versie

Achterzijde:
JSN-SR04T print
RTC module DS3231

Modulaire opzet met stekkerverbindingen

Voedingmodule:
Adafruit USB/DC/Solar Lithium Ion Polymeer lader
DC-DC Step Up Module 1-5V to 5V 500mA

Waterproof ultrasoonsensor JSN-SR04T

Update 14 oktober 2016:

Aantal meetdagen: 26
Aantal uitgevoerde metingen: 2470

Prototype 2

Weerbestendige datalogger met lithiumbatterijen

Niet onder alle omstandigheden is zonne-energie mogelijk. Er zullen ook meetlocaties zijn met te weinig zonlicht. Voor die omstandigheden is batterijvoeding nodig. Voor dit prototype is gekozen voor lithium batterijen omdat deze in een grote temperatuurrange (-60 tot 85o Celsius) blijven functioneren.

ABS-behuizing met montageflens, Velleman G340MF, 171 x 121 x 80 mm

Twee lithium D batterijen in serie (Saft LS33600, 3,6V, 16500 mAh)

Schakelaar met daaronder het printje met de MCP1702 spanningsregelaar.

Spanningsregelaar MCP1702-5002E converteert 7,2V batterijspanning naar 5,0 V. Deze spanningsregelaar is gekozen om zijn lage ruststroom (max 5 µA). In- en uitgang van de MCP1702 zijn via 1 µF keramische condensatoren ontkoppeld. Zie datasheet MCP1702.

Update 30 oktober 2016:

Aantal meetdagen: 27
Aantal uitgevoerde metingen: 2541

Back To Top