Teller voor een windmolen

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 45
Geregistreerd: 08 Jan 2020, 17:23

Re: Teller voor een windmolen

Berichtdoor RonalT » 03 Feb 2020, 17:56

Inderdaad, Paul. Maar het probleem is dat een EEprom maar 100.000 maal te beschrijven is.
Ik laat elke 10 minuten de gegevens (jaartal en aantal omwentelingen) naar de EEprom schrijven. dat betekend 6 maal per uur, 40 maal per draaidag. Dus theoretisch zou de EEprom na 100.000 / 40 = 2500 dagen de geest geven. We draaien 1 tot 2 maal per week en dat zou dus betekenen dat we na 32 jaar een nieuwe EEprom nodig hebben. :lol: :lol:

Maar ik denk er over om ook een temp-barom-vocht sensor er aan te koppelen en al deze gegevens weg te laten schrijven. Daarvoor lijkt me een SD weer iets aantrekkelijker.

Eens kijken wat gemakkelijker werkt.


Ik kan op dit moment zeggen dat mijn sketch op dit moment zo werkt zoals ik wil. Alleen nog eens kijken of hij overzichtelijker kan of zuiniger kan omgaan met geheugenruimte.

Advertisement

Berichten: 45
Geregistreerd: 08 Jan 2020, 17:23

Re: Teller voor een windmolen

Berichtdoor RonalT » 03 Feb 2020, 18:37

Dan de nieuwe versie van Endenteller voor windmolens.

Wat uitleg voor de niet-molenaars...

- De wieken van de molen zitten aan de bovenas. De bovenas ligt (bijna) horizontaal in de molen.
Aan de bovenas zit het bovenwiel heeft 71 kammen (tanden).

- Er zit een (bijna) haakse overbrenging naar de koningsspil, deze staat rechtop in het midden van de molenromp.
Boven aan de koningsspil zit een rondsel (de bovenschijfloop) die 37 staven (soort tanden) heeft.
Onderaan de koningsspil zit het spoorwiel. Aan dit spoorwiel zit het magneetje vastgelijmd wat de pulsen veroorzaakt.
Dus het spoorwiel draait (71 gedeeld door 37 is) 1,9189 maal sneller dan de bovenas. Dit getallen komen in de code terug.

- Een molenaar is niet alleen geïnteresseerd in het aantal omwentelingen van de bovenas, maar ook in het aantal enden wat de molen draait.
Het aantal enden is het aantal wieken wat er per minuut passeert. Dat is dus 4 maal zo veel als het aantal omwentelingen van de bovenas.
En bij ons is dat dus 1,9189 maal 4 is 7,6756 maal zo veel als het aantal omwentelingen per minuut van het spoorwiel.


Het eerste stukje code is waarschijnlijk duidelijk genoeg, de libraries, er is een molensymbool gemaakt, de setup en de loop.
In de loop wordt gekeken of er pulsen binnenkomen via reedschakelaar A en als dat zo is wordt er naar VOID wiekSnelheid() en VOID totaalOmw() gesprongen.
De eerste subroutine rekent de tijd uit tussen de vorige omwenteling en de huidige omwenteling van het spoorwiel uit en rekent dan uit hoeveel 'enden per minuut' dat is. Als het minder dan 0 is of meer dan 120 wordt er nul van gemaakt. Voor onze molen is 60-70 enden wat we hem maximaal mogen laten draaien.
Dit wordt in beeld gebracht op een LCD display en eventueel op de seriële monitor. Als er een puls binnenkomt geeft de LED een groene lichtflits.

De tweede subroutine rekent uit hoe veel omwentelingen per minuut de bovenas draait en zet dit ook op het display.

De derde subroutine VOID stilGevlucht() stelt vast dat de molen niet meer draait als er gedurende 8000 milliseconden geen pulsen binnenkomen. Ook dit wordt op het display weergegeven en de LED gaat blauw branden.

