Show Posts
Pages: 1 ... 30 31 [32] 33 34 ... 70
466  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!
467  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.
468  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.
469  International / Deutsch / Re: Fehler gesucht on: January 04, 2014, 08:42:35 am
Woher bekommt die Variable x ihren wert?

Aber das kann nicht funktionieren.
x wird nie verändert (die Funktion count() wird nie aufgerufen)
als wird x1 immer gleich x2 sein. (Die besser Abfrage ist auch: "if (x1 == X2)"
Aber: du setzt die Ausgangs-PWM auf 0, springst ja aber im loop sofort wieder nach oben und schreibt wieder den PWM-Wert 150.

Ich denke, du meinst eher sowas:
Code:
void loop (){
  long x1=x;
  delay(1000);
  // ermittle x mit irgendwelchen Funktionen
  long x2=x;
  Serial.println(x2-x1);
  if (x2 == x1)  {    analogWrite(3,0);
  } else {            analogWrite(3,150);
  }
}
470  International / Deutsch / Re: Servo on: January 04, 2014, 02:49:04 am
Ganz verstehe ich das aber nicht. Ihr habt gesagt, dass die 5V vom arduino nicht ausreichen (was ich euch ja auch glaube) , aber mit 4,5 Volt funktioniert es.

Jurs hat es in der ersten Antwort bereits auf den Punkt gebracht:
Dein Servo zieht vermutlich viel zu viel Strom als dass Du diesen hohen Strom überhaupt am 5V Pin des Boards entnehmen darfst.

Servos brauchen ein Einschalten oder Anlaufen sehr kurz einen sehr grossen Strom.
Die USB-Schnittstelle deines Laptops kann diesen hohen Strompuls nicht liefern => die 5V brechen zusammen => der Arduino bekommt einen Reset und startet neu.
Nach dem Neustart wird wieder das Servo angesteuert, die 5V brechen zusammen, und so weiter und so weiter.

Das hast du mit der 4,5V Batterie umgangen. Es mag sein, dass die auch kurz zusammenbricht beim Anlaufen, aber der Arduino ist davon unberührt. Drum funktionierts jetzt.
471  International / Deutsch / Re: Frequenz messen on: January 03, 2014, 09:17:10 am
Ich glaube nicht, dass man hier grossen Aufwand treiben muß. Letztlich ist es eine Frage der gewünschten Genauigkeit, die erzielt werden soll.
Aber ich gebe dir recht, Digitaltechnik fällt den meisten leichter als Analoge.
472  International / Deutsch / Re: Frequenz messen on: January 03, 2014, 03:06:46 am
Letzlich willst du ja keine Frequenz messen.

Sondern einen Schaltpunkt in Abhänging von der Bodenfeuchte haben.
Es macht also meiner Meinung nach keinen Sinn, ein Gerät zu bauen, dass dann Frequenzen im Bereich von 20Hz bis 2MHz hochgenau messen kann, um daraus später einen Gießzeitpunkt abzuleiten.

Wenn du gerade schon ein Frequenzmessgerät hast, dann messe doch erst mal, welche Frequnzen dein Sensor im interessanten Feuchtebereich abgibt. Dann kannst du deine Bemühungen daraufhin optimieren.

Ich denke, dass die Genauigkeit dieser Sensoren sowieso nicht besonders gut ist. Meiner Meinung nach reicht hier eine analoge Auswertung völlig aus. (und ich denke, der Zeitpunkt wann gegossen wird, muß auch nicht aufs letzte µg H2O/cm³ Erde genau sein müssen)

Was nicht heißen will, das der Weg des Frequenzzähler keinen Spaß macht und nicht zum Erfolg führt. Aber etwas overengineered ist das schon.
473  International / Deutsch / Re: Unterprogramme wie? on: December 30, 2013, 11:41:31 am
Übrigens klasse Beispiel zum debuggen... Ich hab heut mehr gelernt, als aus 3 Büchern zusammen...

Na, dann hat sich das ja schon gelohnt...   smiley

Aber zu deinem Problem: bei mir funktioniert das:
Code:
const int volt_i[5] = { A0, A1, A2, A3, A4};

void aktuator (int _up, int _dw, int volt_s, int kanal){
  int volt = map(analogRead(volt_i[kanal]) , 0, 1023, 0, 255);
}
void setup() {
  Serial.begin(57600);
  aktuator(1,2,3,0);
} // end setup

void loop() {}
vielleicht hast du ja woander einen Bug im Code?

Probier doch auch mal die kritischen Codeteile mal in einen extra Sketch zu kopieren, ob der Code an sich funktioniert.

Sorry, aber du mußt jetzt ohne mich weitermachen, ich muß weg.
Viel Glück!

Gunther
474  International / Deutsch / Re: Vorwiderstand ausgerechnet. bitte um Kontrolle! on: December 30, 2013, 11:09:54 am
Die Dioden D8-D11 sind meiner Meinung nach überflüssig.

Für die Lüfter (K7 und K11) solltest du auf alle Fälle Freilaufdioden vorsehen.

Und ich würde deiner Servoversorgung noch einen Elko spendieren.

Ansonsten finde ich, sieht deine Schaltung recht gut aus!
475  International / Deutsch / Re: Unterprogramme wie? on: December 30, 2013, 10:58:12 am
zunächst fällt mir auf, dass du verschiedene "volt_i" verwendest,
da solltest du aufpassen, das führt ganz schnell zu bösen Fehlern!

Bei mir führt dieser Sketch:
Code:
const int volt_i[5] = { A0, A1, A2, A3, A4};
void setup() {
  Serial.begin(57600);
  Serial.print("Kanal:         ");
  for (int i=0; i<5;i++){    Serial.print(i);    Serial.print(char(9));  }
  Serial.println();
  Serial.print("AD_pin:       ");
  for (int i=0; i<5;i++){    Serial.print(volt_i[i]);    Serial.print(char(9));  }
  Serial.println();
  Serial.print("AD Wert:      ");
  for (int i=0; i<5;i++){    Serial.print(analogRead(volt_i[i]));    Serial.print(char(9));  }
} // end setup
void loop() {}

zu dieser Ausgabe:
Code:
Kanal:         0 1 2 3 4
AD_pin:       54 55 56 57 58
AD Wert:      389 400 361 333 315

Offensichtlich übersetzt die Arduino IDE den String "A0" in die Pinnummer "54".

Es funktioniert jedenfalls.
476  International / Deutsch / Re: Unterprogramme wie? on: December 30, 2013, 07:59:02 am
An der Stelle noch eine total blöde Frage, die mich da plagt. Woher weiß der Compiler in dem Fall, was es ist: Denn beides sieht ja gleich aus: Einmal sind es Werte, die sich ja änderen im Loop, einmal sind es Pins...
 Wenn jetzt mein volt_s[2] ={22, 23} sein soll, woher weiß er dann, dass ich keinen Pin meine sondern einen Wert meine?? Oder check er das dann, wenn man die Pinmode zuordung macht, und es ist dann eindeutig?

Code:
int SW_up[5] = {22,24,26,28,30};
int volt_s[5] = {180,180,180,180,180};
Dem compiler ist es völig wurschd, was du meinst.

Es werden einfach in einem Array Zahlen gespeichert. Wofür du die verwendest, ist dir überlassen.

Ganz anders ist der Befehl: "Pinmode()".
Dieser Befehl verlangt eine Pinnummer. Wenn du also hier eine Zahl reinschreibst, dann ist eine bleibige Zahl, die vorher in einer Variable gespeichert wurde, eine Pinnummer.

Sauberer ist es, wenn du die Pinnummer-arrays gleich als Konstante definierst:
Code:
const int SW_up[5] = {22,24,26,28,30};
Dann kannst du nicht aus versehen im Programm überschreiben.

Ich nehme mal  [ b ] und [ / b ] hier sollten nur die Zahl dick machen und haben im code kein Bedeutung?
Code:
int error = volt_s[b][2][/b] - volt_i1 ;
ja, sorry, Klickfehler von mir.

Ach ja, eine Frage noch:
Was sind die Vor, bzw Nachteile, dass die Taster abwechlend bei jedem Loop abgefragt werden und nicht alle gleichzeitig.... Es kann ja auch mal sein, dass man 2 oder mehr gleichzeitig drückt. Hat vermutlich keine großen Einfluß auf das gleichmäßige Verfahren, der Akts?
Das ist letztlich eine Philosophie-Frage und was du letztlich machen willst.

die vielen Serial.print in den Tasterabfragen kosten sehr viel Zeit, deshalb erschien es mir sinniger, sie nacheinander abzufragen.
Tastendrücken ist im Vergleich zu SW-Laufzeiten meist recht langsam.
Wenn es deine Funktionen aber verlangen, gleichzeitig gedrückte Tasten abzufragen, dann solltest du alle abfragen.

Es ist keine klare technische Präferenz, eher die Frage, wie möchte ich, dass das System auf Eingaben reagiert.

(Es wäre auch kein Schaden, die Baudrate für der Seriellen Monitor auf 115200 oder 57600baud zu erhöhen)
477  International / Deutsch / Re: Transistoren Sammlung- Vorwiderstände??????? on: December 30, 2013, 06:43:56 am
Ich möchte mit den Transistoren nichts verstärken, sondern nur als normale "Schalter" verwenden, um vielleicht mehrere LED´s oder 12V Motoren schalten( ohne Motortreiber , H-Brücke) oder 12V Magnetvetile steuern. PWM wäre vielleicht nicht schlecht.

Nimm den IRLZ 44N. Mit dem kannst du alles machen, das ist ein sehr universelles Arbeitspferd!
Bis 60V/7A kannst du damit alles ohne Kühlkörper schalten und es reicht, wie du schon geschrieben hast, ein Vorwiderstand von 150 Ohm bis 10kOhm. (bei PWM-Betrieb besser kleine Vorwiderstände)
478  International / Deutsch / Re: Unterprogramme wie? on: December 30, 2013, 06:35:29 am
Unsere Posts haben sich überschnitten.

Nach ausführlichen Test weiß ich jetzt, dass

Code:
pinMode(SW_up[5], INPUT);
  digitalWrite(SW_up[5], HIGH);
 
  pinMode(SW_dw[5], INPUT);
  digitalWrite(SW_dw[5], HIGH);  // <-- ist das dann so möglich, bzw Richtig?


so nicht geht...

Das kann auch nicht gehen, weil "SW_up[5]" nicht definiert ist.

mit "int SW_up[5]" hast du ein Array definiert mit 5 Plätzen, die von 0 -4  durchnummeriert werden.
479  International / Deutsch / Re: Unterprogramme wie? on: December 30, 2013, 06:26:38 am

Dazu ein paar Fragen zum Verständnis:

- bei der Initalisierung der Pins:
Code:
int SW_up[5] = {22,24,26,28,30};  // <-- So kann man auch die Pins intitalisieren? Also das sind jetzt keine Werte sondern Pins? Das sind doch jetzt einfach Werte im Array.   (Ich benutzde das MEGA)
Richtig erkannt, das sind jetzt einfach nur Werte im Array, mit denen du dann die Pins initialisieren kannst.
- Pinmodes (Das muss ich ja auch anderes schreiben):

Code:


 pinMode(SW_up[5], INPUT);
  digitalWrite(SW_up[5], HIGH);
  
  pinMode(SW_dw[5], INPUT);
  digitalWrite(SW_dw[5], HIGH);  // <-- ist das dann so möglich, bzw Richtig?

ist richtig, du kannst aber auch schreiben:
Code:
for (int i=0; i<5;i++){
  pinMode(SW_up[i],  INPUT_PULLUP);
  pinMode(SW_dw[i],  INPUT_PULLUP);
}
-Startwert:
Wie setze ich, dass alles  volt_s[5] = 180  sind? Weil = {180, 180, 180,180, 180} geht nicht in void setup(), da macht er einen Fehler.
Am besten gleich bei der initialisierung:
anstatt
Code:
int volt_s[5] = {0,0,0,0,0};
schreibst du
Code:
int volt_s[5] = {180,180,180,180,180};

Wenn du im laufenden Program Werte zuweisen willst, mußt du das einzeln machen:
Code:
volt_s[0] = 180;
volt_s[1] = 180;
volt_s[2] = 180;
volt_s[3] = 180;
volt_s[4] = 180;  // Achtung! 5 Elemente im Array bedeuten Zählen von 0-4!

oder, eleganter:
for (int i=0; i<5;i++) volt_s[i] = 180;

- Wenn ich dann z.b den 3 Wert später weiter verwenden will, z.b hier:
Code:
int error = volt_s[1] - volt_i1 ;
ist das so korrekt?
Wenn du den 3.Wert willst, dann mußt du schreiben
Code:
int error = volt_s[b][2][/b] - volt_i1 ;

Last but not least, bei meinem Code hat er nur auf serial geschrieben, wenn ich den Taster gedrückt HALTE, jetzt macht ers die ganze Zeit.... Warum weiß ich auch nicht.

Ohne den ganzen Code zu kennen, ist das schwierig.
Sind denn alle Taster auf HIGH?

Da kannst du z.B. so prüfen:
Code:
Serial.println("Taster Stati");
Serial.print("Kanal:         ");
for (int i=0; i<5;i++){
  Serial.print(i);
  Serial.print(char(9));
}

Serial.println();
Serial.print("Taster up:     ");
for (int i=0; i<5;i++){
  Serial.print(digitalRead(SW_up[i]));
  Serial.print(char(9));
}
Serial.println();
Serial.print("Taster down:   ");
for (int i=0; i<5;i++){
  Serial.print(digitalRead(SW_dw[i]));
  Serial.print(char(9));
}
Serial.println();
}
480  International / Deutsch / Re: Projekt: Kapazitiver LED Touch-Dimmer on: December 29, 2013, 09:50:20 am
Ist die Platine selbst gemacht ?
jepp!
tonertransfer methode.
funktioniert hervorragend für einfach und nicht zu feingliedrige Leiterplatten.
Und obendrauf einfach ein bedruckten Papier kleben als Bestückungsdruck.
Pages: 1 ... 30 31 [32] 33 34 ... 70