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)

eindresultaat.jpg

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

  1. PVC pijp van 10 cm lang met minimale binnendiameter van 5 cm met dop
  2. 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
  3. Arduino
  4. Breadboard
  5. 2x waterdichte doos met deksel
  6. Genoeg lengte aan kabel voor de Arduino
  7. 4 100 Ohm weerstanden
  8. Fietswiel zonder band maar met as
  9. 1 houten balk
  10. Trechter met minimale bovendiameter van 15 cm
  11. 2 houten platen van ongeveer 1 meter bij 30 centimeter
  12. 1 houten plaat van 50 bij 50 centimeter
  13. 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)
  14. Veel tie wraps
  15. 2 neodynium magneten met een diameter van 1 centimeter
  16. Ducttape
  17. Kabels om sensor te verbinden
  18. Schroeven
  19. Seven Segment display

fietswiel v3.jpg

Demonteer het fietswiel. Mocht je er een los hebben maakt dat je fietsreizen een stuk makkelijker.

cups vastgemaakt.jpg

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.

magneet vastgeplakt.jpg

Plak 2 supermagneten met de ducttape op 2 tegenovergestelde rode bekers.

gat in balk.jpg

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.

balk op wiel.jpg

Steek hierna de as van het wiel in beide stukken van de balk.

platen op zijkant.jpg

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.

vloerplaat.jpg

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

sensor in bak.jpg
kabels in gat.jpg

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

sensor aan zijplaat.jpg

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.

trechter.jpg

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

display.png

Sluit vervolgens de Arduino en het Seven Segment display aan volgens de afbeelding.

trechter.jpg
49e.png

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

}

Downloads