De volgende subroutine gaat de gegevens opslaan als er 60.000 milliseconden voorbij zijn. Nu nog op de EEprom, binnenkort op SD-card. Nu wordt het aantal omwentelingen van de bovenas opgeslagen en het jaar tal.

De vijfde subroutine heet resetTotaalOmw() en zorgt er voor dat het aantal omwentelingen op 1 gezet wordt en het jaartal met 1 verhoogd. De LED gaat dan vrolijk knipperen. Dit heb ik gedaan met een aantal DELAY's en dat laat ik zo omdat dit 1 maal per jaar wordt uitgevoerd als de molen stilstaat.

De zesde subroutine heet weetZekerDisplay() en deze hoort eigenlijk voor de vorige te staan. Deze routine wordt aangeroepen als je een magneet bij de tweede reedschakelaar houdt en dan wordt er gevraagd "weet je dit zeker? Dan nogmaals de magneet er bij houden terwijl de LED knippert". Als je dat doe spring hij naar de vorige subroutine om de boel te resetten.
Ik zal deze twee nog eens omkeren omdat dat logischer is. Het zal geen verschil maken, maar toch...

Dat was alles... en dan nu de sketch:



cpp code
#include <Wire.h>                                                        // Deze library maakt het mogelijk om met I2C / TWI aparaten te communiceren.
#include <EEPROMex.h> // Deze library maakt het mogelijk om te lezen en te schrijven naar de EEprom.
#include <LiquidCrystal_I2C.h> // Library om de LiquidCrystal LCD display op een Arduino board aan te sluiten.

/*
* Use 0x27 if you have a chip PCF8574 from NXP,
 * or use 0x3F if you have a chip PCF8574A from Ti (Texas Instruments),
*/

LiquidCrystal_I2C lcd(0x27, 20, 4);

/*
* the mill symbol has been made with the generator on:
* https://maxpromer.github.io/LCD-Character-Creator/
*/

byte mill[] = { // | creeert het molen karakter
0x00, // |
0x11, // |
0x0A, // |
0x04, // |
0x0E, // |
0x15, // |
0x0E, // |
0x0E // | creeert het molen karakter
};

/* de 3 kleuren LED heeft 4 pootjes, 1 lange, 2 korte en een die er tussin zit,
* de lange poot is de min (ground of gnd), er naast zit rood, de middellange poot.
 * Aan de andere kant, is de eerste van de twee korte blauw en de laatste is groen.
* Dus op een rijtje is het rood-min-blauw-groen.
*/



int reedSchakA = 2; // digital pin 2 reedswitch vooruit.
int reedSchakReset = 4; // digital pin 4 reedswitch reset.
int buttonAState = 1; // variabele buttonAState.
int buttonResetState = 1; // variabele buttonResetState.
int buttonSureState = 0; // variabele weet u het zeker status.
int buttonAStateOld = 1; // variabele vorige buttonAState.
int buttonSureStateOld = 0; // variabele vorige weet u het zeker status
int buttonResetStateOld = 1; // variabele vorige buttoResetState.
int LED_red = 8; // rode LED.
int LED_Forward = 9; // groene LED telpuls.
int LED_Still = 10; // blauwe LED die stilstand meld.
long rotationTimeA; // tijdstip van de laatste puls.
long rotationTimeAOld; // tijdstip van de vorige puls.
float rotationSpeed; // tijd waarin het spoorwiel een omwenteling maakt.
float numberOfSails; // aantal enden (wieken) per minuut.
float bw = 71.0; // aantal kammen / staven bovenwiel van uw molen. Schrijf de waarde met .0 er achter.
float sl = 37.0; // aantal kammen / staven schijfloop/wieg/bonkelaar van uw molen. Schrijf de waarde met .0 er achter.
float conversion = 60.0/(15.0*(bw/sl)); // berekende tijd voor een omwenteling van het spoorwiel bij 60 enden.
unsigned long numberOfRevolutions; // "revolutionsSpurwheel" gedeeld door verhouding bovenwiel/rondsel = omwentelingen bovenas
unsigned long revolutionsSpurwheel = 1; // totaal aantal omwentelingen per jaar, van het spoorwiel.
unsigned long bijwerkTijd; // na deze tijd worden de gegevens naar de SD-card geschreven.
unsigned int jaartal = 2019; // variabele waarin het jaar vastgelegd wordt.


