Hallo Allerseits, bin neu hier. Ich hab mir mal den ATmega328 zugelegt mit EthernetShield SD. Ich hatte vor mit drei LM35 CZ die Temperaturen auf einer Website anzuzeigen. Dies habe ich auch geschafft. Dazu sollte der Durchschnitt von den 3 Temperaturen ausgerechnet werden (eig. ganz easy). Dieser Durchschnitt soll die Farbe in einer Spalte farblich anzeigen. Das heißt wenn z.B die Durchschnitsstemperatur zu hoch ist soll die Spalte Rot sein und einen gewissen Text anzeigen. Da gehts auch schon los, ich habe es nicht auf die Reihe bekommen. In der Spalte wo die Temperaturen und die Auslastung der Lüfter in % angezeigt werden, soll später noch die Lüfterauslastung angezeigt werden. Das mach ich mit Hilfe des PWM Wertes und der PWM soll dann die drei MOSFET's IRLZ34N modulieren. Dann soll damit je Mosfet ein 12V Gehäuselüfter gesteuert werden. An diese ?Rücklaufdiode? habe ich auch gedacht. Wenn der Temperaturdurchschnitt "ROT" ist, sollen alle Lüfter 100% Leistung geben. Wenn "Gelb" dann sollen sie nur ca. 50% Leistung bekommen. Bei Grün nur 25%. das eigentliche Problem was ich jetzt habe ist halt diese Ampel unten links. Könnt ihr mir vielleicht dabei helfen??? Wäre echt nett. Ich hab hier mal den Quellcode von dem was ich bis jetzt geschafft habe. Sry, aber die Datei bekomm ich nicht angehangen ist txt und passieren tut nix. Habs jetzt bei Rapidshare hochgeladen. :D http://rapidshare.com/files/446801462/Neues_Textdokument.txt
>bin neu hier.
Jo, merkt man.
Warum musst Du 3kB Source bei Rapidshare hosten?
Das geht auch hier, als Anhang.
Mike schrieb: >>bin neu hier. > > Jo, merkt man. > Warum musst Du 3kB Source bei Rapidshare hosten? > Das geht auch hier, als Anhang. Nein geht es leider nicht, ich weiß auch net :D
Florian Wefel schrieb: > Mike schrieb: >>>bin neu hier. >> >> Jo, merkt man. >> Warum musst Du 3kB Source bei Rapidshare hosten? >> Das geht auch hier, als Anhang. > > Nein geht es leider nicht, ich weiß auch net :D Doch geht.
Ein paar Anmerkungen zum Code 1. nachdem es C Code ist kann man den hier sehr gut darstellen lassen
1 | #include <SPI.h>
|
2 | #include <Ethernet.h>
|
3 | |
4 | int inPin = 3; // input pin 1 |
5 | int inPin2 = 4; // input pin 2 |
6 | int inPin3 = 5; // input pin 3 |
7 | float inValTotal; |
8 | int i; |
9 | int runs = 5; // Anzahl der Durchläufe |
10 | int waittime = 20; // ms zwischen Durchläufen |
11 | |
12 | byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; |
13 | byte ip[] = { 192, 168, 0, 12 }; |
14 | |
15 | Server server(80); |
16 | |
17 | void setup() |
18 | { |
19 | Ethernet.begin(mac, ip); |
20 | server.begin(); |
21 | } |
22 | |
23 | void loop() |
24 | { |
25 | Client client = server.available(); |
26 | if (client) { |
27 | server.println("HTTP/1.1 200 OK"); |
28 | server.println("Content-Type: text/html"); |
29 | server.println(); |
30 | server.print("<html><head>");
|
31 | server.print("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"); |
32 | server.print("<title>Sensorenüberwachung</title>"); |
33 | server.print("</head>");
|
34 | server.print("<body bgcolor='blue'>"); |
35 | server.print("<p> </p>"); |
36 | server.print("<table width='900' height='522' border='1' align='center'>"); |
37 | server.print("<tr>");
|
38 | server.print("<td width='192' height='289' scope='col' bgcolor='yellow'><p align='left'><u><strong>Temperaturen:</strong></u></p>"); |
39 | server.print("<align='left'>Gehäuse = "); |
40 | server.print(getTemperatur()); |
41 | server.print("°C");
|
42 | server.print("<p />"); |
43 | server.print("<align='left'>Festplatte = "); |
44 | server.print(getTemperatur2()); |
45 | server.print("°C");
|
46 | server.print("<p />"); |
47 | server.print("<align='left'>Grafikkarte = "); |
48 | server.print(getTemperatur3()); |
49 | server.print("°C");
|
50 | server.print("<p />"); |
51 | server.print("<p align='left'><strong><u>Geschwindigkeiten:</u></strong></p>"); |
52 | server.print("<p align='left'>Lüfter "1" = xxx %</p>"); |
53 | server.print("<p align='left'>Lüfter "2" = xxx %</p>"); |
54 | server.print("<p align='left'>Lüfter "3" = xxx %</p></td>"); |
55 | server.print("<td width='692' scope='col' bgcolor='lightgreen'><h1 align='center'><strong>Sensorenüberwachung via Arduino©</strong></h1>"); |
56 | server.print("<hr /></td></tr><tr>"); |
57 | server.print("<th scope='row' bgcolor='red'><p align='center'>ROT = Temperatur zu hoch</p>"); |
58 | server.print("<p align='center'>GELB = Normal (beanspruchende Anwendung)</p>"); |
59 | server.print("<p align='center'>GRÃœN = Optimal (Standbybetrieb)</p></th>"); |
60 | server.print("<td bgcolor='lightblue'><p><strong><u>INFO:</u></strong></p>"); |
61 | server.print("<p>Bei Rot: Überprüfen Sie die Lüfter ob sie verstaubt sind oder ggf. funktionieren</p>"); |
62 | server.print("<p>Bei Gelb: Normal soweit eine auslastende Anwendung gestartet ist.<br />"); |
63 | server.print("Sollte keine beanspruchende Anwendung gestartet sein,<br />"); |
64 | server.print("verringern Sie ggf. die Raumtemperatur oder beenden ggf. auslastende Anwendungen</p>");
|
65 | server.print("<p>Bei Grün: Alles Optimal gekühlt / keine Fehler</p></td>"); |
66 | server.print("</tr></table>");
|
67 | server.print("<p align='center'><em>by Sven Kern und Florian Wefel</em></p>"); |
68 | server.print("<meta http-equiv='refresh' content='5'>"); |
69 | server.print("</body></html>");
|
70 | delay(10); |
71 | client.stop(); |
72 | } |
73 | } |
74 | float getTemperatur() { |
75 | |
76 | inValTotal = 0; |
77 | for(i = 0;i<runs;i++){ |
78 | inValTotal = inValTotal + analogRead(inPin); |
79 | delay(waittime); |
80 | }
|
81 | |
82 | inValTotal = inValTotal / runs / 2; |
83 | return(inValTotal); |
84 | }
|
85 | float getTemperatur2() { |
86 | |
87 | inValTotal = 0; |
88 | for(i = 0;i<runs;i++){ |
89 | inValTotal = inValTotal + analogRead(inPin2); |
90 | delay(waittime); |
91 | }
|
92 | |
93 | inValTotal = inValTotal / runs / 2; |
94 | return(inValTotal); |
95 | }
|
96 | float getTemperatur3() { |
97 | |
98 | inValTotal = 0; |
99 | for(i = 0;i<runs;i++){ |
100 | inValTotal = inValTotal + analogRead(inPin3); |
101 | delay(waittime); |
102 | }
|
103 | |
104 | inValTotal = inValTotal / runs / 2; |
105 | return(inValTotal); |
106 | }
|
2. Wo genau ist deine void main() ? 3. Wo genau ist deine Endlossschleife ? 4. Funktioniert der MEGA überhaupts ? (lass mal ne LED blinken, etc), stimmmen die Taktquelleneinstellungen, Fuses 5. Wie sieht es mit der Hardware aus ? Da alles richtig ? Schaltplan posten 6. Was für eine Umgebung ist das ? AVR-GCC, MicroC ? Zum Programmieren ungeeignete Späße (Arduino und schlimmere) ?
1. Wusste ich war nur meiner Meinung nach zu lang (Forenregeln) :D 2. Keine Ahnung wozu ich die brauch. 3. Die Seite aktuallisiert sich jede 5 Sekunden server.print("<meta http-equiv='refresh' content='5'>"); 4. OKAY???!!! 5. Ich kanns grad erklären, wenn es das ist was du wissen willst, weil ich find mein S-Plan nicht mehr. Der LM35 CZ bzw. die drei hab ich an Pin 3,4 und 5 (Analog Input)angeschlossen. Und die drei_ Mosfets sollen über _ein PWM-Pin gesteuert werden und über eine externe Stromversorgung, sollen die drei Lüfter versorgt werden. 6. Es ist ein Arduino Duemilanove (2009), sorry das ich das nicht gleich gesagt habe. Danke für die schnellen Antworten. Und Danke im Vorraus für alle weiteren. :D
Naja, dass es ein Arduino ist steht ja schon im Titel. Und lass dir jetzt bloß nicht einreden, dass der nur Schrott ist, zum Einstieg finde ich den sehr gut. Ich bin mir nur gerade nicht sicher, was dein genaues Problem ist. Ist es die Farbe auszurechnen, die Steuerung der Lüfter oder der Durchschnittswert? Grundsätzlich würde ich deinen Code umgestalten: - Speicher die Werte der Temperatursensoren in globalen Variablen - Lager die Ausgabe der Webseite in eine eigene Funktion aus, die diese Variablen nutzt - Schreib dir eine Funktion die anhand der Variablen die Lüfter steuert. In deiner loop() wird dann nur noch - Die Temperaturwerte aktualisiert - Die Webseitenfunktion aufgerufen - Die Lüfterfunktion aufgerufen Dazu solltest du vielleicht noch eine Art "Tragheit" simulieren, damit sich die Lüftergeschwindigkeit nicht zu häufig wechselt (z.B. 20% Grün, 20% - 30% bleibt bei grün oder gelb, 30%-60% gelb, 60% - 70% gelb oder rot, was immer es davor war 70% Rot) Ciao, Philip
Arduino ist cool! @umimbo: Die void loop ist beim Arduino die Mainloop! Mit freundlichen Grüßen, Valentin Buck
Danke "verwirrter Anfänger", für die schnelle Antwort :D Zu dem Titel :...Ja ich weiß schon nicht mehr was ich geschrieben habe. :D "Ja er soll den Durchschnitt von den Temperaturen berechnen und von diesem Durchschnitt die Farbe "wählen", auch der PWM- Wert, soll sich dem Durchschnitt anpassen." Insgesamt ist das mein problem :D Ich hoff du weißt was ich meine :D Kannst du mir bitte ein Bespiel geben, wie ich am einfachsten die Variablen mit den Temp.-Werten stopfe? Ich habs leider net so gut drauf mit C. Bei dieser Funktion, weiß ich z.B. nicht was dieses inValTotal ist. :D Meine Stärke ist da eher HTML, Javascript und ein bissl Java. Danke nochmals im Vorraus LG FLo
Ein bisschen Java ist doch gut. Geht schon mal in die richtige Richtung. Mal als Ansatz: 1. Du musst die Temperaturen alle speichern, um einen Mittelwert bilden zu können. 2. Wie man einen arithmetischen Mittelwert bildet, weißt du? 3. Die Auswahl löst du durch eine switch-case-Anweisung oder falls du es mit einfacheren Sachen machen willst durch verschachtelte if-Anweisungen. 4. Du brauchst eine Variable, in der dein aktueller Stand gespeichert wird. 5. Dann musst du nur noch diese Variable einlesen und regelmäßig mit den Punkten davor erneuern. Mit freundlichen Grüßen, Valentin Buck
Danke, danke, danke ich hab die "Ampel" hinbekommen. JUHUU Jetzt häng ich am PWM. Das PWM soll sich jetzt dem Durchschnitt anpassen, er soll aber auch in Prozent anzeigen, ob das PWM schnell oder langsam ist. Das ist sehr kompliziert. Ich hab gedacht das geht ungefähr so wie beim "Fade". Was sagt ihr? Hab nochmal das Update von der Überwachung angehangen und ein Screenshot von dem ganzen gemacht. Da wo die Makierung ist soll die Stärke des PWM-Signals angezeigt werden (25%, 50%, 75% und 100%) Bei 100% ist ja klar das der PWM-Variablenwert 255 betragen muss/sollte. Die Lüfter sollen alle gleich schnell laufen!!! :D Danke im Vorraus für weitere Antworten LG FLo
Kann mir den keiner helfen??? Ich weiß nicht weiter :-( LG Flo
Was ist sehr kompliziert? Hast du Probleme beim Prozentrechnen? Du stellst einfach keine vernünftigen Fragen.
Sorry, :D Also, aus dem Durchschnitt soll das PWM Signal gesteuert werden. Das heißt z.b bei 60°C, 255 (PWM wert) sollen 100% angezeigt werden. und bei z.b 30°C, 120 (PWM wert) sollen 50% angezeigt werden usw. Wie bekom ich das hin? Ich komm mit C nicht so klar. Etwa so?
1 | {
|
2 | if (average <= 40) |
3 | analogWrite(9, Pulse = 200); |
4 | server.print("75%"); |
5 | }
|
6 | delay(30); |
Alle Lüfter sollen mit einem PWM-Signal gesteuert werden über Mosfet's. Dabei sollen aber alle gelich schnell laufen, das heißt bei 30°C sollen alle 50% laufen. Die einzigsten werte die angezeigt werden sollen sind, 25%, 50%, 75% und 100% Danke im Vorraus LG FLo
Hmm also das hat ja nicht direkt mit uC zu tun, sondern ist eher Mathe Basics... Also wenn 60° und heisser 100% Lüfterdrehzal (255 PWM) entspricht: x / 0.6 = Lüfterdrehzal (z.B. 50° / 0.6 = 83.333%) -> kannst du ja auch so auf Website tun x * 255 / 60 = PWM Wert (z.B. 50° * 255 / 60 = 212.5) -> musst halt runden vorher if (x > 60) x = 60 wäre sinnvoll. So wäre der Lüfter erst bei 0° aus, ob das sinnvoll ist weiss ich nicht. Aber wenn er eh immer lüften muss gehts wohl. Viel Glück
Wenns unbedingt 25, 50 etc. sein muss: [auf]runden(Prozentwert / 25) * 25
Ich hab es so gemacht. LÄUFT :D Danke nochmal für eure Hilfe :D Ich wünsch euch noch viel Spaß. Ich hoffe ich helfe auch anderen mit dem Sourcecode :D LG FLo
Kleiner Tipp: Wenn du die Datei als *.c-Datei anhängst, kann man hier im Forum auch Quellcodeeinfärbung haben! Freut mich, dass du es geschafft hast! Mit freundlichen Grüßen, Valentin Buck
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.