Show Posts
Pages: 1 ... 30 31 [32] 33 34 ... 71
466  International / Deutsch / Re: Tabs im Arduino Projekt für Übersichtlichkeit, wie? on: January 06, 2014, 07:23:13 am
Erstmal danke für die schnelle Antwort!

Habe in meinem "Hauptsketch" eine Variable "int schaltwert = 0;" definiert
Die Variable wurde noch vor void setup() deklariert.
Müsste doch dann normal global verfügbar sein oder was mache ich falsch?
Kann Sie in meinem Tab nicht abrufen, der Compiler meckert wenn ichs übersetzen möchte...
Die sollte global bekannt sein ab der Stelle an der sie deklarierte wurde
steht der Tab, in dem die variable deklariert wurde links von dem, in dem sie verwendet wird?

Ansonsten gebe ich Uwe recht:
alle Sketche bitte.
Grüße Uwe
Mit mehr Informationen spart man sich das Kaffeesatzlesen.
467  International / Deutsch / Re: Arduino und Stromausfall on: January 06, 2014, 07:07:31 am
ok, da hast du recht, mit Zellen wechslen funktioniert das.

Weißt du, wie das mit dem Löschen des EEProms funktioniert?
Wird beim EEPROM.write() nur diese einzelne Zelle gelöscht? oft kann ein Flash (das interne EEPorm ist ja eine Simulation im Flash) ja nur Blockweise gelöscht werden.
468  International / Deutsch / Re: Arduino und Stromausfall on: January 06, 2014, 06:32:05 am
Oder schreibst alle meßpunkte ins EEprom und dann einmal pro tag in die SD-Karte.
Grüße Uwe
Weil das interne EEProm nur 100.000 Schreibzyklen garantiert.
Wenn er jede Minute Schreibt, hat er das in 70 Tagen erreicht.
469  International / Deutsch / Re: Tabs im Arduino Projekt für Übersichtlichkeit, wie? on: January 06, 2014, 06:19:35 am
du mußt einfach nur in dem Verzeichnis, in dem dein Scetch liegt, eine zweite (dritte, vierte...) Datei anlegen mit einem anderen, beliebigen Namen.

so, z.B.:

wenn du dann das Projekt "mein_Projekt_01.ino" öffnest, macht die Arduino IDE die anderen Dateien automatisch als Tabs auf:

Achtung:
die Dateien werden in alphabetischer Reihenfolge geöffnet. Deshalb beginnen meine Tab-Dateien immer mit x.

Das Schöne: Wenn du deinen Sketch unter einem Anderen Namen abspeicherst (z.B. "mein_Projekt_02.ino") werden die Tab-dateien automatisch in den neuen Ordner "mein_Projekt_02" mit abgespeichert.

Abgearbeitet werden die Tabs vom Compiler so wie wenn alles in einer Datei stehen würde.
globale Variablen und Funktionen sind in allen Tabs bekannt.
Die Tabs werden von links nach rechts abgearbeitet.
die Variablendeklarationen sollten also im ersten Tab stehen.
470  International / Deutsch / Re: Grundsätzliche Frage zur Berechnung von Funktionsvorschriften on: January 06, 2014, 05:59:17 am
Ah, ok.
Mit diesem Hintergrund ist die Glockenfunktion aber ein mathematischer Overkill.
Es bietet sich natürlich eine sinusfunktion an. Schliesslich handelt es sich beim Sonnenumlauf um einen Kreis.

Aber mach dir einfach eine Tabelle mit Stützstellen, zwischen denen linear interpoliert wird.
Das ist viel einfacher und du kannst beliebige Kurvenformen darstellen.

In dem Beispiel ist die Tabelle für die Kurve "Sinus":
Code:
min pwm
0 5
360 10
400 18
440 39
520 111
600 194
640 226
680 248
720 255
760 248
800 226
840 194
920 111
1000 39
1040 18
1080 10
1439 5

und für die Kurve "breiter":
Code:
min pwm
0 5
360 10
380 18
410 39
460 111
540 194
580 226
640 248
720 255
800 248
860 226
900 194
980 111
1030 39
1060 18
1080 10
1439 5

Du siehst, du kannst hier beliebige Kurven basteln.
Streng genommen könntest du dir sogar die halbe Tabelle sparen, da symetrisch.