void wiekSnelheid(); // Declare subroutine "wieksnelheid", telt het aantal enden (wieken).
void totaalOmw(); // Declare subroutine "totaalOmw", telt het aantal omwentelingen van de bovenas.
void stilGevlucht(); // Declare subroutine "stilGevlucht", geeft na X seconden aan dat de wieken stil staan.
void bijwerk(); // Declare subroutine "bijwerk", hierin worden gegevens naar de SD-card geschreven.
void resetTotaalOmw(); // Declare subroutine "resetTotaalOmw", reset het aantal omwentelingen naar 0 en verhoogd het jaar met 1.
void weetZekerDisplay(); // Declare subroutine "weetZekerDisplay", weet je zeker dat je resetTotaalOmw wil uitvoeren.



void setup() // the setup routine runs once when you start the Arduino.
{
lcd.init(); // initializeer het LCD display.
lcd.backlight(); // zet de backlight aan.
lcd.createChar(1, mill); // creeer een character in memorycell 1.
Serial.begin(9600); // initialize seriele communicatie op 9600 bits per seconde.
pinMode(reedSchakA, INPUT_PULLUP); // initializeer digitale pin 2 als input.
pinMode(reedSchakReset, INPUT_PULLUP); // initializeer digitale pin 4 als input.
pinMode(LED_red, OUTPUT); // initializeer digitale pin 8 als output.
pinMode(LED_Forward, OUTPUT); // initializeer digitale pin 9 als output.
pinMode(LED_Still, OUTPUT); // initializeer digitale pin 10 als output.
rotationTimeAOld = millis(); // rotationTimeAOld wordt gezet op huidige tijd.
revolutionsSpurwheel = EEPROM.readFloat(78); // lees aantal omwentelingen uit de EEprom.
jaartal = EEPROM.readInt(88); // lees datum uit de EEprom. (de twee strepen, hieronder, VOOR deze regel typen)
// jaartal = 2019; // de strepen voor deze regel weghalen en voor de vorige regel zetten om jaar terug naar 2019 te stellen
Serial.print ("jaartal inlezen : "); // tekst naar serial monitor.
Serial.println (jaartal); // print tekst naar de serial monitor en ga een regel omlaag.
Serial.print ("aantal omwentelingen inlezen : "); // tekst naar serial monitor.
Serial.println (revolutionsSpurwheel); // print tekst naar de serial monitor en ga een regel omlaag.
numberOfRevolutions = revolutionsSpurwheel / (bw / sl); // aantal pulsen gedeeld door de verhouding van bovenwiel/bovenschijfloop is aantal omwnentelingen van de bovenas.
stilGevlucht(); // spring naar subroutine stilGevlucht.
} // End of subRoutine "setup".



