Vorstellung und erste Fragen zur Selbstabschaltung (Transistorschaltung)

Serenifly:
pinMode() ist eine ganz normale Funktion. Die kannst du nicht nur in setup() aufrufen

Genau.
Du kannst einen Pin auch im Sketch deklarieren, sogar mehrfach umdeklarieren.
Du könntest ihn also im Setup auf INPUT setzen, und dann im Sketch, da wo der Arduino abgeschaltet werden soll, auf OUTPUT und dann auf LOW setzen. Dann sollte der Arduino aus sein.

Falls das nicht funktionieren sollte, könnte ein Widerstand von ca. 1,5k von der Basis Q2 nach Masse helfen.

Oh man, so langsam verzweifle ich und denke ich hätte doch den blöden kippschalter einbauen. Aber jetzt habe ich (und ihr) schon viel Zeit auf die Schaltung verwendet. Ich habe die Schaltung von Gunther nachgebaut. Lese ich die Pläne richtig, dass der NPN im schaltplan andersrum als in der Skizze eingebaut ist? Ich habe auf jeden Fall beide Möflichkeiten durchgespielt. Leider nur mit mäßigem Erfolg. Schließe ich den Schalter startet der Arduino. Er geht jedoch nicht wieder aus und der Sound ist nur ein Knacken ca. im Sekundentakt. Ich überlege jetzt, ob die Software nicht zur Hardware passt. Aufbaufehler kann ich nicht ausschließen, aber sicherheitshalber habe ich sie drei Mal aufgebaut.
Ich füge noch einmal das aktuelle Programm an (hoffentlich direkt im richtigen Format). Findet jemand Ungerimtheiten?

/*
  Blink
  Wechselblinker (je 3x). Dauerschleife.
  Ton wechselt nachdem beide LEDs durchgelaufen sind.
 
  Ach ja, laüft mit Taster
 
 */
 
int led1 = 8;
int led2 = 9;
int speaker = 10;
int transe = 7;
int hiNote = 659;
int lowNote = 440;
int ledDelay = 60;
int tone_number = 0;
int loop_number = 0;
int zaehler;


void setup() {                
  // initialize the digital pin as an output.
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);        
  pinMode(speaker, OUTPUT);    
  pinMode (transe, INPUT);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite (speaker, LOW);
  digitalWrite(transe, LOW);
}


void loop() {
for(zaehler = 1; zaehler<10; zaehler++)

{
digitalWrite(led1, LOW);
delay(ledDelay);
digitalWrite(led2, HIGH);
delay(ledDelay);
digitalWrite(led2, LOW);
delay(ledDelay);
digitalWrite(led2, HIGH);
delay(ledDelay);
digitalWrite(led2, LOW);
delay(ledDelay);
digitalWrite(led2, HIGH);
delay(ledDelay);

digitalWrite(led2, LOW);
delay(ledDelay);
digitalWrite(led1, HIGH);
delay(ledDelay);
digitalWrite(led1, LOW);
delay(ledDelay);
digitalWrite(led1, HIGH);
delay(ledDelay);
digitalWrite(led1, LOW);
delay(ledDelay);
digitalWrite(led1, HIGH);

if (loop_number >= 1){
    loop_number = 0;
    changeTone();  
    }
  loop_number++;
}
  }

void changeTone()
{
  tone_number = !tone_number;
   if (tone_number) {
    tone(speaker, lowNote, 1000);
    } else {
    tone(speaker, hiNote, 1000);
  }
pinMode (transe, OUTPUT);
digitalWrite(transe, LOW); 
}

Edit sagt erst beim zweiten Versuch :slight_smile:

Ach ja, grundsätzlich läuft die schaltung bei mir ohne den zusätzlichen Widerstand und mit 2K Ohm. Bei 1K Ohm hatte ich probleme, dass nur eine LED flackert. 1,5K habe ich gerade nicht da.

pinMode (transe, INPUT);
digitalWrite(transe, LOW);

Einen Eingang mit LOW zu beschreiben, ist keine gute Idee.