471  International / Deutsch / Re: Formel on: January 06, 2014, 05:12:49 am
Hallo Gunther,
mensch wie Ihr das so macht 
eigentlich ganz einfach: die Werttabelle ins Excel kopieren und erstmal den grafen ansehen.
wenn man ein wenig mathematische Erfahrung hat, dann kann man oft schon einen Grundtypen erkennen: quadratisch, exponentiell etc.
Da die meisten Messwerte ja auf irgendwelchen physikalischen Effekten beruhen sind das meist eher einfache Funktionen.
In deinem Fall erkennt man einen Teil einer liegenden Parabel. Der Rest ist einfach, wenn man ein wenig Mathe kann.

Wenn man jetzt sagt das Es bei 200km/h passen soll und die darüber verschiebt ................. geht das ??????

Verstehe  ich das so richtig: der Wert bei 200km/h soll exakt stimmen?
Da mußt du an der Formel selbst nichts ändern, nur den Wert x_fakt anpassen.

Das geht am besten in Excel.
Du suchst dir den Wert, von dem möchtest dass er genau die 200 hat, in dem Falle die Zelle C29, markierst sie, gehst auf Zielwertsuche (im Menue Extras in der 2003er Version) gibt dort als Zielwert 200 ein und als veränderliche Zelle die Zelle in der der Wert von x_fakt steht (C3).
Und schon berechnet dir Excel die Kurve so, dass der Wert 200 exact stimmt.


472  International / Deutsch / Re: Arduino und Stromausfall on: January 05, 2014, 10:09:10 am
Warum schreibst du nichtmal pro stunde ins interen EERpom?

Dann verlierst du maximal 1h pro Stromausfall und mit einmal pro Stunde schreiben hält das EEProm mindestens 10 jahre.
473  International / Deutsch / Re: Formel on: January 05, 2014, 09:31:09 am
das sieht nach einer Wurzel-funktion aus.

Hilfreich ist dabei immer sehr der Nullpunkt. Ich habe ihn mal grafisch auf RAW =247 ermittelt.

Daraus ergibt sich dann diese Formel:
Code:
const int Raw_Null = 247;
const int  x_fakt = 9;
double v  = square (RAW-Raw_Null)*double(x_fakt);

Die Übereinstimmung mit deinen Messwerten ist recht gut:

lediglich im mittleren Bereich ist eine Abweichung von bis zu 6km/h zu sehen.

Grüße

Gunther

474  International / Deutsch / Re: Grundsätzliche Frage zur Berechnung von Funktionsvorschriften on: January 05, 2014, 07:43:58 am
Ich denke, der Arduino mit seinen 4-byte float wird hier Grundsätzlich Schwierigkeiten haben.
Selbst im Excel sind ja schon abweichungen zu sehen.

Generell sieht mir das aber eher nach einer Glockenkurve aus als nach einer polinomischen, also y = exp(-x²)
wobei du x natürlich normieren mußt und y dann auch.

wenn also dein  x von 0 bis 1440 läuft, und wir definieren
b als Breite der Glockenkurve
m als den Mittelpunkt der Glockenkurve  und
h als die Höhe der Glockekurve
g grundhöhe der Kurve

dann gibt das die Formel:
y = exp(-1 *( (x - m)/b)²)*h+g

mit
b = 180
m = 720
h = 250
g = 5

gibt das eine ganz gut passende Kurve:


Es stellt sich aber doch die Frage, ob es nicht sinnvoller wäre eine Wertetabelle zu definieren und diese zwischen den Stützstellen linear zu interpolieren.
475  International / Deutsch / Re: Fehler gesucht on: January 05, 2014, 06:26:56 am
Das könnte natürlich an deiner Schaltung liegen.
Es sieht so aus, als wenn interrupts augelöst werden.

Ist der Eingang dann offen? Welche Lichtschranke?
Wie sieht die Schaltung aus?
Oft hilft ein Pullup oder Pulldown am Eingang (je nach Schaltung)
Pullup kriegst du auch mit:
Code:
pinMode(Lichtschranke,  INPUT_PULLUP);
476  International / Deutsch / Re: Frequenz messen on: January 05, 2014, 06:02:42 am
hey.
ich denke auch, dass es nicht auf jedes Hz ankommt. ich bin leider noch relativ unerfahren, was das programmieren angeht. die bewässerungsanlage soll ein werkstück innerhalb meines studiums werden.
ich verstehe zwar, wie du vorgehen würdest, weiß aber nicht, wie ich es umsetzen könnte. wie kann ich die tief- bzw hochpässe erhalten? was brauch ich dazu?