void loop() // the loop routine is running all the time.
{
(buttonAState) = digitalRead(reedSchakA); // controleer of reed schakelaar A is geactiveerd.
if (buttonAState != buttonAStateOld) // controleren of de schakelaar bediend wordt.
{
if (buttonAState == LOW) // controleer of buttonAState is hoog.
{
rotationTimeA = millis(); // zet variabele rotationTimeA op huidige tijd.
wiekSnelheid(); // spring naar subRoutine "wiekSnelheid bepalen".
totaalOmw(); // spring naar subRoutine "totaal aantal omwentelingen per jaar".
revolutionsSpurwheel = revolutionsSpurwheel + 1; // verhoog variabele revolutionsSpurwheel met 1.
}
}
buttonAStateOld = buttonAState; // oude buttonAState is gelijk aan buttonAState.

if (millis() - rotationTimeA == 8000) // als de huidgie tijd min rotationTimeA is gelijk aan 8000 miliseconden.
{
stilGevlucht(); // spring naar subRoutine "gevlucht staat stil".
}

if (millis() - bijwerkTijd > 60000) // als de huidgie tijd min bijwerkTijd is groter dan 60000 miliseconden (dat is 1 minuut)
{
bijwerk(); // spring naar subRoutine "bijwerk" om de EEPROM bij te werken.
}

(buttonResetState) = digitalRead(reedSchakReset); // controleer of reed schakelaar RESET is geactiveerd.
if (buttonResetState != buttonResetStateOld) // controleren of de schakelaar bediend wordt.
{
if (buttonResetState == LOW) // als dde reset schakelaar hoog is wordt "weetZekerDisplay" uitgevoerd.
{
weetZekerDisplay(); // jump to subRoutine "weetZekerDisplay.
rotationTimeA = millis(); // zet variabele rotationTimeA op huidige tijd.
}
}
buttonResetStateOld = buttonResetState; // oud = nieuw.
} // End of subRoutine "loop".



void wiekSnelheid() // subRoutine "bepaald de snelheid van de wieken in enden per minuut".
{
digitalWrite(LED_Still, LOW); // blauwe LED uit.
delay(10); // hele korte pauze (tijd in milliseconds).
digitalWrite(LED_Forward, HIGH); // groene LED aan.
rotationSpeed = rotationTimeA - rotationTimeAOld; // berekent de tijd voor een omwenteling van het spoorwiel.
rotationTimeAOld = rotationTimeA; // oude tijd is nieuwe tijd.
numberOfSails = 60000 / rotationSpeed * conversion; // berekent het aantal omwentelingen van het spoorwiel per minuut.
if (numberOfSails > 120 || numberOfSails < 0) // | correctie voor een te hoog of te laag aantal enden.
{ // |
numberOfSails = 0; // | te hoog of te laag is 0 omwentelingen.
} // | correctie voor een te hoog of te laag aantal enden.
lcd.setCursor(0, 0); // plaats de cursor op positie 1, regel 1.
lcd.print(" "); // maakt de eerste 4 karakters vanaf 0, 0 leeg.
lcd.setCursor(0, 0); // plaats de cursor op positie 1, regel 1.
lcd.print(numberOfSails,0); // verzend het "aantal enden per minuut" naar het LCD display.
lcd.setCursor(4, 0); // plaats de cursor op positie 5, regel 1.
lcd.print("enden per minuut"); // verzend de tekst naar het LCD display.
lcd.setCursor(0, 3); // plaats de cursor op positie 0, regel 4.
lcd.print(" "); // maakt regel 4 leeg.
digitalWrite(LED_Forward, LOW); // groene LED uit.
Serial.print("Aantal enden : "); // verzend de tekst naar de serial monitor.
Serial.println(numberOfSails, 0); // verzend het "aantal enden per minuut" naar de serial monitor.
Serial.print("Tijd voor 1 omwenteling (millisec) : "); // verzend de tekst naar de serial monitor.
Serial.println(rotationSpeed, 0); // verzend de tijd naar de serial monitor.
} // End of subRoutine "wieksnelheid".



