Kostenlose technische Bibliothek ENZYKLOPÄDIE DER FUNKELEKTRONIK UND ELEKTROTECHNIK Arduino. Digitale I/O-Operationen. Enzyklopädie der Funkelektronik und Elektrotechnik Lexikon der Funkelektronik und Elektrotechnik / Funkamateur-Designer Nachdem Sie die Arduino IDE-Entwicklungsumgebung geladen haben, können Sie sehen, dass im leeren Teil des zukünftigen Programms, das im sich öffnenden Fenster angezeigt wird, zwei Funktionen vorhanden sind: setup () und loop (). Die Funktion setup() startet ein beliebiges Programm. Dies wird einmal unmittelbar nach dem Anlegen der Stromversorgung an die Platine und jedes Mal nach Drücken der RESET-Taste auf der Platine durchgeführt, wodurch der Mikrocontroller in seinen ursprünglichen Zustand versetzt wird. Innerhalb dieser Funktion werden die Betriebsarten der Ports eingestellt, die serielle Schnittstelle und andere Peripheriegeräte initialisiert, sowohl innerhalb des Mikrocontrollers als auch extern daran angeschlossen. Diese Funktion muss im Programm vorhanden sein, auch wenn sie leer ist. Die Funktion loop() enthält eine Endlosschleife, die der Mikrocontroller wiederholt ausführt, bis der Strom ausgeschaltet wird. Es fragt externe Sensoren ab, sendet Befehle an Aktoren, führt Berechnungen und andere Operationen durch. Nehmen wir als Beispiel ein einfaches Programm, das im Abstand von einer Sekunde die in der Arduino-Platine eingebaute LED aufleuchtet und dann ausschaltet, auf dieser mit dem Buchstaben L gekennzeichnet und an den digitalen Pin D13 angeschlossen ist. Dieses Programm ist eines der Standardbeispiele, die mit der Arduino IDE geliefert werden. In der Tabelle. 1 zeigt seinen Text in der Form, in der er beigefügt ist. Beachten Sie, dass der Quellcode des Programms im Arduino-Jargon als „Skizze“ bezeichnet wird – eine Skizze. Tabelle 1 Programmfragmente, die sich auf einen Block beziehen, werden durch geschweifte Klammern { und } getrennt. Im Folgenden bezeichnen wir sie als Operatorklammern. Der Text des Programms kann einen Kommentar enthalten, der sein Wesen und die Nuancen der Arbeit erläutert. Ein mehrzeiliger Kommentar ist auf die Zeichenkombinationen /* (am Anfang) und */ (am Ende) beschränkt. Die Zeichen // beginnen einen Kommentar, der am Ende derselben Zeile endet. Bei der Übersetzung (Umwandlung des Texts des Programms in einer für den Menschen verständlichen Programmiersprache in vom Mikrocontroller ausführbaren Maschinencode) wird dieser Teil des Textes völlig ignoriert. Die einzige ausführbare Zeile im Hauptteil der Funktion setup() PinMode (13, OUTPUT); setzt Pin D13 des Arduino-Boards in den Ausgangsmodus. Die Funktion loop() beginnt mit der Zeile digitalwrite (13, HOCH); Es setzt den Ausgang D13 auf einen hohen Logikpegel. Bei Arduino UNO entspricht sie der Versorgungsspannung (+5 V) relativ zum gemeinsamen Kabel. Dadurch wird die LED eingeschaltet. Es folgt die Linie Verzögerung (1000); Es bewirkt, dass das ausführbare Programm für die in Klammern in Millisekunden angegebene Zeit nicht zur nächsten Zeile springt. Nach einer Pause setzt das Programm den D13-Ausgang auf einen niedrigen Logikpegel, der dem Potenzial der gemeinsamen Leitung entspricht, wodurch die LED ausgeschaltet wird. Dieser Vorgang wird durch die Zeile beschrieben digitalwrite (13, NIEDRIG); Anschließend hält das Programm erneut eine Pause von 1 s ein und wiederholt dann die gesamte im Hauptteil der Funktion loop() beschriebene Abfolge von Anfang an. Dies wird so lange fortgesetzt, bis der Mikrocontroller ausgeschaltet wird. Die Funktion „delay()“ sollte mit Vorsicht verwendet werden. Wenn während des darin angegebenen Zeitintervalls ein wichtiges Ereignis auftritt (z. B. ein Sensor wird für kurze Zeit ausgelöst), reagiert das Programm nicht auf dieses Ereignis. Es ist zu beachten, dass der maximale Strom, den der Arduino-Pin als Ausgang liefert, 40 mA beträgt, während der Gesamtstrom aller Ausgänge 300 mA nicht überschreiten sollte. Dies reicht aus, um normale LEDs mit Strom zu versorgen. Sie können auch direkt ein Niederspannungs-Reed-Relais oder einen Vibrationsmotor mit geringer Leistung von einem Mobiltelefon an den Ausgang anschließen. Ohne Verstärker können Sie nichts Leistungsstärkeres anschließen, und das ist gefährlich – Sie können den Mikrocontroller ruinieren. Die analogen Eingänge A0-A5 können bei Bedarf zusammen mit D0-D13 als digitale Ein- und Ausgänge verwendet werden, wobei sie jeweils mit den Nummern 14 bis 19 bezeichnet werden. Jetzt modifizieren wir das Programm ein wenig. Für einen so einfachen Algorithmus sind diese Änderungen nicht grundlegend, in komplexeren Fällen sind solche Änderungen jedoch wichtig. Ersetzen wir zunächst den Kommentar auf Englisch durch Russisch. Beispielsweise wird die Zeile, die die LED einschaltet, wie folgt kommentiert: „Turn on the LED“. Sie sollten nicht schreiben: „Wir haben ein hohes Niveau auf der D13-Linie gesetzt“, das geht bereits aus dem Text des Programms hervor. Natürlich ist ein ausführlicher Kommentar zu jeder Zeile normalerweise überflüssig, aber man sollte nicht faul sein, ihn zu schreiben. Nach einiger Zeit werden die Details des Programms vergessen, sogar der Autor selbst, nur ein Kommentar hilft Ihnen, das Wesentliche schnell zu verstehen. Als nächstes ändern wir das Programm so, dass die LED, die nicht mit dem D13-Pin, sondern mit dem D12-Pin des Arduino verbunden ist, blinkt. Da an D12 auf der Platine keine LED angeschlossen ist, ist eine externe LED mit Vorwiderstand erforderlich. Schließen Sie es gemäß dem Diagramm in Abb. an. 1. Der Zusatzwiderstand wird so gewählt, dass die Stromunterbrechungs-LED innerhalb von 5 ... 10 mA liegt. Dies ergibt bei den meisten LEDs ein recht helles Leuchten. Die Arduino UNO-Platine mit angeschlossener externer LED ist in Abb. dargestellt. 2.
Es empfiehlt sich, mehrere LEDs mit zusätzlichen Widerständen herzustellen. Sie werden nicht so sehr nützlich sein, um einen Automaten für Lichteffekte zu erstellen, sondern vielmehr, um die Spannungspegel an den Ausgängen der Platine schnell zu überprüfen und ihre Änderung entsprechend dem zu debuggenden Programm zu überwachen. Um eine LED anzusteuern, die nicht an D13, sondern an D12 angeschlossen ist, würde es in diesem Fall ausreichen, alle Zahlen 13 um 12 im Programmtext zu korrigieren. Abgesehen von Kommentaren kommt die Zahl 13 im Programmtext nur dreimal vor, Es ist also nicht schwer, es zu ändern. Mit zunehmendem Umfang des Programms ändert sich die Situation jedoch grundlegend. Es ist eine Sache, drei Zahlen zu ersetzen, und eine ganz andere, mehrere Zehner identischer Zahlen an verschiedenen Stellen eines langen Programms zu ersetzen. Außerdem kann es sein, dass diese Zahl irgendwo etwas ganz anderes bedeutet und Sie sie nicht ändern müssen. Um solche Änderungen einfacher durchzuführen, deklarieren wir zu Beginn des Programms eine Variable und weisen ihr einen Wert zu, der der Nummer des gewünschten Ausgangs entspricht: int LEDPIN = 12; Darüber hinaus ersetzen wir überall dort, wo die Ausgabenummer 13 auftritt, diese durch den Namen dieser Variablen. Wenn Sie nun den Anschluss der LED erneut ändern müssen, reicht es aus, nur eine Zahl in der Beschreibung der LEDPIN-Variablen zu ändern. Das geänderte Programm ist in der Tabelle dargestellt. 2. Es muss in den Mikrocontroller-Speicher des Arduino-Boards geladen werden. Wählen Sie dazu „Datei→Laden“ aus dem Hauptmenü der IDE. Wenn das im Bearbeitungsfenster eingegebene Programm nicht zuvor in einer Datei gespeichert wurde, werden Sie von der IDE aufgefordert, den Dateinamen anzugeben, unter dem es gespeichert werden soll. Nach einiger Zeit, die die Arduino-IDE benötigt, um das Programm in für den Mikrocontroller verständliche Maschinencodes zu übersetzen, beginnen die LEDs „Rx“ und „Tx“ auf der Platine zu blinken und signalisieren den Empfang und die Übertragung von Nachrichten über die serielle Schnittstelle des Mikrocontrollers . Tabelle 2 Wenn alles richtig gemacht wurde, erscheint am unteren Rand des Programmfensters ein Bericht über den korrekten Ladevorgang. Es werden Informationen darüber angezeigt, wie viel von den verfügbaren 32 KB Programmspeicher des Mikrocontrollers das geladene Programm belegt hat und wie viel RAM für die Unterbringung von Variablen erforderlich ist. Die an Pin D12 angeschlossene LED beginnt im Abstand von 2 s zu blinken. Wenn Sie eine Reihe von fünf LEDs an die Arduino-Pins D8-D12 anschließen (Abb. 3) und das in der Tabelle gezeigte Programm laden. 3 schaltet abwechselnd jede dieser LEDs und die an D500 angeschlossene, auf der Platine installierte LED für 13 ms ein. Dieses Programm könnte sich als viel länger erweisen, wenn das Problem „auf der Stirn“ gelöst würde, indem einfach die notwendige Anzahl von Malen in den setup()-Funktionszeilen mit unterschiedlicher numerischer Anzahl von Ausgängen wiederholt, für die Ausgabe eingerichtet und in die Funktion „loop()“ – eine Folge von Zeilen einschließlich der nächsten LED, die anhält und ausschaltet. Die for-Schleifenanweisungen haben dazu beigetragen, das Programm zu verkürzen.
Tabelle 3 Die Klammern nach dem Schlüsselwort for geben den Anfangswert der Schleifenvariablen an – LEDPIN=8, die Bedingung für die Ausführung des Schleifenkörpers – LEDPIN<14 und die mit der Schleifenvariablen nach jeder Ausführung ihres Körpers ausgeführte Operation – LEDPIN++, was bedeutet dass der Wert der Variablen um eins erhöht wird. Bei Bedarf können die Parameter der for-Schleife einfach geändert werden. Der Schleifenkörper in Operatorklammern folgt der Bedingung. Im ersten Fall (in der Funktion setup()) besteht sie aus einer einzigen Zeile, die sechsmal mit LEDPIN-Werten von 8 bis 13 ausgeführt wird. Im zweiten Fall (in der Funktion loop()) die Schleife Die Anweisung gibt eine Folge von drei Zeilen an, die sechsmal mit denselben Werten der Variablen ausgeführt werden sollen. Zusätzlich zur Steuerung externer Geräte in jedem System ist es notwendig, Informationen von verschiedenen Sensoren zu empfangen. Ohne sie wäre selbst der komplexeste Roboter nur ein Spielzeug, das sein Verhalten nicht an äußere Bedingungen anpassen kann. Bei einer Versorgungsspannung von 5 V, und beim Arduino UNO ist es genau das, werden die digitalen Eingänge des Mikrocontrollers garantiert als logisch hohe (entsprechend einer logischen Einheit) Spannung von mehr als +3 V wahrgenommen, und zwar als ein logisch niedriger Wert (entspricht einer logischen Null) – eine Spannung von weniger als +1,5 V. Zwischenwerte (auch wenn der Eingang nirgendwo angeschlossen ist) ergeben ein unvorhersehbares, sich zufällig änderndes Ergebnis, abhängig von der Mikrocontroller-Instanz, ihrer Versorgungsspannung, Temperatur und andere Faktoren. Daher ist es wünschenswert, dass der digitale Eingang immer eine Spannung mit einem bekannten hohen oder niedrigen Logikpegel aufweist. Der einfachste Sensor ist ein gewöhnlicher Knopf ohne Befestigung, angeschlossen wie in Abb. 4-Schaltung an einen der äußeren Pins der Arduino-Platine, in diesem Fall an D7. Wenn die Taste SB1 losgelassen wird, ist der Spannungspegel am Eingang des Mikrocontrollers niedrig (Widerstand R1 stellt ihn bereit), wenn er gedrückt wird, ist er hoch. Wenn Sie den Knopf und den Widerstand vertauschen (Abb. 5), ändern sich auch die Pegel. Jetzt liefert der Widerstand R1 einen hohen Pegel, wenn die Taste losgelassen wird, und durch Drücken wird ein niedriger Pegel eingestellt.
Der Widerstandswert des Widerstands R1 sollte nicht zu klein sein, da der beim Drücken der Taste durch ihn fließende Strom von der Stromquelle verbraucht wird und die Effizienz des Geräts verringert. Bei der Stromversorgung über einen Desktop-Computer oder ein Netzteil ist dies nicht so wichtig, aber bei der Arduino-Batterieversion verringert der niedrige Widerstand des Widerstands R1 die mögliche Batterielebensdauer des Geräts erheblich. Bitte beachten Sie, dass der Mikrocontroller über interne Widerstände verfügt, die die Funktion des Widerstands R1 übernehmen. Sie sind standardmäßig deaktiviert. Um jedoch beispielsweise einen internen Widerstand an den D2-Eingang anzuschließen, reicht es aus, die Leitung zur Funktion setup() hinzuzufügen PinMode (2, INPUT_PULLUP); Betrachten Sie die digitale Eingabe anhand des in der Tabelle aufgeführten Beispiels. 4 Programme, die die an Pin 13 angeschlossene LED erlöschen lassen, wenn Sie die an Pin D7 angeschlossene Taste drücken. Es basiert auf dem bedingten Operator if (Bedingung) { /*Aktionen, wenn die Bedingung erfüllt ist*/ } sonst { /*Aktionen, wenn die Bedingung nicht erfüllt ist*/ } Tabelle 4 Es dient dazu, eine Aktion abhängig davon auszuwählen, ob die darin angegebene Bedingung erfüllt ist oder nicht. Wenn bei Nichterfüllung der Bedingung nichts unternommen werden muss, kann das Fragment else {...} weggelassen werden. Die Verwendung von bedingten Anweisungen verleiht dem Programm Flexibilität. Abhängig vom Zustand externer Sensoren verändern sie die Reihenfolge des Programms und das Verhalten des mit einem Mikrocontroller ausgestatteten Geräts. Die eigentliche Überprüfung des Zustands der Schaltfläche wird durch einen logischen Operator durchgeführt digitalRead (ABER) = HOCH In diesem Fall vergleicht es den von der Funktion zum Lesen des Zustands des BUT-Pins, mit dem die Taste verbunden ist, zurückgegebenen Wert mit der logischen Konstante HIGH und nimmt bei Gleichheit den Wert TRUE (wahr) an, andernfalls FALSE (FALSCH). Beachten Sie, dass die Gleichheitstestoperation durch zwei Gleichheitszeichen hintereinander gekennzeichnet ist. Und ein Gleichheitszeichen bezeichnet die Operation, einer Variablen einen Wert zuzuweisen. Verwechseln Sie sie nicht, das führt zu schwer zu findenden Fehlern. Am Beispiel des gerade betrachteten Programms lässt sich leicht erkennen, wozu die ungenaue Verwendung der Funktion „delay()“ führt. Wenn Sie die Funktion „delay( 10000)“ in der vorletzten Zeile des Programms auskommentieren (die beiden vorhergehenden durchgezogenen Zeilen entfernen), wartet das Programm nach jeder Ausführung des Hauptteils der Funktion „loop()“ 10 Sekunden, bevor es fortfährt arbeiten. Selbstverständlich werden alle Tastendrücke in diesem Zeitraum ignoriert. Die Fähigkeit des Arduino, über eine serielle Schnittstelle mit einem Personalcomputer zu kommunizieren, ist sehr nützlich. Es kann nicht nur zum Herunterladen des Programms auf den Mikrocontroller verwendet werden, sondern auch zum wechselseitigen Informationsaustausch während seiner Ausführung. Über diese Schnittstelle kann Arduino die gesammelten Informationen zur komplexen Verarbeitung oder Speicherung an den Computer übertragen und von diesem Befehle und Ausgangsdaten empfangen. Auf diese Weise können auch zwei Mikrocontroller-Geräte interagieren. Der serielle Port des Mikrocontrollers nutzt die digitalen Pins der Platine D0 und D1, sodass diese bei der Organisation und Nutzung der Kommunikation über den seriellen Port nicht für andere Zwecke verwendet werden können. Betrachten Sie beispielsweise das in der Tabelle gezeigte Programm. 5, der Informationen über den Zustand des Ausgangs D12 an den Computer sendet. Ist der Pegel hoch, sendet das Programm den Symbolcode H an den Computer, ist er niedrig, den Symbolcode L. Empfangen kann diese Information jedes Programm, das mit dem COM-Port des Computers arbeiten kann. Die Arduino IDE verfügt über einen integrierten Monitor für die serielle Schnittstelle, der es dem Computer ermöglicht, vom Arduino-Board empfangene Textnachrichten anzuzeigen und vom Benutzer auf der Tastatur des Computers eingegebene Nachrichten zu senden. Tabelle 5 Die Zeile Serial.begin(9600) in der Funktion setup() initialisiert den seriellen Port des Mikrocontrollers und setzt die Baudrate auf 9600 Baud. Sie können auch andere Standard-Baudraten einstellen: 1200, 2400, 4800, 9600, 19200, 38400, 57600 oder 115200 Baud. In diesem Fall muss die im Mikrocontroller eingestellte Geschwindigkeit mit der Geschwindigkeit übereinstimmen, auf die der COM-Port des Computers oder eines anderen Geräts konfiguriert ist, mit dem Informationen ausgetauscht werden müssen. Die zulässige Geschwindigkeit, mit der ein zuverlässiger Informationsempfang gewährleistet ist, hängt von der Länge des Kabels ab, das den Arduino mit dem Computer verbindet. Mit einem 1,8 m langen Standard-USB-Kabel empfängt der Computer beispielsweise auch bei einer Geschwindigkeit von 115200 Baud Informationen vom Arduino. Und wenn man zu diesem Kabel ein fünf Meter langes Verlängerungskabel hinzufügt, sinkt die zulässige Geschwindigkeit auf 4800 Baud. Die Funktion Serial.print() sendet Informationen an die serielle Schnittstelle, wobei in Klammern der Name der Variable, deren Sendewert gesendet werden soll, bzw. die zu übertragende Zeichenfolge angegeben wird. Zur Unterscheidung von einem Variablennamen wird die Zeichenfolge in Anführungszeichen gesetzt. Es gibt eine Änderung an dieser Serial.println()-Funktion. Der Unterschied besteht darin, dass nach der Übergabe der in Klammern eingeschlossenen Informationen (falls vorhanden) diese durch Wagenrücklauf- und Zeilenvorschubzeichen ergänzt werden. Beginnt eine neue Zeile und Zeichenkombination in der angegebenen Zeichenfolge. Mit dem obigen Programm lässt sich leicht sicherstellen, dass der als Eingang konfigurierte Mikrocontroller-Ausgang, wenn keine externen Signale anliegen, seinen Zustand beliebig annehmen und sich während des Betriebs zufällig ändern kann. Sie können auch den tatsächlichen Wert der Spannung bestimmen, den der Mikrocontroller nicht mehr als niedrigen Logikpegel, sondern als hohen Pegel wahrnimmt. Betrachten Sie als Nächstes ein Programm (Tabelle 6), das die LED auf der Platine entsprechend den vom Computer über die serielle Schnittstelle empfangenen Befehlen ein- und ausschaltet. Es ist zu beachten, dass die Informationen über die serielle Schnittstelle in Bytes übertragen werden. Der Empfänger der seriellen Schnittstelle, der unabhängig vom Prozessor des Mikrocontrollers arbeitet, empfängt diese Bytes und speichert sie in seinem 64-Byte-Puffer. Tabelle 6. Damit das Programm feststellen kann, ob sich empfangene Bytes im Puffer befinden, gibt es die Funktion Serial.available(), die deren Anzahl zurückgibt. Wenn dies der Fall ist, verwendet das Programm die Seriennummer. read() liest ein Byte aus dem Puffer und weist seinen Wert (den empfangenen Zeichencode) einer C-Char-Variablen zu. Als nächstes vergleichen die bedingten Anweisungen den Code mit den Mustern und schalten bei Übereinstimmung die LED ein oder aus. Sie können Befehle über denselben seriellen Port-Monitor senden, der zum Empfangen von Informationen verwendet wurde. Im oberen Teil seines Fensters (Abb. 6) befindet sich eine Zeile zur Eingabe der übertragenen Zeichen. Nachdem Sie ein Symbol oder dessen Sequenz über die Tastatur eingegeben haben, drücken Sie die Bildschirmtaste „Senden“. Auf dem Arduino-Board sollte die „Rx“-LED kurz blinken und so anzeigen, dass der Mikrocontroller Informationen erhalten hat. Natürlich ist die manuelle Übertragung von Codes eine einfache, aber bei weitem nicht die beste Verwaltungsmethode. In der Regel wird hierfür ein spezielles Computersteuerungsprogramm geschrieben.
Mit der Arduino-Mikrocontrollerplatine können Sie also relativ einfach eine Reihe einfacher elektronischer Geräte erstellen. Wenn wir uns auf digitale Ein- und Ausgänge beschränken, können dies automatische Lichteffekte, der einfachste Einbruchalarm, Messgeräte verschiedener Parameter mit digitalen Sensoren sein. Darüber hinaus ist es einfach, das Gerät mit dem Computer interagieren zu lassen. Natürlich sind die Fähigkeiten von Arduino bei weitem nicht auf die in diesem Artikel beschriebenen beschränkt. Dieses Board kann auch mit analogen Signalen arbeiten, worauf später noch eingegangen wird. Die im Artikel erwähnten Programme für Arduino können von ftp://ftp.radio.ru/pub/2016/08/diginout.zip heruntergeladen werden. Autor: D. Lekomtsev Siehe andere Artikel Abschnitt Funkamateur-Designer. Lesen und Schreiben nützlich Kommentare zu diesem Artikel. Neueste Nachrichten aus Wissenschaft und Technik, neue Elektronik: Alkoholgehalt von warmem Bier
07.05.2024 Hauptrisikofaktor für Spielsucht
07.05.2024 Verkehrslärm verzögert das Wachstum der Küken
06.05.2024
Weitere interessante Neuigkeiten: ▪ Super stabiler Laser macht GPS genauer ▪ Neue Wissenschaft - Forensische Seismologie ▪ Technologie zur Erstellung künstlicher Gelenk-Selfies ▪ Sony-Smartphone mit Retina-Display News-Feed von Wissenschaft und Technologie, neue Elektronik
Interessante Materialien der Freien Technischen Bibliothek: ▪ Abschnitt der Website Funkamateurtechnologien. Artikelauswahl ▪ Artikel Beginnen Sie mit Ledas Eiern. Populärer Ausdruck ▪ Woraus bauen Wespen ihre Nester? Ausführliche Antwort ▪ Artikel Sophora dickfruchtig. Legenden, Kultivierung, Anwendungsmethoden ▪ Artikel Biokraftstoff: Theorie. Enzyklopädie der Funkelektronik und Elektrotechnik
Hinterlasse deinen Kommentar zu diesem Artikel: Alle Sprachen dieser Seite Startseite | Bibliothek | Artikel | Sitemap | Site-Überprüfungen www.diagramm.com.ua |