Windmolen Code.

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

Re: Windmolen Code.

Berichtdoor shooter » 05 Mei 2023, 20:55

mij lijkt het nog steeds niet compleet en je kunt met map makkelijker de windspeed omrekenen naar baufort
paul deelen
shooter@home.nl

Advertisement

Berichten: 9
Geregistreerd: 19 Apr 2023, 16:55

Re: Windmolen Code.

Berichtdoor Breeze360 » 06 Mei 2023, 13:45

Misschien is het handig om te weten wat de code allemaal. Moet gaan doen!
(Let op: Er zijn echter enkele ontbrekende stukjes code, zoals de implementatie van de functies voor het berekenen van de windsnelheid, RPM, energie-output en het controleren van de remstatus. Deze moeten worden ingevuld met de juiste berekeningen op basis van de specificaties van de gebruikte hardware)

Hardware-onderdelen:

Arduino UNO R3 MEGA328P
Anemometer: Een anemometer met een Hall-effectsensor en 4 magneten om de windsnelheid te meten.
LCD keypad shield: Een display en bedieningsscherm met 6 knoppen ("select", "left", "up", "down", "right" en "reset").
Hanrun HR91105A Ethernet Shield: Voor netwerkconnectiviteit.
Adafruit Precision RTC Real Time Clock Memory Module + 1602 Serial Interface Adapter: Voor het bijhouden van de tijd.
Iduino stroomsensor TA12-200: Om de energie-output te meten.

Benodigde bibliotheken:

Om de code correct te laten werken met de genoemde hardware-onderdelen, moeten de volgende bibliotheken worden geïnstalleerd in de Arduino-omgeving:

1. Anemometer:
* Library: "HallSensor" (Bibliotheek: "HallSensor")
* Functie: Deze bibliotheek biedt ondersteuning voor het lezen van de Hall-effectsensor van de anemometer, waarmee de windsnelheid wordt gemeten.
2. LCD keypad shield:
* Library: "LiquidCrystal_I2C" (Bibliotheek: "LiquidCrystal_I2C")
* Functie: Deze bibliotheek maakt communicatie mogelijk met het LCD-scherm en de knoppen op het keypad shield. Hiermee kunnen gegevens op het display worden weergegeven en de knopinvoer worden verwerkt.
3. Hanrun HR91105A Ethernet Shield:
* Library: "Ethernet" (Bibliotheek: "Ethernet")
* Functie: Deze bibliotheek biedt ondersteuning voor het gebruik van het Hanrun HR91105A Ethernet Shield, waarmee netwerkconnectiviteit mogelijk is. Hiermee kan de Arduino communiceren via een Ethernet-verbinding.
4. Adafruit Precision RTC Real Time Clock Memory Module + 1602 Serial Interface Adapter:
* Library: "RTClib" (Bibliotheek: "RTClib")
* Functie: Deze bibliotheek biedt ondersteuning voor het gebruik van de Adafruit Precision RTC Real Time Clock Memory Module en de 1602 Serial Interface Adapter. Hiermee kan de Arduino de tijd bijhouden en weergeven.
5. Iduino stroomsensor TA12-200:
* Library: "ACS712" (Bibliotheek: "ACS712")
* Functie: Deze bibliotheek biedt ondersteuning voor het lezen van de stroomsensor TA12-200 van Iduino, waarmee de energie-output kan worden gemeten.

Code-informatie Iduino stroomsensor TA12-200:

Energie-output:
De totale gemiddelde energie-output over een uur wordt weergegeven in kilowattuur (kWh per uur).

Windsnelheid (Anemometer):
Huidige windsnelheid/anemometer: Gemeten in meters per seconde (m/s).
Gemiddelde windsnelheid/anemometer: Het gemiddelde over 10 minuten, berekend in kilometer per uur (km/h).
Maximale windsnelheid/anemometer: Het hoogste gemeten windsnelheid over 10 minuten, weergegeven in kilometer per uur (km/h).

Benaming "Windsnelheid/Anemometer":
De windsnelheid wordt gekoppeld aan een benaming volgens de volgende schaal:

