Waterrad Om Regenintensiteit Te Meten (groep 8)
by GerbenvanRiet in Workshop > Woodworking
43 Views, 1 Favorites, 0 Comments
Waterrad Om Regenintensiteit Te Meten (groep 8)
Dit is een waterrad waarmee de intensiteit van regen gemeten kan worden. Om dit te meten moet dit rad onder een regenpijp geplaatst worden. Hierbij is een plat dak van 25 meter aangenomen en een regenpijp met een interne diameter van 7 cm
Supplies
- PVC pijp van 10 cm lang met minimale binnendiameter van 5 cm met dop
- Hall-sensor 44E https://www.digikey.nl/nl/products/detail/texas-instruments/DRV5011ADLPGM/11626082?utm_adgroup=&utm_source=google&utm_medium=cpc&utm_campaign=PMax%20Shopping_Product_Medium%20ROAS&utm_term=&productid=11626082&utm_content=&utm_id=go_cmp-19716236811_adg-_ad-__dev-c_ext-_prd-11626082_sig-Cj0KCQjwurS3BhCGARIsADdUH52ABoioYsWNY5nmK71S5zxP0AEuE0jhRGL0ZksIIyZ6nm8s1fInxYcaAjDHEALw_wcB&gad_source=1&gclid=Cj0KCQjwurS3BhCGARIsADdUH52ABoioYsWNY5nmK71S5zxP0AEuE0jhRGL0ZksIIyZ6nm8s1fInxYcaAjDHEALw_wcB
- Arduino
- Breadboard
- 2x waterdichte doos met deksel
- Genoeg lengte aan kabel voor de Arduino
- 4 100 Ohm weerstanden
- Fietswiel zonder band maar met as
- 1 houten balk
- Trechter met minimale bovendiameter van 15 cm
- 2 houten platen van ongeveer 1 meter bij 30 centimeter
- 1 houten plaat van 50 bij 50 centimeter
- 8 plastic cups (https://www.ah.nl/producten/product/wi434996/ah-party-cups?as_templateId=175435&utm_source=google&utm_medium=cpc&utm_campaign=NL%2FNL%20-%20Search%20-%20API%20-%20Branded%20-%20Cat%20-%20Non-Food&utm_id=8718194852&gad_source=1&gclid=Cj0KCQjwurS3BhCGARIsADdUH51-kZT_Eg_fXpg_tZ36NFd-HHBADJ7RXRw9kT6Dx5QGqxK7F31yLLMaAmTLEALw_wcB)
- Veel tie wraps
- 2 neodynium magneten met een diameter van 1 centimeter
- Ducttape
- Kabels om sensor te verbinden
- Schroeven
- Seven Segment display
Demonteer het fietswiel. Mocht je er een los hebben maakt dat je fietsreizen een stuk makkelijker.
Maak de 8 rode bekers met tie-wraps vast aan het wiel. Zorg dat de bekers allemaal op exact dezelfde afstand van elkaar zitten, dit is belangrijk om het wiel goed in balans te houden.
Plak 2 supermagneten met de ducttape op 2 tegenovergestelde rode bekers.
Zaag 2 gelijke stukken van de balk af. Zorg dat deze stukken lang genoeg zijn zodat de cups de ondersteunplaten niet raken. Boor daarna in 1 van de uiteindes van elke balk een gat dat groot genoeg is om de as in te doen. In ons geval was dit 10 mm, maar dit kan verschillen.
Steek hierna de as van het wiel in beide stukken van de balk.
Schroef hierna de zijplaten op de balk die je in de vorige stap op de as hebt gezet. De platen zouden langer moeten zijn dan het wiel is, zodat het wiel hierop kan staan.
Bevestig vervolgens de laatste balk zodat de 2 platen met elkaar verbonden zijn. Doe dit door via de onderkant in de staande balken te schroeven
Boor een gat in de achterkant van de waterdichte bak. Plak de Hall-sensor in de waterdichte bak tegen de zijkant met een beetje ducttape. Doe dit zo dicht mogelijk bij de deksel zodat de detectie goed gaat. Schroef hierna de doos dicht en trek de kabels van de sensor door het gat heen zodat je deze op de Arduino kan verbinden
Kijk goed waar de magneten langskomen ten opzichte van de zijplaten en teken dit af. Boor vervolgens een gat door de plaat waar de kabels van de sensor doorheen passen. Boor dan een paar extra gaten om de behuizing van de sensor te bevestigen. Bevestig vervolgens de sensor zo dicht mogelijk bij de baan van de bekers met ducttape, zonder dat deze de bekers daadwerkelijk raakt.
Maak vervolgens de opstelling zoals op de foto compleet door de trechter boven de bekers te hangen, zodat het regenwater goed in de bekers terechtkomt
Sluit vervolgens de Arduino en het Seven Segment display aan volgens de afbeelding.
Pak de tweede waterdichte bak en boor hier een gat in. Leg de Arduino met de display in de bak. Trek alle kabels van de Hall-sensor Door het gat en sluit deze aan volgens de afbeelding. Om hem op de Arduino aan te sluiten kun je om meer lengte in de kabel te krijgen female-male kabels gebruiken. De Analog output kan in de Arduino op A0. Daarna kan je de deksel op de doos doen en ben je helemaal klaar met bouwen
Code
Om de Arduino juist te laten werken en de intensiteit te laten zien, moet je de volgende code in de IDE zetten en uploaden naar de Arduino. De code is toegevoegd als .INO file en staat hieronder
#include "SevSeg.h"
SevSeg sevseg;
unsigned long last_detection_time = 0; // Time of the last magnet detection
unsigned int rpm = 0; // Calculated RPM value
float calculated_value = 0; // Calculated value using the formula y = 0.0007 * rpm^2.3075
int sensorPin = A0; // Sensor connected to analog pin A0
int threshold = 512; // Threshold value to detect magnetic field
bool magnet_detected = false;
void setup() {
Serial.begin(9600);
// SevSeg setup
byte numDigits = 4;
byte digitPins[] = {10, 11, 12, 13}; // Pins for digits of the display
byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4}; // Pins for segments of the display
bool resistorsOnSegments = false; // Resistors are on digit pins
bool updateWithDelaysIn = true; // Flag to determine update delays
byte hardwareConfig = COMMON_CATHODE; // Type of display (Common Cathode)
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90); // Set brightness level
}
void loop() {
// Read value from A0
int sensorValue = analogRead(sensorPin);
// If the value is above the threshold, a magnet is detected
if (sensorValue > threshold && !magnet_detected) {
magnet_detect(); // Call the magnet detection function
magnet_detected = true; // Set flag to prevent multiple detections
}
// Reset the flag when the sensorValue goes below the threshold
if (sensorValue < threshold) {
magnet_detected = false;
}
// Display the calculated value (multiplied by 100) on the 7-segment display
sevseg.setNumber(calculated_value * 100, 0); // Display the calculated value multiplied by 100 with no decimal places
sevseg.refreshDisplay(); // Refresh the display
}
// Function called when a magnet is detected
void magnet_detect() {
unsigned long current_time = millis(); // Get the current time
if (last_detection_time > 0) { // Ensure it's not the first detection
// Calculate time between two magnet detections
unsigned long time_between_detections = current_time - last_detection_time;
// Calculate RPM (60,000 ms per minute divided by the time for one revolution)
rpm = 60000 / time_between_detections;
// Calculate the value y = 0.0007 * rpm^2.3075
calculated_value = 0.0007 * pow(rpm, 2.3075);
// Print RPM and calculated value to Serial Monitor
Serial.print("RPM: ");
Serial.print(rpm);
Serial.print("\tCalculated Value: ");
Serial.println(calculated_value);
// Print the calculated value multiplied by 100 for reference
Serial.print("Calculated Value * 100: ");
Serial.println(calculated_value * 100);
}
last_detection_time = current_time; // Update the last detection time
}