void totaalOmw() // subRoutine "telt het totaal aantal omwentelingen per jaar".
{
numberOfRevolutions = revolutionsSpurwheel / (bw / sl); // van aantal omwentelingen spoorwiel naar aantal omwentelingen bovenas.
lcd.setCursor(0, 1); // plaats de cursor op positie 1, regel 2.
lcd.print(" "); // verstuur 8 spaties naar het LCD display.
lcd.setCursor(0, 1); // plaats de cursor op positie 1, regel 2.
lcd.print(numberOfRevolutions); // verzend "aantal omwentelingen" naar het LCD display.
lcd.setCursor(7, 1); // plaats de cursor op positie 8, regel 2.
lcd.print(" omw. in "); // verzend tekst naar het LCD display.
lcd.setCursor(16, 1); // plaats de cursor op positie 17, regel 2.
lcd.print(jaartal); // verzend tekst naar het LCD display.
lcd.setCursor(0, 2); // plaats de cursor op positie 1, regel 3.
lcd.print (" "); // verzend lege regel naar het LCD display.
lcd.setCursor(0, 3); // plaats de cursor op positie 1, regel 4.
lcd.print (" "); // verzend lege regel naar het LCD display.
Serial.print("totaalOmw : "); // verzend tekst naar de serial monitor.
Serial.println(numberOfRevolutions); // verzend tekst naar de serial monitor.
Serial.println(""); // lege regel.
} // End of subRoutine "totaalOmw".



void stilGevlucht() // subRoutine "als de wieken X seconden stil staan wordt dat gemeld".
{
digitalWrite(LED_Still, HIGH); // blauwe LED aan.
lcd.setCursor(0, 0); // plaats de cursor op positie 1, line 1.
lcd.print(" "); // send 8 spaces to LCD display for empty space.
lcd.setCursor(0, 0); // plaats de cursor op positie 1, line 1.
lcd.print(numberOfRevolutions); // verzend de tekst naar het LCD display.
lcd.setCursor(7, 0); // plaats de cursor op positie 8, line 1.
lcd.print(" omw. in "); // verzend de tekst naar het LCD display.
lcd.setCursor(16, 0); // plaats de cursor op positie 17, line 1.
lcd.print(jaartal); // verzend de tekst naar het LCD display.
lcd.setCursor(0, 1); // plaats de cursor op positie 1, line 2.
lcd.print ("De wieken staan stil"); // verzend de tekst naar het LCD display.
lcd.setCursor(0, 2); // plaats de cursor op positie 1, line 3.
lcd.print (" "); // verzend de tekst naar het LCD display.
lcd.setCursor(0, 3); // plaats de cursor op positie 1, line 3.
lcd.print (" "); // verzend de tekst naar het LCD display.
lcd.setCursor(2, 3); // plaats de cursor op positie 3, line 4, align the text with the first number (2),
// de tekst (molennaam enkele regels lager) kun je uitlijnen met het eerste cijfer (2).
lcd.write(1); // teken karakter uit geheugenplaats 1.
lcd.print(" de Heimolen "); // verzend de tekst naar het LCD display. (uitlijnen voor je eigen molennaam),
// verzend de tekst (aanpassen aan eigen molennaam).
lcd.write(1); // teken karakter uit geheugenplaats 1.
Serial.println ("Stil gevlucht"); // print tekst naar de serial monitor.
Serial.println(""); // verzend een lege regel naar de seriele monitor.
} // End of subRoutine "gevlucht staat stil".



void bijwerk() // Subroutine "schrijft de gegevens naar een SD-card".
{
Serial.println("Opslaan op SD-card "); // verzend de tekst naar het LCD display.
EEPROM.writeFloat(78, revolutionsSpurwheel); // plaats omwentelingen spoorwiel in Eeprom geheugenplaats.
EEPROM.writeInt(88, jaartal); // plaats jaartal in Eeprom geheugenplaats.
Serial.print ("Opslaan aantal omwentelingen : "); // verzend de tekst naar het LCD display.
Serial.println (revolutionsSpurwheel / (bw / sl), 0); // verzend de tekst naar het LCD display.
Serial.print ("Opslaan jaartal : "); // verzend de tekst naar het LCD display.
Serial.println (jaartal); // verzend de tekst naar het LCD display.
bijwerkTijd = millis(); // zet de huidige tijd in variabele 'bijwerkTijd'.
Serial.println(""); // lege regel.
} // End of subroutine "bijwerken".