0: 0 - 0,2 m/s: Windstil
1: 0,3 - 1,5 m/s: Zeer zwakke wind
2: 1,6 - 3,3 m/s: Zwakke wind
3: 3,4 - 5,4 m/s: Zeer matige wind
4: 5,5 - 7,9 m/s: Matige wind
5: 8,0 - 10,7 m/s: Vrij krachtige wind
6: 10,8 - 13,8 m/s: Krachtige wind
7: 13,9 - 17,1 m/s: Harde wind
8: 17,2 - 20,7 m/s: Stormachtige wind
9: 20,8 - 24,4 m/s: Storm
10: 24,5 - 28,4 m/s: Zware storm
11: 28,5 - 32,6 m/s: Zeer zware storm
12: > 32,6 m/s: Orkaan

Maximale windsnelheid/anemometer: Het hoogste gemeten windsnelheid over 10 minuten, weergegeven in kilometer per uur (km/h).

Code-informatie "RPM" (Hall-effectsensor):

Informatie "RPM":
Het percentageverschil tussen de metingen van de windsnelheid/anemometer en de weergegeven RPM, uitgedrukt in procenten van 100% tot 0%.
Huidige RPM (omwentelingen per minuut): Gemeten in meters per seconde (m/s).
Gemiddelde RPM: Het gemiddelde over 10 minuten, berekend in kilometer per uur (km/h).
Maximale RPM: Het hoogste gemeten RPM over 10 minuten, weergegeven in kilometer per uur (km/h).

Remfunctie:
De remfunctie wordt geactiveerd op basis van de gemeten windsnelheid/anemometer. Wanneer de gemiddelde windsnelheid over 10 minuten een bepaalde waarde in m/s overschrijdt, wordt de rem geactiveerd. De rem is verbonden met een servomotor die gelijkmatig aangrijpt totdat de windmolen tot stilstand komt.

Remfunctie-bibliotheken:
[Vermeld hier de namen van de bibliotheken die nodig zijn voor de remfunctie.]

Rem Actief:
Deze variabele houdt de tijd bij dat de rem actief is. De meting wordt gedaan op basis van de gemiddelde windsnelheid/anemometer over 10 minuten. Wanneer deze waarde boven een bepaalde drempel in m/s komt, wordt de rem geactiveerd ("Actief: ja"). Zodra de waarde weer onder deze drempel zakt, wordt de rem gedeactiveerd ("Actief: nee").

Laatste remactie:
Deze variabele houdt de tijd van de laatste remactie gedurende één maand bij, inclusief de dag en het tijdstip. Een automatische reset vindt plaats aan het einde van elke maand.

Totale remactieve tijd:
Het totale aantal minuten/uren dat de rem deze maand geactiveerd is. Dit wordt berekend op basis van de huidige status van de RPM (aan/uit). Een automatische reset vindt plaats aan het einde van elke maand.
*****************************************************************************

Windsnelheid:
Windsnelheid Actueel: m/s = Km/u
Gemiddelde windsnelheid: m/s = km/u
Windsnelheid maximaal : m/s = km/u

Rpm:
Gemiddelde Rpm:
Totale Draaitijd: uur
Gemiddelde Vermogen: kW

Rendement verschil: % minder Rpm ten opzichte van de windsnelheid

Energie-output:
Totale gemiddelde over uur: kWh = kWh per uur

Gemiddelde Vermogen in kW over het totale aantal draaitijd: uur

Real time klok:
Dag/maand/jaar/tijd

Remstatus:

Rem Actief Ja/Nee
Aantal keren Rem actief: x binnen uur
Totaal Rem actief:


Zo ver ben ik er nu mee!

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_Anemometer.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <Servo.h>
#include <Ethernet.h>

// Pinnummering voor LCD keypad shield
#define BUTTON_SELECT 0
#define BUTTON_LEFT 1
#define BUTTON_UP 2
#define BUTTON_DOWN 3
#define BUTTON_RIGHT 4
#define BUTTON_RST 5

// Pinnummers voor de Hall-effectsensor en anemometer
#define ANEMOMETER_PIN 2
#define SERVO_PIN 9

// Variabelen voor windsnelheid
float currentWindsnelheid = 0.0; // Huidige windsnelheid in m/s
float averageWindsnelheid = 0.0; // Gemiddelde windsnelheid in km/u
float maxWindsnelheid = 0.0; // Maximale windsnelheid in km/u