liebe grüße
marijan

Ein Tief- oder Hochpass besteht im einfachsten Fall jeweils aus einem Widerstand und einem Kondensator.
Was die Sache hier noch etwas komplizierter macht, dass der Arduino ja nur Gleichspannung messen kann, wir also eine Gleichrichtung brauchen, zusätzlich aber die Spannung recht klein ist.

Mein Vorschlag für einen Tiefpass  wäre der hier:

Damit solltest du im Frequenzbereich von 100kHz bis ca. 10Mhz was brauchbaren einstellen können.
Was studierst du denn?
477  International / Deutsch / Re: Fehler gesucht on: January 05, 2014, 05:09:49 am
Solange du als ersten Befehl in der Loop "  analogWrite(3,150);" stehen hast wird der Motor immer laufen.
Warum?
Weil die Loop immer im Kreis läuft, wie der Name schon sagt.
Selbst wenn du also in der IF abfrage den Motor abschaltest, wird wenige µs später wieder der Eingangsbefehl "analogWrite(3,150);" ausgeführt und der Motor läuft weiter. Und die paar µs, die abgeschaltet wird, merkst du nicht.

Probiers doch mal so:
Code:
void loop (){
  x = 0;
  delay(1000);
  noInterrupts();
  if (x > 0)  {
    analogWrite(3,150);
                  Serial.print("Drehzahl erkannt.  x = ");
                  Serial.println(x)
  } else {  
    analogWrite(3,0);  
                  Serial.println("  keine Drehzahl,  x =");
                  Serial.println(x)
  }
  interrupts();
}
warum? Ich habe die serielle Ausgabe in die IF-Abfrage gelegt, damit du auch siehst, in welchen Zweig das Programm durchläuft.
ich habe x1 und x2 abgeschafft, die brauchts nicht. dafür werden vor der Abfrage die Interrupts abgeschalten, damit sich bis zur  Seriellen Ausgabe die Werte nicht ändern.

zum Thema millis() (ich denke du spielst auf das Beispiel Blinkwithoutdelay an?):
In diesem Beispiel wird nur gezeigt, wie du ohne delay eine Aktion nach einer Wartezeit ausführen kannst, ohne mit delay() alles zu blockieren. Ob diese Aktion das schalten einer LED ist, oder das setzen von PWM oder was auch immer ist egal.
das hat aber nichts mit deinem aktuellen Problem zu tun. Das ist der nächste schritt.
478  International / Deutsch / Re: kleines Schalt Netzteil gesucht. on: January 04, 2014, 09:28:05 am
Warum nimmst du keine Steckernetzteile?
zum beispiel Universal Ladegerät 5V 3A für Android Tablet PC.

Das hat einen gewaltigen Vorteil: Wenn du an dem von dir gebauten Gerät einen 230V Stecker dran hast, dann mußt du automatisch auch alle sicherheitsrelevanten Vorschriften beachten und bist ggf auch haftbar, wenn was passiert.

wenn du aber ein externes Netzteil hast, das für sich geprüft und freigegeben ist, und in deiner Uhr nur mit Kleinspannung arbeitest, bist du hier sauber!
479  International / Deutsch / Re: Fehler gesucht on: January 04, 2014, 09:21:35 am
du schreibst zweimal den Wert "0" als PWM.

du solltest wirklich, wie von Uwe und mir vorgeschlagen, die beiden analogWrite in einen if/ else packen, damit nur entweder das eine oder das andere geschrieben wird.

Die Anweisung " long x1=x=0;" geht so ja garnicht!

Wenn du x1 sowieso immer auf 0 setzt, dann spare dir x1  und x2 und frage nur ab auf
"if (x >0)", das reicht völlig.
480  International / Deutsch / Re: Stepper mit Knopf starten funktioniert nicht on: January 04, 2014, 08:53:17 am
Auch ich kenne mich mit der Steppermotor lib nicht aus, aber was mir auffällt:

im funktionierenden Beispiel hast du nach dem motor1.step befehl 20ms Pause, in der der Befehl abgearbeitet werden kann.
In deinem ersten Code wir der befehl motor1.step ständig aufgerufen, solange der Taster gedrückt wird.
Pages: 1 ... 30 31 [32] 33 34 ... 71