void resetTotaalOmw() // Subroutine "zet het aantal omwentelingen 1 maal per jaar terug op 0 en het jaartal met 1 verhogen".
{
Serial.println("resetTotaalOmw"); // verzend de tekst naar de seriele monitor.
jaartal = jaartal +1; // verhoogt jaartal met 1.
revolutionsSpurwheel = 1; // zet omwentelingen spoorwiel op 1.
EEPROM.writeInt(88, jaartal); // stuurt het jaartal naar de SD card.
EEPROM.writeFloat(78, revolutionsSpurwheel); // stuurt het aantal omwentelingen spoorwiel naar de SD card.
digitalWrite(LED_Still, LOW); // blauwe LED uit, als deze aan was ivm stilstaand gevlucht.
delay(200); // korte pauze (tijd in milliseconds).
digitalWrite(LED_Forward, HIGH); // groene LED aan.
delay(200); // korte pauze (tijd in milliseconds).
digitalWrite(LED_Forward, LOW); // groene LED uit.
delay(40); // hele korte pauze (tijd in milliseconds).
digitalWrite(LED_Still, HIGH); // blauwe LED aan.
delay(200); // korte pauze (tijd in milliseconds).
digitalWrite(LED_Still, LOW); // blauwe LED uit.
delay(40); // hele korte pauze (tijd in milliseconds).
digitalWrite(LED_red, HIGH); // rode LED aan.
delay(300); // korte pauze (tijd in milliseconds).
digitalWrite(LED_red, LOW); // rode LED uit.
delay(40); // hele korte pauze (tijd in milliseconds).
digitalWrite(LED_Still, HIGH); // blauwe LED aan.
delay(200); // korte pauze (tijd in milliseconds).
digitalWrite(LED_Still, LOW); // blauwe LED uit.
delay(40); // hele korte pauze (tijd in milliseconds).
digitalWrite(LED_Forward, HIGH); // groene LED aan..
delay(200); // korte pauze (tijd in milliseconds).
digitalWrite(LED_Forward, LOW); // groene LED uit.
Serial.println ("reset Omwentelingen en verhoog jaartal"); // verzend de tekst naar de seriele monitor.
Serial.println (jaartal); // verzend het jaartal naar de seriele monitor.
Serial.println (revolutionsSpurwheel); // verzend het aantal omwentelingen van het spoorwiel naar de seriele monitor.
Serial.println(""); // verzend een lege regel naar de seriele monitor.
} // End of subroutine "Reset Totaal Aantal Omwentelingen".



void weetZekerDisplay() // Subroutine "weet u zeker dat void resetTotaalOmw() uitgevoerd moet worden?"
{
lcd.clear(); // maak het LCD display leeg
lcd.setCursor(0, 0); // plaats de cursor op positie 1, line 1.
lcd.print("Weet u dit zeker? "); // verzend de tekst "weet u dit zeker" naar het LCD display.
lcd.setCursor(0, 1); // plaats de cursor op positie 1, line 2.
lcd.print("Binnen 2 seconde nog"); // verzend de tekst naar het LCD display.
lcd.setCursor(0, 2); // plaats de cursor op positie 1, line 3.
lcd.print("een keer. "); // verzend de tekst naar het LCD display.
lcd.setCursor(0, 3); // plaats de cursor op positie 1, line 1.
lcd.print(" "); // stuur een lege regel naar het LCD display.
delay (1000); // hele korte pauze (tijd in milliseconds).
for (int i = 0; i <= 10; i++) { // LED knippert 10 maal.
digitalWrite(LED_Still, LOW); // blauwe LED uit.
Serial.println("knipper"); // stuur "knipper" naar de serial monitor en ga een regel omlaag.
delay(80); // vertraging LED uit.
(buttonSureState) = digitalRead(reedSchakReset); // controleer of de reset schakelaar is geactiveerd.
if (buttonSureState != buttonSureStateOld) // ja, ik weet het zeker.
{
if (buttonSureState == LOW) // voer onderstaande acties uit als buttonSureState is hoog.
{
resetTotaalOmw(); // spring naar subRoutine "reset totaal aantal omwentelingen per jaar".
break; // breek het geknipper af en spring naar loop.
}
}
buttonSureStateOld = buttonSureState; // oude status = nieuwe status.
digitalWrite(LED_Still, HIGH); // blauwe LED uit.
delay(120); // hele korte pauze (tijd in milliseconds).
}
Serial.println(""); // lege regel.
wiekSnelheid(); // spring naar subRoutine "wiekSnelheid".
totaalOmw(); // spring naar subRoutine "totaalOmw".
}

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Teller voor een windmolen