pinMode (transe, OUTPUT);
digitalWrite(transe, LOW);

steht in changeTone(). Wo ist da die Zeit bis zum Abschalten definiert? Du darfst bei mir spicken :slight_smile:

Kompliment an Gunther: Deine Schaltung hat eine Selbsthaltung ohne Mithilfe des Arduino, weshalb die Wartezeit bis Ende Bootloader entfällt. Den Zustand hochohmig zu nutzen und mit LOW nur Auszuschalten, ist eine tolle Idee! 8)

Danke noch mal agmue und guntherb. Leider ist mir im Moment wohl noch nicht so richtig zu helfen. Ich habe heute meine gesamte Freizeit in dieses (vermeintliche Mini-)Projekt gesteckt und viel Hilfe bekommen. Aber ich habe eher meine Grenzen aufgezeigt bekommen. Schön zu wissen, dass hier schnelle Hilfe zu erwarten ist, aber ich sollte vielleicht mein Wissen zuerst erweitern. Ich probiere gegenwärtig viel rum, da sich mir viele Zusammenhänge nur teilweise erschließen und ich viele Befehle nicht kenne. Vielleicht lege ich die Selbstabschaltung vorerst zur Seite… Die Schaltpläne haben mir auf jden Fall neue Erkenntnisse beschert.
Wenn ich bei dem Projekt weiter bin, bzw. weiter mache melde ich mich auf jeden Fall!
Glück Auf,
Thomas

Mach doch zunächst nur die Selbstabschaltung mit einem einfachen Sketch. Wenns dann läuft, kombinierst du beide Sketche.

Gute Idee, für heute reicht es mir aber erstmal...
Weitermachen ist vielleich gut, der besagte Kippschalter würde mich jetzt auch jedes mal nerven wenn ich ihn sehe.

Morgen unter der Dusche kommt Dir die richtige Inspiration. Bis dahin gute Nacht :sleeping:

Es ist immer gut, komplexere Projekte in kleine Teilaufgaben zu splitten, und wenn alle Teile einzeln laufen, alles kombinieren. Spart auch unheimlich Zeit ein, wenn nicht jedes Mal das ganze Projekt kompiliert und hochgeladen werden muss, nur weil ich eine Zeile zum Testen geändert habe.

So kannst du auch Schritt für Schritt die delays rausprogrammieren.

agmue:
Kompliment an Gunther: Deine Schaltung hat eine Selbsthaltung ohne Mithilfe des Arduino, weshalb die Wartezeit bis Ende Bootloader entfällt. Den Zustand hochohmig zu nutzen und mit LOW nur Auszuschalten, ist eine tolle Idee! 8)

Ich habe das Ganze mit einem "nackten" Atmega 328 ohne Bootloader, nur mit gesetzten Fuses in einer Schaltung realisiert. Da stellt sich dieses Problem nicht :stuck_out_tongue:
Es langt übrigens ein einziger Startwiderstand, der Taster braucht nur C-E vom pnp Transistor überbrücken. Ich habe dem Taster sogar noch eine 2. Funktion zugewiesen. Kurzer Druck schaltet das Gerät ein, langer Druck beim Einschalten aktiviert die Hintergrundbeleuchtung es Displays. Dazu habe ich empirisch noch einen 4,7 Ohm Widerstand hinter den pnp eingeschleift. Am R sollen ca. 0,1V abfallen. Dann habe ich 2 Analogeingänge geopfert, die vor und hinter dem Widerstand die Spannung einlesen. Brückt der Taster Transistor und Widerstand, dann ist der Spannungsabfall theoretisch Null und die Analogspannungen liegen näher beieinander.

In mein Gehirn muß rein, daß ein Ausgang nicht nur HIGH und LOW, sondern auch hochohmig, also tristate sein kann.

Für ein Spielzeug wohl etwas übertrieben, geht das Schaltungsprinzip auch mit zwei Relais:
Selbsthaltung2.png

Muensterlaender:
Lese ich die Pläne richtig, dass der NPN im schaltplan andersrum als in der Skizze eingebaut ist?

