Beiträge von KaiR

    Machen wir hier noch ein bisschen "Alle meine Entchen..."



    Let the music play ;)

    Beschreibung zum tone() Befehl mit weiteren Beispielen:

    https://www.arduino.cc/referen…nctions/advanced-io/tone/

    https://www.arduino.cc/referen…tions/advanced-io/notone/

    Hier ist ein Beispiel mit Melodie. Es ist nicht von mir, es ist aus den Beispielen von der Arduino IDE Datei->Beispiele->02 Digital->toneMelody.


    Dort sind die Notendefinitionen in einem extra Headerfile. Hier habe ich sie in den C-Codefile kopiert. Also nicht von den vielen Definitionen erschrecken lassen:



    Das sollte erst mal langen, um Dich zu beschäftigen ;).


    Gruß Kai

    Also wenn wir mal simpel anfangen, nimmst Du Dir einen Buzzer:


    buzzer.jpg



    Den Buzzer verbindest Du mit einem Pol mit einem Pin des µControllers und mit dem anderen an GND. Besser ist es, noch einen 100Ω Widerstand in Reihe zu schalten. In dem Bild fehlt er.


    Dann schaltest Du den Pin für 1136µs an und für 1136µs aus ... das entspricht einer Periodendauer von 2272µs = 440Hz = dem Ton A.


    Und wenn Du das immer wiederholst mit einer Pause dazwischen, dann hast du einen sich wiederholenden Ton.


    Im folgenden Beispiel wird der Pin 8 (der Buzzer ist daran angeschlossen) 50mal für die oben genannte Zeitspanne an und ausgeschaltet.

    Damit wird für ca. 113ms der Ton A erzeugt. Dann wird eine Sekunde gewartet um anschließend wieder den Ton zu erzeugen.



    Das lässt sich mit der Arduino "tone()" Funktion noch schön erweitern, bzw. anders gestalten.


    Ja --- millis() kommt nicht vor. Es geht hier erst mal nur um das Prinzip. Das C4 hat z.B. eine Frequenz von 261,63Hz. Das lässt sich schlecht teilen, macht aber nix. Es gilt f = 1/p => p = 1/f also 1/261,63Hz = 3827µs Periodendauer. Das ergibt ein Delay von ≈ 2 x 1913µs. Wenn Du diesen Ton erzeugst, wird die Zeitperiode bei 50 Wiederholungen natürlich länger. Logisch... weil die Frequenz niedriger ist.


    Gruß Kai

    In den Artikeln werden doch zwei Funktionen vorgestellt. „writeEEPROM()“ und „readEEPROM()“. Damit kannst du den externen Speicher beschreiben bzw. lesen. Bei der Library musst Du Dir die ino Dateien in Examples mal anschauen.


    Gruß Kai

    Uiii.... schön zu gucken.


    Es sieht danach aus, als sei der Neodym Stab auch etwa 2cm. Hast du die zwei Magnete zusammengeklebt?!

    Hallo Pius,


    es ist sicher alles richtig was du schreibst. Mir geht es hier im Speziellen um den Mechanismus, den nische verwendet um das Pendel zu treiben.


    Wenn ich das richtig sehe, wird für das Pendel eine Luftspule (Also kein Eisenkern) benutzt. Am Pendel ist ein Metallstab und ein Magnet angebracht. Die Spule sorgt also dafür, dass der Magnet abgestoßen wird, wenn eine Spannung induziert wird. Bei nisches Beitrag sieht es so aus, als sei dort fast eine ganze Rolle verwendet worden (Luftspule -> mehr Wicklungen).


    Darum interessiert es mich, um wieviel Wicklungen es sich in etwa handelt.


    Gruß Kai

    Alles sehr interessant :). Du hattest am Anfang dieses Threads (Beitrag 12) mal auf meine Bitte hin deine Spulenkonstruktion gepostet. Ich habe mit das noch einmal angeschaut. Es sind ja jede Menge Windungen. Wie viele? Oder kommt das nicht so genau. Wie viele sind es ungefähr?


    Ich hab zwar einiges über Spulen gelernt... aber das in der Hauptsache nur theoretisch. Ich will mal anfangen in der Richtung praktisch zu experimentieren. Darum frage ich. Um ein Gefühl zu bekommen, wie viel Draht man für so ein Pendel braucht :). Auch wenn ich sicher ein paar Nummern kleiner Anfangen würde ;).


    Gruß Kai

    Also wenn Englisch kein Problem ist, kann man hier eigentlich so gut wie alles finden was man braucht:

    https://www.hobbytronics.co.uk/arduino-external-eeprom

    https://www.hobbytronics.co.uk/eeprom-page-write


    Der erste Link verweist auf einen Beitrag der Grundlagen und das Schreiben/Lesen von einzelnen Bytes erklärt. Der zweite erklärt, wie Daten blockweise und schneller schneller geschrieben und gelesen werden können.


    Leider ist das ganz nicht so extra simpel. Aber der dort vorgestellte Code ist gut verwendbar.


    Es gibt auch min. eine Library. Z.B. folgende:

    I2C_EEPROM von Rob Tillaart


    Gruß Kai

    nische: ja, ich werde versuchen den „Drehaufbau“ noch zu realisieren und dabei sicher auf die ein oder andere „Herausforderung“ stoßen. Es kann sich aber noch etwas hinziehen. Die Zeit dafür ist etwas knapp bemessen.


    Gruß Kai

    Hallo zusammen,


    war so lange ruhig hier.


    Heute habe ich mich mal wieder mit OP-Amps befasst und einen "Licht-" oder "Sonnenfolger" gebaut. Dabei werden die zwei Op-Amps (LM741) als "Fensterkomparatoren" verwendet. Dieser Begriff leitet sich davon ab, dass zwei Op-Amps das gleiche Ausgangspotential haben, solange eine Eingangsspannung innerhalb eines bestimmten Bereiches (Fenster) liegt. Über- oder unterschreitet die Eingangsspannung jedoch den Fensterbereich, so wird bei einem der beiden Op-Amps die Ausgangsspannung invertiert.


    Sonnenfolger.png


    In der vorgestellten Schaltung, sind die beiden LM741 mit zwei lichtempfindlichen Widerständen gekoppelt (LDRs). Die Ausgänge der Op-Amps sind wiederum mit einer Brückenschaltung für einen Gleichstrommotor verbunden. Werden zwei LDRs mit gleicher Lichtintensität bestrahlt, so haben sie einen mehr oder weniger gleichen Widerstand und der Motor steht still. Die Eingangsspannung liegt im Fensterbereich. An den Eingängen der beiden LM741 liegt etwa die halbe Betriebsspannung an und die Ausgänge sind negativ.


    Je nachdem, wohin das Licht wandert, ändert sich die Lichtintensität pro LDR. Deren Widerstandswerte ändern sich und damit auch die Eingangsspannung der Op-Amps. Ab einem bestimmten Wert "kippt" einer der Op-Amps. Seine Ausgangsspannung wird invertiert und somit positiv. In der Brückenschaltung werden entweder die Transistoren T1 und T4 oder T2 und T3 leitend. Entsprechend dreht sich der Motor in unterschiedliche Richtungen.


    Um das etwas mit Zahlen zu verdeutlichen (die Betriebsspannung beträgt 3V):


    AusgängeMotor StillstandRechtdrehungLinksdrehung
    unterer LDR dunkeloberer LDR dunkel
    Op-Amp1 (rechts)-0,729V-0,69V+2,24V
    Op-Amp2 (links)-0,728V+2,23V-0,69V

    Die Angaben oben/unten/links/rechst beziehen sich auf untenstehendes Foto.


    An dem 100K Poti erfolgt die Grundeinstellung. Sind beide LDRs gleichmäßig hell beleuchtet, kann die Ruhestellung des Motors darüber eingestellt werden. Mit dem zweiten 10K Poti wird die Empfindlichkeit der Schaltung reguliert.



    Auf dem Breadboard sieht die Schaltung wie folgt aus:


    370776A3-1070-4E79-B38D-410B9492C058.jpeg


    Die LDRs sind hier links auf dem Breadboard untergebracht. Der Motor wird mit seinen beiden Polen in der Brückenschaltung in den gleichen Reihen eingesteckt, in denen sich auch die gelben Steckbrücken und die Dioden befinden. Der besseren Übersicht wegen, habe ich ihn für das Foto aus der Schaltung herausgenommen. Falls sich jemand über die gelbe Steckbrücke am links oberen LDR wundert, ich habe die obere (+) Spannungsschiene des Breadboards für die Verbindung der LDRs mit jeweils einem "invertierenden" und einem "nicht invertieren" Eingang der Op-Amps benutzt. Die untere (+) Spannungsschiene führt die positive Spannung für die gesamte Schaltung . Die negative Spannung für die Op-Amps liegt auf der unteren (-) Reihe. Auf der oberen (-) Reihe liegt das Massepotential an.


    Die negative Spannung für die Op-Amps erzeuge ich mit einer, im Bild nicht sichtbaren, "Ladungspumpe":


    Neg-Spannung-Schmitt-Trigger.png



    Bei einem sinnvollen Aufbau, sollten die LDRs zusammen mit einer Solarzelle auf der Welle des Motors befestigt werden. Die Solarzelle würde dadurch mit der Sonne "mitwandern" und somit eine optimale Lichtausbeute haben. Weil ich die Schaltung aber erst einmal ausprobieren wollte, habe ich nur getestet ob der Motor sich dreht, wenn sich die Lichtverhältnisse ändern und ob er auch mal stehen bleibt, wenn beide LDRs gleich hell beleuchtet werden.



    Es hat geklappt :). Im folgenden Video kann sich das Prinzip anschauen.



    Die Schaltung ist aus dem Buch "Elektronik gar nicht schwer- Experimente mit Operationsverstärkern" von Kurt Diedrich entnommen.


    Gruß Kai

    Hallo zusammen,


    durch eine Frage einer Forenteilnehmerin bin ich wieder etwas zu dem Infrarot-Thema gekommen. Es ging darum eine IR-LED über einen Transistor anzusteuern. Das kann wie folgt gelöst werden:


    IR-LED1.png


    V2 stellt in diesem Fall den (Output) Pin eines µControllers z.B. vom Atmega328p (Nano / Uno) dar. Über diesen Pin wird der Transitor mit Hilfe eines 38kHz (phasenkorrekten) PWM Signals angesteuert. Der Transistor ist deshalb vorhanden, weil die IR-LED mit mehr als den Arduino verträglichen 20mA Strom betrieben werden soll.


    Das (Beispiel-) Signal womit die IR-LED angesteuert wird, sieht wie folgt aus:


    IR_Senden_Empfangen.PNG


    Im unteren Bereich des Oszillogramms sind die die Blöcke, die von 0 auf 5V moduliert werden, deutlich zu erkennen. Diese Blöcke bestehen aus dem 38kHz Signal. Keine Blöcke, kein PWM Signal. Die von der IR-Diode "abgestrahlten" Signale habe ich mit einem Empfänger (unten schon erwähnter TSOP31238) wieder "aufgefangen" und an dessen Signal-Pin das Oszi mit einem weiteren Kanal angeschlossen. Das Empfangssignal ist in der oberen Reihe abgebildet.


    Es ist deutlich zu erkennen, dass der Empfänger dieses Signal invertiert (Von 5V auf 0V). Sender HIGH wird zu Empfänger LOW und umgekehrt. Die "Breite" der Signale entspricht den PWM Blöcken und den Pausen. Man kann sich also relativ "simpel" durch eine PWM-Signalabfolge sein eigenes IR-Protokoll zusammenbauen. Was es für professionelle Codierungsmethoden gibt, lässt sich hier nachlesen "Mikrocontroller.net IRMP.


    Man erkennt auch einen winzigen Versatz zwischen dem Sende- und dem Empfangssignal:


    IR_Versatz.PNG


    Es handelt sich um etwa 194µs. Das schreibe ich mal der Verarbeitungsdauer des Empfängers zu.


    Folgenden Programmcode zum Ausprobieren habe ich verwendet (nur Codeerzeugung, nicht Dekodierung):



    Der Programm-Code ist nicht auf meinem Mist gewachsen. Ich habe mich des Codes von der sehr guten Seite Wolles Elektronikkiste und von Codeteilen der unten schon erwähnten IRremote Bibliothek von Rafi Khan bedient, in dessen Bibliothek wiederum Code von Ken Shirriff steckt. Ich habe die Teile bloß aus Neugierde etwas zusammengewürfelt um das Prinzip besser zu verstehen.


    Weitere, sehr gute Erklärungen sind, wie schon erwähnt, auf Seite Wolles Elektronikkiste zu finden. Das muss ich ja nicht nochmal aufschreiben.


    Viel Spaß beim herumprobieren.


    Gruß Kai

    Hallo zusammen,


    heute habe ich noch einmal etwas herumprobiert. Ich hatte ja geschrieben, dass man bei einem PNP Transistor möglicherweise eine etwas aufwändigere Schaltung braucht. Deswegen hatte ich mit Pius hinter den Kulissen noch etwas Schriftverkehr. Er sagte nämlich, dass ein Output-PIN der auf HIGH gesetzt ist, diesen Status auch im Sleepmode behält. Somit ist also auch eine einfache PNP Schaltung möglich.


    Ich habe es ausprobiert und wie immer hatte Pius recht ;).


    Allerdings hatte ich so meine Zweifel, wenn ich im Schlafmodus permanent einen PIN auf HIGH und somit auf Betriebsspannung halte, ob das nicht vielleicht doch mehr Strom verbraucht, als wenn er auf Massepotential liegt.


    Darum habe ich beide Varianten mit einem Arduino-Nano Clone aufgebaut. Das Programm aktiviert das Display, spielt eine Grafikdemo und schaltet anschließend das Display wieder aus, bevor der SleepMode aktiviert wird. Die verwendete Routine (Auszug) sieht wie folgt aus:



    SWITCH ist in diesem Fall der Pin D10 des Nano. Dieser ist mit der Basis des jeweiligen Transistors verbunden. Je nach verwendeten Transistor habe ich den PIN gegensätzlich geschaltet. Wie, sieht man an den Kommentaren im Quellcode.

    Mit einem Taster an einem Input-Pin wurde der Controller (per Interrupt) wieder aufgeweckt. Die Prozedur habe ich pro Schaltungsvariante fünf mal wiederholt und dabei den Maximalstrom und den Strom im Sleepmode gemessen. Wirklich interessant ist eigentlich nur der Stromverbrauch im Sleepmode. Das Maximum hängt stark von der Art der Displayausgabe ab. Ich führe es der Vollständigkeit halber aber mal mit auf:



    PNPSleepmode / mAMax / mA
    112,63647,273
    213,05051,518
    313,04451,447
    413,04651,517
    513,04351,410



    NPNSleepmode / mAMax / mA
    112,72451,427
    212,72251,403
    312,72051,415
    412,72051,521
    512,72051,416


    Der Minimalstrom ist beim Beginn des Sleep-Modes etwas geringer als in der Tabelle angegeben, steigt aber mit der Zeit ein kleines bisschen an, bis er sich einpendelt. Der Unterschied ist nicht sehr groß aber es ist ein leichter Vorteil bei der NPN-Schaltung zu erkennen. Bei den Werten handelt es sich um den Gesamtverbrauch der Schaltung.


    Warum die erste Messung beim PNP so aus der Reihe fällt kann ich nicht mit Gewissheit sagen, wahrscheinlich habe ich mich da mit der MIN/MAX Taste meines Multimeters etwas vertüddelt und es ist ein Messfehler.


    Wer sich jetzt fragt, warum der Nano im Sleep Mode noch so viel Strom verbraucht, dem sei gesagt, es brennt auch im Schlafmodus die Power-LED. Wenn man das nicht will, muss man sie auslöten. Außerdem haben diese "MCUs" nicht den sparsamsten Spannungswandler. Der verbrät einiges an Ruhestrom. Es ist auch sicher noch das ein oder andere am Schlafmodus optimierbar (z.B. AD-Wandler abschalten usw.). Ich denke aber, am Prinzip würde auch das nichts ändern.


    Wer es selber ausprobieren möchte, kann das Programm hier herunter laden: arduino-io.cpp.

    Für die Arduino IDE, muss die Datei von .cpp in .ino umbenannt werden.


    Gruß Kai

    Nicole:


    Ja... das mit R4 habe ich geschrieben und da hat sich auch nichts dran geändert. Der Plan ist aus einer Simulation entstanden. Deshalb ist das Display auch kein Display, sondern eine LED-Bar mit Vorwiderstand. Da meine Schulversion kein Spice Modell für OLEDs hat, habe ich mir so beholfen, um die grundsätzliche Funktionalität zu ermitteln. Darum ist R4 da noch drin.


    Ob die zweite Schaltung wirklich sparsamer ist, habe ich nicht ausprobiert. Kannst Du ja mal versuchen. Aber vielleicht fängst du erst mal mit dem NPN an und probierst, ob da alles reibungslos läuft.


    Gruß Kai

    Hallo zusammen,


    ich habe zumindest für die „Transistorengeschichte“ die Schaltungen noch einmal etwas „schön“ gemacht.

    Folgendes Bild zeigt beide Schaltungen, einmal mit einem NPN und einmal mit einem PNP-Transistor.

    Es ist jeweils noch ein 100kΩ Widerstand hinzugekommen. Bei der NPN Schaltung ist es ein Pull-Down Widerstand, der dafür sorgt, dass auf der Leitung vom, nennen wir ihn mal „SteuerPIN“ des μControllers, immer ein definierter Zustand herrscht (entweder LOW oder HIGH aber nix dazwischen, z.b. beim Start des Arduino).


    53994781-AC47-4B6F-A912-D2BC281D129A.png


    Bei der PNP Schaltung ist er als Pull-Up Widerstand eingesetzt. Simpel ausgedrückt, arbeitet die PNP Schaltung genau umgekehrt wie die NPN Schaltung. Und damit kommen wir zum kniffeligen. So wie im obigen Schaltplan angeschlossen, wird das Display angeschaltet, wenn der SteuerPIN des μControllers auf LOW geschaltet ist. Also arbeitet das Display auch, wenn der μController ausgeschaltet ist. Das ist aber nicht gewollt. Und damit komme ich zu Pius‘ Hinweis auf seine Würfelschaltung in Beitrag #17 dieses Threads.


    Bitte @Pius korrigiere mich, wenn ich hier jetzt falsche Schlüsse verbreite.


    Die Schaltung mit einem PNP-Transistor wird etwas komplizierter, weil die Basis des PNP über einen NPN- Transistor gesteuert werden muss. Dadurch wird das Display, wie gewünscht, ausgeschaltet, wenn der μController im Schlafmodus und damit auch der SteuerPIN auf LOW geschaltet ist. Das sähe dann so aus:


    CCB6617D-E445-42F1-998F-BD5777612FA7.png


    Bei dieser Schaltung wird der NPN-Transistor durchgeschaltet wenn der SteuerPIN auf HIGH geschaltet ist. Dadurch wird die Basis des PNP-Transistors auf Massepotential gebracht und er schaltet durch. Im umgekehrten Fall schließt der PNP-Transistor. Wir haben wieder das gewünschte Verhalten.


    Gruß Kai

    Ich habe meinen Test mit einem NPN BC547B gemacht. Mein Multimeter hat mir einen Ruhestrom (Display aus) von -0,002mA = -2µA angezeigt. Das ist so ein kleiner Wert, da weiß ich gar nicht so recht, wie ernst der zu nehmen ist. Das (-) hat mich etwas irritiert. Ich werde das bei Gelegenheit nochmal genauer untersuchen und mit Pius' Variante vergleichen.


    Und ja .. so wie Pius es beschrieben hat, ist auch geschaltet.


    Gruß Kai

    Eine Frage die sich gar nicht so einfach beantworten lässt. Ich weiß nicht in wie weit Micropython MQTT unterstützt. Wenn es eine Unterstützung für dieses Protokoll gibt, ist es vielleicht erst mal ein einfachsten eine public MQTT Broker zu verwenden und bestimmte Teile auf die eigene HP verlinken. Beispiel HiveMQ. Oder wenn Du auf dem Server beim Hoster selber Software installieren darfst ... nen eigenen Broker wie z.B. Mosquitto installieren, dann ist aber noch nichts visualisiert. Evtl. gibt es Plugins für das CMS das du nutzt, falls Du eine nutzt (Wordpress, Joomla oder sowas?).


    Ich weiß es nicht ... sind nur so Ideen.


    Gruß Kai

    Danke Pius für Dein geballtes Wissen :thumbup:. Auf jeden Fall würde ich, nach neueren Erkenntnissen, NICHT empfehlen das Display direkt an eine digitalen Pin des Arduino anzuschließen!!!!


    Ich bin gerade am Messen und hatte einen Maximalwert von 26,299 mA Stromverbrauch. Meistens liegt der Verbrauch unter 11mA aber eben nur meistens... je nach Grafikoperation geht es offenbar ganz schön nach oben (z.B. wenn die Display-Ausgabe invertiert wird -> weißer Hintergrund) und liegt damit weit über der Angabe, die in diversen Datenblättern zu finden ist.


    DABE407D-024D-4237-9564-D936944ECE64.jpeg



    Ergänzung:


    Nach nun recht vielen Versuchen kann ich keinen bemerkenswerten Unterschied mehr im Stromverbrauch feststellen. Egal ob nun 820Ω Widerstand oder ein 39kΩ Widerstand verwendet wird. Also Nicole ... mach keinen Heckmeck... nimm nen kΩ und gut is ;). Dann ist auf jeden Fall ist dann genug Saft auf der Leitung.


    Gruß Kai