Berichtdoor Gij Kieken » 03 Feb 2020, 20:05

In plaats van EEPROM zou je ook FRAM kunnen gebruiken dit is ook non-volatile geheugen.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Teller voor een windmolen

Berichtdoor shooter » 04 Feb 2020, 10:10

ja een stickje is toch simpel, en ja die moet dus na 32 jaar misschien vervangen, tjonge zeg dan ligt je hele opstelling allang in de schrotbak, omdat er binnen 10 jaar al een heel netwerk ligt met supersnelle verbindingen door de lucht een soort LORA maar dan 5G, ter grootte van een horloge. (trouwens kun je de omwenetingen ook met een G force sensor goed meten dan is er helemaal geen contact meer nodig, maar kun je volstaan met een kleine zender op de as, en een wifi naar de rest.
maar ach als het nu goed werkt lekker laten zitten.
je kunt dus ook de molenstand bepalen en met een weerstation kun je bijvoorbeeld ook de windsnelheid etc bepalen en op een stikie schrijven
ofwel nog uitdagingen genoeg.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: Teller voor een windmolen

Berichtdoor Gij Kieken » 04 Feb 2020, 21:37

Inderdaad shooter , your imagination is the limit, RonaldT kan het zo ver drijven als hij wilt.
Het is een mooi projectje.
Jammer voor mij dat het zo ver is om eens van een rondleiding in de molen te genieten.

Berichten: 45
Geregistreerd: 08 Jan 2020, 17:23

Re: Teller voor een windmolen

Berichtdoor RonalT » 04 Feb 2020, 22:39

Maar of het nu te ver is of niet, weet Gij Kieken, dat u altijd welkom bent op donderdagen tussen 10 en 16 uur. Andere mensen trouwens ook!
En of ik dit nu na 10 jaar moet vervangen weet ik niet. Onze molen staat er al sinds 1866 en de onderste laag zelfs sinds 1844. Dus het houd goed vol. ;-)

En inderdaad heren, ik ben van plan om allerlei mogelijkheden uit te gaan proberen. Daar is dit project ook voor opgezet. Ik ben begonnen met het tellen en heb er daarna steeds een VOID bijgeknutseld.
Ik heb dit nu redelijk goed werkend denk ik. Nu is de nieuwe uitdaging om op een SD-card te gaan schrijven.

Ik heb nu 3 UNO's waarvan er een in een kast gebouwd gaat worden en deze gaat serieus enden en omwentelingen tellen. De andere blijven thuis om verder te experimenten van tijd tot tijd zal er op de molen een update worden gedaan.
Daarna ga ik wat proberen met luchtdruk, temperatuur ed.
Eventueel ook nog met een oud weerstation wat ik ooit gekregen heb. Deze werkt niet meer, maar misschien is het werkende te krijgen door pulsen oid in te lezen op een arduino.

Inderdaad, nog uitdagingen genoeg. Ik ben op 21 december met de eerste experimenten begonnen en heb dit nu werkende, maar ben nog lang niet klaar!

Vorige

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Bing [Bot] en 18 gasten