Ich bitte vielmals um Entschuldigung, ich hatte tatsächlich in der Steckbrettskizze Transistoren mit dem falschen Pinning verwendet. jetzt sollte es passen.

guntherb:
Du kannst mit nur einem Transistor keine vernünftige Spannungsabschaltung machen.
Du brauchst einen PNP, der die Batterie schaltet, und einen zweiten (NPN) mit Massebezug, der die Logik übernimmt.

Hier der Schaltplan:
Ubatt-Schalter_mit_Selbsthaltung.jpg

Wenn der Taster gedrückt wird, wird Q2 bestromt, der dann Q1 durchsteuert, worauf VIN auf 9V steigt.
VIN wiederum hält nun über R4 Q2 leitend, der Taster kann wieder losgelassen werden. D7 bleibt auf INPUT.
Zum Abschalten wird D7 als OUTPUT deklariert und auf LOW gesetzt.

Und hier noch als Steckbrett, falls dir das Schaltplanlesen schwer fällt. Aber gewöhne dich an Schaltpläne, die sich besser zu lesen.
Ubatt-Schalter_mit_Selbsthaltung_Steckbrett.jpg

Liebe Community,
hier möchte ich meine Phoniebox verbessern., u.a. ist auch die Stromversorgung einfach blöd.
Gerne würde ich dies über Transistoren regeln, anstatt wie jetzt über Relais in der Selbsthaltung.
Die zitierte Schaltung wäre perfekt, ich weiß aber nicht wie ich diese an meine 5V und an die “Last” von etwa 0,3W + 3W Lautsprecher anpassen kann.
Andere Transistoren? andere Widerstände? Oder einfach nehmen wie gesehen?

Außerdem würde ich gerne den S1, der die Selbsthaltung startet auch später als Eingang im Arduino abfragen können. In meiner Relais- Selbsthaltung habe ich das über eine Diode geregelt.
Ist dies hier nicht möglich, wäre aber auch nicht tragisch.

Liebe Grüße
Stefan

Warum bleibst du mit deiner Frage nicht in deinem Thread ?
So wird alles zerissen, zumal keiner hier deinen ersten Thread kennt.

Und eine Transistorschaltung hatte ich dir doch schon gepostet.

Ich glaube, er will keine Antworten mehr :wink:

Gruß Tommy

Ok, gut dass ich es jetzt weis. :wink:

Die Schaltung von guntherb kann ruhig alle 4 Jahre mal wieder hochgepusht werden. 8)

Gibt zwar ähnliche Schaltungen (auch mit p-Channel MOSFET),
aber der Trick mit dem Pin, der erst zum Ausschalten auf OUTPUT, LOW gezogen wird, und also zum Halten des Einschaltens mit einem kurzen Tastendruck auskommt, ist schon erinnerungswürdig.

Hallo Dieter,
Ich hoffe es macht nicht den Eindruck als würde ich dich übergehen wollen.
Ich möchte auch nichts zerreißen, sondern hatte sogar die Ordnung im Sinn.
In meinen anderen Thread geht es um die ganze Kiste an sich, hier geht es nur um die Versorgung.
Ich dachte mir, dass dies hier deutlich näher an diesem Problem ist, genau gesagt bin ich wahrscheinlich nur ein paar Widerstandsgrößen entfernt.
Hier ist es nicht wichtig ob die Phoniebox mit einem nano und einem dfp läuft, sondern nur die Leistung die hinter dieser schaltung hier steckt. Deshalb sah ich kein Problem hier zu wechseln.

Deine vorgeschlagene schaltung habe ich schon im anderen Thread als für mich nicht machbar geschrieben, weil ich SMD nicht zusammen bekomme.

Hier gibt es eine Lösung die mir näher scheint, deshalb möchte ich das hier klären und im anderen Thread verlinken.

Außer es ist ausdrücklich nicht erwünscht, dann schreibe ich nochmal in meinem anderen Thread die selbe Frage.

Liebe Grüße