// Variabelen voor RPM
int averageRpm = 0; // Gemiddelde RPM
int totalRuntime = 0; // Totale draaitijd in uren
float averageVermogen = 0.0; // Gemiddeld vermogen in kW

// Variabelen voor remstatus
int remActiefCount = 0; // Aantal keren dat de rem actief is geweest
int remActiefTotal = 0; // Totale tijd dat de rem actief is geweest in seconden

// Variabelen voor real-time klok
RTC_DS1307 rtc;
DateTime now;

// LCD-object
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C-adres van de LCD-module

// Servo-object voor de rem
Servo remServo;

// Ethernet-gerelateerde variabelen
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // Vervang met jouw eigen MAC-adres
char server[] = "voorbeeldserver.com"; // Vervang met het juiste serveradres
EthernetClient client; // Ethernet-client object

// Functie om de windsnelheid te berekenen
void calculateWindsnelheid() {
// Code om de windsnelheid te berekenen
// Implementeer de berekening op basis van de pulsen van de Hall-effectsensor
// Pas de waarden aan aan de hand van de afstand tussen de magneten en de tijd
}

// Functie om de RPM te berekenen
void calculateRpm() {
// Code om de RPM te berekenen
// Implementeer de berekening op basis van de windsnelheid en andere parameters
}

// Functie om de energie-output te berekenen
void calculateEnergieOutput() {
// Code om de energie-output te berekenen
// Implementeer de berekening op basis van de gemiddelde RPM en andere parameters
}

// Functie om de remstatus te controleren
void checkRemStatus() {
// Code om de remstatus te controleren
// Implementeer de controle op basis van de gemiddelde RPM en activeer de rem indien nodig
// Houd ook de tijd bij dat de rem actief is geweest
}

// Functie om de real-time klok bij te werken
void updateRealTimeClock() {
now = rtc.now();
// Code om de real-time klok bij te werken
// Gebruik de 'now' variabele om de huidige datum en tijd op te halen
}

void setup() {
// Initialisatie van de seriële communicatie
Serial.begin(9600);

// Initialisatie van de LCD-module
lcd.begin(16, 2);
lcd.setBacklight(HIGH);
lcd.clear();

// Initialisatie van de Hall-effectsensor en anemometer
Adafruit_Anemometer anemometer = Adafruit_Anemometer(ANEMOMETER_PIN);

// Initialisatie van de real-time klok
rtc.begin();
if (!rtc.isrunning()) {
Serial.println("RTC is niet gevonden!");
while (1);
}

// Initialisatie van de servo voor de rem
remServo.attach(SERVO_PIN);

// Weergave van de titel op het LCD-scherm
lcd.print("Windturbine");

delay(2000);

lcd.clear();

lcd.setCursor(0, 0);
lcd.print("Initialiseren...");

// Code voor verdere initialisatie

lcd.clear();

// Ethernet-initialisatie
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// Geef de code hier aan als er een probleem is met het configureren van Ethernet
}
delay(1000);
Serial.println("Ethernet connection established");
Serial.print("IP address: ");
Serial.println(Ethernet.localIP());
}

void loop() {
// Windsnelheid meten
calculateWindsnelheid();

// RPM berekenen
calculateRpm();

// Energie-output berekenen
calculateEnergieOutput();

// Remstatus controleren
checkRemStatus();

// Real-time klok bijwerken
updateRealTimeClock();

// Weergave van gegevens op het LCD-scherm
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Windsnelheid: ");
lcd.print(currentWindsnelheid);
lcd.print(" m/s");

lcd.setCursor(0, 1);
lcd.print("RPM: ");
lcd.print(averageRpm);

// Verzend gegevens naar de server via Ethernet
if (client.connect(server, 80)) {
Serial.println("Connected to server");
// Verzend de gegevens naar de server
client.print("GET /update?windsnelheid=");
client.print(currentWindsnelheid);
client.print("&rpm=");
client.print(averageRpm);
client.println(" HTTP/1.1");
client.println("Host: voorbeeldserver.com");
client.println("Connection: close");
client.println();
client.stop();
Serial.println("Data sent to server");
} else {
Serial.println("Failed to connect to server");
}

delay(2000);
}

Tip altijd welkome!

Vorige

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: asexiesuxjaox en 23 gasten