Arduino Peilbuis
Peilbuis voor het meten van grondwater met een arduino.
Supplies
- 3D printer
- Arduino Uno
- Hall sensor 49E
- 4 kleine magneten
- 7 segment display - 20mm
- Battery pack voor 6 batterijen
- 14 male to female Arduino wires
- Computer
- USB 2.0 cable type A/B
- PVC buis, circa 1m
- Grondplaat, hout, 25x25x2cm
- 5x M3 Bout + moer
- 3x M8 bout + moer
- 4x M5 Bout + moer
- Metseltouw
- Horgaas
- Drijver van piepschuim
3D Printen
Print de onderstaande solidworks bestanden met printerinstellingen voor een zo robuust mogelijk resultaat.
Assemblage
Schroef de batterij houder en Arduino op de grondplaat zoals te zien in de bovenstaande afbeelding. Lijm of tape de magneten vast in de 4 gaten in de zijkant van het grote wiel. Bevestig het grote en kleine wiel met M8 bouten zoals in de foto, draai deze niet te hard aan, zodat de wielen kunnen draaien.
Kabels Trekken
Plaats het scherm met de pinnen door de gleuven zoals op de foto en verbind deze met de Arduino volgens het meegeleverde schema. Pin 3 van het 7 segments display dient open gelaten te worden. Verbind de hall effect sensor ook volgens dit schema. Stop de hall effect sensor door het gat dat met de rode pijl is aangegeven. Buig hem zo om dat hij plat ligt in de sleuf die met groen is aangegeven. Tape de kabels vast.
Code Uploaden
Pas in de meegeleverde code de multiplicatie factor op regel 207 aan naar de toepasselijke factor voor jouw opstelling. Upload de aangepaste code van een computer uitgerust met de Arduino IDE naar de Arduino via een USB 2.0 type A/B kabel. Als alles werkt telt het scherm nu elke keer een stap omhoog als er een magneet langs de sensor wordt gehaald, zo niet pas dan de threshold aan op regel 190 en upload opnieuw.
Mocht het downloaden van de code niet lukken is deze te vinden in stap 3.
Downloads
Code
Mocht het downloaden van de code niet zijn gelukt, gebruik dan de onderstaande code in stap 2. Maak hiervoor zelf een .ino bestand aan in de Arduino IDE.
/* // Display segmenten A --- F | | B | G | --- E | | C | | --- D */ // Pins 2-8 zijn verbonden met de 7 segmenten van het display. int pinA = 2; int pinB = 3; int pinC = 4; int pinD = 5; int pinE = 6; int pinF = 7; int pinG = 8; int D1 = 9; int D2 = 10; int D3 = 11; int D4 = 12; int i = 0; int i1 = 0; int i2 = 0; int i3 = 0; int i4 = 0; int val = 3095; int reading = 0; int threshold = 600; int prevReading = 0; int counter = 0; int printval = 0; // Functie om alle segmenten van het display uit te zetten. void clearFunction() { digitalWrite(D1, LOW); digitalWrite(D2, LOW); digitalWrite(D3, LOW); digitalWrite(D4, LOW); digitalWrite(pinA, LOW); digitalWrite(pinB, LOW); digitalWrite(pinC, LOW); digitalWrite(pinD, LOW); digitalWrite(pinE, LOW); digitalWrite(pinF, LOW); digitalWrite(pinG, LOW); delay(1); } // Functie neemt nummer en digit als input en laat deze zien op het display. void writeNumberFunction(int number, int digit){ // Bepaalt digit if (digit == 1) { digitalWrite(D1, LOW); digitalWrite(D2, HIGH); digitalWrite(D3, HIGH); digitalWrite(D4, HIGH); } else if (digit == 2) { digitalWrite(D1, HIGH); digitalWrite(D2, LOW); digitalWrite(D3, HIGH); digitalWrite(D4, HIGH); } else if (digit == 3) { digitalWrite(D1, HIGH); digitalWrite(D2, HIGH); digitalWrite(D3, LOW); digitalWrite(D4, HIGH); } else if (digit == 4) { digitalWrite(D1, HIGH); digitalWrite(D2, HIGH); digitalWrite(D3, HIGH); digitalWrite(D4, LOW); } // Laat het nummer zien op de gedefinieerde digit. if (number == 0) { digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, HIGH); digitalWrite(pinF, HIGH); digitalWrite(pinG, LOW); } else if (number == 1) { digitalWrite(pinA, LOW); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, LOW); digitalWrite(pinE, LOW); digitalWrite(pinF, LOW); digitalWrite(pinG, LOW); } else if (number == 2) { digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, LOW); digitalWrite(pinD, HIGH); digitalWrite(pinE, HIGH); digitalWrite(pinF, LOW); digitalWrite(pinG, HIGH); } else if (number == 3) { digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, LOW); digitalWrite(pinF, LOW); digitalWrite(pinG, HIGH); } else if (number == 4) { digitalWrite(pinA, LOW); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, LOW); digitalWrite(pinE, LOW); digitalWrite(pinF, HIGH); digitalWrite(pinG, HIGH); } else if (number == 5) { digitalWrite(pinA, HIGH); digitalWrite(pinB, LOW); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, LOW); digitalWrite(pinF, HIGH); digitalWrite(pinG, HIGH); } else if (number == 6) { digitalWrite(pinA, HIGH); digitalWrite(pinB, LOW); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, HIGH); digitalWrite(pinF, HIGH); digitalWrite(pinG, HIGH); } else if (number == 7) { digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, LOW); digitalWrite(pinE, LOW); digitalWrite(pinF, LOW); digitalWrite(pinG, LOW); } else if (number == 8) { digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, HIGH); digitalWrite(pinF, HIGH); digitalWrite(pinG, HIGH); } else if (number == 9) { digitalWrite(pinA, HIGH); digitalWrite(pinB, HIGH); digitalWrite(pinC, HIGH); digitalWrite(pinD, HIGH); digitalWrite(pinE, LOW); digitalWrite(pinF, HIGH); digitalWrite(pinG, HIGH); } delay(1); } // Setup: void setup() { // Digitale pins zijn outputs. pinMode(pinA, OUTPUT); pinMode(pinB, OUTPUT); pinMode(pinC, OUTPUT); pinMode(pinD, OUTPUT); pinMode(pinE, OUTPUT); pinMode(pinF, OUTPUT); pinMode(pinG, OUTPUT); pinMode(D1, OUTPUT); pinMode(D2, OUTPUT); pinMode(D3, OUTPUT); pinMode(D4, OUTPUT); // A0 is een input. pinMode(A0, INPUT); // Serial rate gedefinieerd. Serial.begin(9600); // Bepaalt threshold voor rising-edge detection aan de hand van initiele sensor reading. threshold = 100+analogRead(A0); } // Loop void loop() { // Lees hall sensor waarde reading = analogRead(A0); // Rising-edge detection voor Hall sensor if(reading > threshold && prevReading < threshold) { counter++; } prevReading = reading; // Bepaalt waarde om te laten zien op het display, counter vermenigvuldigd met het gedeelte van de omtrek tussen de magneten. printval = counter*7; // Split de printval in 4 aparte digits i4 = (printval%10); i3 = ((printval/10)%10); i2 = ((printval/100)%10); i1 = (printval/1000); // Print enkele digits op het display writeNumberFunction(i1,1); writeNumberFunction(i2,2); writeNumberFunction(i3,3); writeNumberFunction(i4,4); Serial.println(reading); // Wacht 1 ms. delay(1); }
Eindmontage 1
Boor gaten in de onderkant van de buis, zodat je het onderste wiel kan bevestigen. Bevestig de katrol-houder met M5 bouten en zet het kleine wiel weer in de houder met een M8 bout.
Eindmontage 2
Zaag een stuk hout uit, dat groot genoeg is om de grondplaat en de pijp naast elkaar te hebben. Zaag een gat voor de pijp uit dat precies groot genoeg is, of zelfs net te klein, zodat je hem op de pijp kan klemmen. Boor voor alle bouten die aan de onderkant van de grondplaat uitsteken gaten en twee extra gaten om de grondplaat met bouten te bevestigen. In de grondplaat zitten hiervoor onder de katrollen al gaten. Bevestig de grondplaat op het hout met M5 bouten.
Eindmontage 3
Lijm of tape een eind van het touw op het grote wiel, doe dit zo dat het touw er via de onderkant uit komt. Leidt het touw over het kleine wiel en door de pijp. Vervolgens om het wiel beneden in de buis. Zorg ervoor dat het uiteinde via het midden van de pijp omhoog gaat. Haal dit eind door de drijver heen en knoop hem vast aan een sluitring.
Eindmontage 4
Boor veel gaten over de gehele lengte van de buis en plak hier gaas over zodat er alleen water doorheen kan. Bevestig ook gaas aan de onderkant van de buis