Misc

Das ultimative Arduino-Tutorial

Autor: Laura McKinney
Erstelldatum: 8 April 2021
Aktualisierungsdatum: 14 Kann 2024
Anonim
Arduino Tutorial - 1. Einführung (#1)
Video: Arduino Tutorial - 1. Einführung (#1)

Inhalt

Chriscamaro liebt es, Sport zu treiben, Autos zu modifizieren und Videospiele zu spielen.

Was ist Arduino?

Arduino ist der Markenname einer Familie einfacher Mikrocontroller-Karten, die wie heruntergekommene Computerprozessoren für die schnelle Ausführung sehr spezifischer Aufgaben im Zusammenhang mit elektromechanischen und mechatronischen Systemen gedacht sind. Grundsätzlich verwenden Sie diese Dinge, um eine Schnittstelle zu Sensoren, Motoren, Lichtern, Schaltern und anderer digitaler Elektronik herzustellen und Entscheidungen basierend auf Eingaben hinsichtlich der Erzeugung von Ausgaben zu treffen (wenn beispielsweise die Umgebungstemperatur über 30 ° C liegt, schalten Sie a ein Lüfter).

Viele Dritte haben elektrisch identische Klone hergestellt, die extrem billig sind, was Projekte auf der Basis von Mikrocontrollern extrem wirtschaftlich und bei Menschen jeder wirtschaftlichen Bevölkerungsgruppe beliebt macht.


Welche Optionen gibt es?

Um auf die Funktionen des Mikrocontrollers zugreifen zu können, wird der Chip selbst auf Platinen gelötet, die alle Pins des Chips freilegen. Die Arduino-Board-Familie variiert sowohl im Formfaktor (Größe / Form) als auch im Funktionsumfang, falls Sie Ihr Projekt in seiner Komplexität vergrößern oder verkleinern möchten. Da es so viele Optionen gibt, werde ich mich auf den beliebtesten Chip konzentrieren, der in UNO und NANO verwendet wird, nämlich den ATMEGA328P. Das ist sozusagen nur der Name der "CPU", aber es ist den UNO und NANO gemeinsam. Somit sind die Funktionen dieselben und auch die Softwarebefehle, die zum Implementieren der vielen Funktionen erforderlich sind.

Ich mag das NANO wirklich, weil es super kompakt und Steckbrett-freundlich ist. Wenn ich also auf das Board selbst verweise, werde ich auf das NANO verweisen. Beachten Sie jedoch, dass das Pin-Layout auf der UNO nahezu identisch ist, sodass Sie diese Anleitung für beide verwenden können (und mit einigen Ausnahmen auch für einige andere ähnliche Boards wie das Leonardo).

Warum ich Arduino mag

Als Universitätsstudent haben wir ältere PIC-Mikrocontroller verwendet, um einige ziemlich coole Dinge zu tun, und seitdem wusste ich immer, dass ich mich mit Mikrocontrollern und allen möglichen aufregenden Projekten beschäftigen wollte, die mit ihnen möglich waren. Das Problem war, ich wusste nicht wirklich, welchen Chip ich kaufen sollte, wie ich mit der Hardware kommunizieren sollte, ob ich eine exotische Assemblersprache lernen musste usw.


Als ich über Arduino stolperte, war es wie der heilige Gral. Es hatte nicht nur alle Hardwarefunktionen, die ich jemals haben wollte (und einige, von denen ich nicht einmal wusste, dass ich sie wollte), sondern es verwendete auch einen Compiler auf C-Basis, den ich bereits kannte und der sehr häufig gelehrt wird. Zum Hochladen von Code auf den Chip ist lediglich ein USB-Kabel erforderlich, sodass keine ausgefallene Hardware erforderlich ist. Abgesehen von der Karte ist die gesamte Software kostenlos und Open Source und enthält standardmäßig zahlreiche Beispielprogramme. Die Lernkurve ist ziemlich niedrig - wie gesagt, das war wie Magie. Kaufen Sie einfach ein Brett und springen Sie direkt in die Dinge!

ATMEGA328P Technische Daten und Merkmale

Wie gesagt, dieser Chip, den ich einfach als 328 bezeichnen werde, ist das Herzstück des beliebtesten Arduino-Boards. Alles andere, was Sie auf der Platine sehen, unterstützt nur Schaltkreise oder Header, die von den vielen Pins des Chips stammen, sodass Sie sie problemlos mit Drähten verbinden können. Im 328 wird die ganze Arbeit erledigt. Wir beginnen mit einer einfachen Auflistung der technischen Daten und Funktionen, damit Sie auf einen Blick sehen können, wozu der Chip in der Lage ist.


Die Spezifikationen

Sie neigen möglicherweise dazu, einige der bekannteren Zahlen im Folgenden zu kritisch zu sehen, aber glauben Sie mir: Wenn Sie auf einer tieferen Ebene verstehen, warum diese Spezifikationen so sind, wie sie sind, werden Sie verstehen, warum wir alle dies nicht tun Verwenden Sie superschnelle computerähnliche Boards wie den Raspberry Pi, ein beliebtes Konkurrenzprodukt. Also ohne weiteres die Spezifikationen:

  • 16MHz Taktrate (16 MIPS Durchsatz)
  • 8-Bit-Verarbeitung
  • 5V Versorgung (mindestens 3,3V)
  • 40mA maximale Stromaufnahme
  • 32 KB Programmraum (für deinen Code)
  • 1 KB EEPROM (um Dinge zur Laufzeit dauerhaft zu speichern)
  • 2 KB RAM (für alle Ihre Laufzeitvariablen und Berechnungen)
  • 0,1 uA - 19 mA Stromverbrauchsbereich

Sie werden feststellen, dass diese Werte auf der Skala, mit der Sie vertraut sind, eher unscheinbar sind. Wenn Sie einen PC besitzen, sind Sie an GigaHertz und GigaBytes sowie an 64 Bit gewöhnt. Versuchen Sie, den Drang zu unterdrücken, diesen "erbärmlichen" Figuren gegenüber übermäßig kritisch zu sein. Vergessen Sie nicht, dass Ihr Auto und das Space Shuttle auf ähnlich "erbärmlichen" Computern fahren. Warum? Denn manchmal können Sie Ihre Arbeit mit weniger besser und schneller erledigen, wenn die Hardware speziell für die jeweilige Aufgabe entwickelt wurde.

Erinnern Sie sich an das Super Nintendo Entertainment System (SNES)? Der Chip, auf dem diese Spielekonsole ausgeführt wurde, war weitaus weniger leistungsfähig als der 486-Computer, auf dem Windows 3.1 ausgeführt wurde. Wenn Sie jedoch versuchen, einen Super Nintendo auf einem 486-Computer zu emulieren, kann der 486 nicht damit umgehen. Es ist nicht spielbar. Aus diesem Grund sind Computer für alles und jedes gut, weil sie nicht spezialisiert sind, aber ein Mikrocontroller ist nur für eines gut: die Steuerung elektromechanischer Systeme und dies weitaus effizienter als ein Computer mit überlegener Geschwindigkeit und Speicher. Wenn Sie die Tatsache berücksichtigen, dass ein Arduino-Board die Größe Ihres Daumens hat, eine Uhrenbatterie entladen kann und kein Betriebssystem benötigt, werden Sie feststellen, wie viel Sie tatsächlich mit 16 MHz und 2 KB RAM tun können.

Bemerkenswert ist auch eine Art Festplatte auf dem 328. Der 32-KB-Programmspeicher kann nur zum Hochladen von Dingen verwendet werden, die Sie bereits kennen: Code, Referenztabellen usw. Wenn Sie jedoch Daten speichern möchten, von denen Sie nichts wissen ... Daten, die zur Laufzeit generiert werden, wie z. B. Sensorwerte, die Sie später in Excel grafisch darstellen möchten, können Sie diese Daten wie eine Mini-Festplatte auf 1 KB EEPROM speichern und später lesen. Wie cool ist das?

Ohne diesen winzigen Speicherblock hätten Sie keine Möglichkeit, Feedback von Ihrem Gerät zu erhalten, ohne ein Add-On (wie einen Bildschirm) zu kaufen ... es sei denn, Sie möchten die einzelne LED einschalten das Brett, um Morsecode auf dich zu blinken ... und das kann ein bisschen Spaß machen :)

Die Funktionen

Zusätzlich zu den grundlegenden technischen Daten des 328 finden Sie hier eine Liste aller erstaunlichen Funktionen:

  • 3 Timer (2 x 8 Bit und 1 x 16 Bit)
  • 8 ADC-Kanäle mit einer Auflösung von 10 Bit pro Kanal
  • 6 PWM-Kanäle auf ausgewählten digitalen Pins
  • Analogausgang über PWM
  • Interner Temperatursensor (ein 9. Kanal am ADC-Multiplexer)
  • USART
  • SPI
  • I2C
  • Watchdog Timer
  • 2 Hardware-Interrupts
  • 6 Energiesparmodi
  • 22 Digitale E / A-Pins
  • Analoger Komparator

Bitte beachten Sie, dass dies keine vollständige Liste ist. Der 328 hat noch ein paar Tricks im Ärmel, ABER diese sind gebrauchsfertig, sozusagen "out of the box", mit wenig bis gar keinem Setup. Die anderen sind etwas dunkler und gehen über den Rahmen dieses Artikels hinaus.

Erläutern der Funktionen und Vorteile des 328

Nachdem Sie eine Reihe von kryptischen Spezifikationen und Funktionen gesehen haben, gehen wir nun durch, was dies alles bedeutet und wie es verwendet wird. Für jede Funktion beantworte ich 3 Fragen:

  • Was ist es?
  • Was ist ein häufiges Beispiel?
  • Wie benutze ich es?

Auf diese Weise wird es nicht nur technobabble sein. Sie werden dieses Tutorial tatsächlich zu Ende lesen und die Informationen noch am selben Tag in einem realen Projekt verwenden können! Wenn Sie diese Beispiele durchlesen, werden Sie die Vorgehensweise und die Bedeutung der zu erklärenden Funktionen verstehen. Beachten Sie jedoch, dass Sie einige Arbeiten ausführen müssen, um diese an Ihr eigenes Projekt anzupassen.

Oft werden wir Register ändern und es ist zu chaotisch, dies alles für jedes mögliche Szenario ausführlich zu erklären. Sie müssen also das Beispiel als Leitfaden verwenden, um zu wissen, wo Sie im Datenblatt des 328 suchen müssen. Dort finden Sie Karten aller Register, die in den folgenden Beispielen geändert wurden. Sie müssen lediglich die Tabellen für jedes relevante Register finden und die Bits entsprechend den gewünschten Modi und Werten ändern. Diese Beispiele sollen Ihnen den Einstieg in die richtige Richtung erleichtern, da Sie bereits wissen, nach welchen Registern Sie suchen und welche Tabellen Sie überprüfen müssen.

1 KB EEPROM

Das EEPROM ist ein bisschen seltsam, weil es nicht wirklich eine Funktion ist, aber es ist nicht obligatorisch wie der RAM oder die CPU. Es sitzt einfach da und Sie können es verwenden oder nicht verwenden. EEPROM steht für Electrically Erasable Programmable Read Only Memory. Grundsätzlich handelt es sich um einen nichtflüchtigen Speicher (er vergisst nicht, was Sie beim Ausschalten des Geräts wie beim RAM eingeben), sodass Sie Dinge dort speichern können und sie nach dem Ausschalten des Arduino bestehen bleiben. Dies entspricht einer Mini-Festplatte! Sicher, 1 KB ist keine große Festplatte, aber für Arduino-Projekte ist es oft mehr als genug für das, was Sie brauchen.

Wenn Ihr Programm beispielsweise so ausgelegt ist, dass es die Beschleunigung aufgrund eines Sturzes erkennt, können Sie einen Beschleunigungsmesser verwenden und versuchen, die Signatur eines Sturzes anhand der Beschleunigungswerte x, y und z zu analysieren. Da ein Sturz ein sehr vorübergehendes, kurzes Ereignis ist und der Sensor selbst fällt, können Sie wahrscheinlich keine nützlichen Daten aus der Sichtprüfung in Echtzeit erfassen. Sie müssen lediglich die Sensordaten irgendwo aufzeichnen. Da sich Ihr Sensor im freien Fall befindet, ist der Sensor oder die Arduino-Karte wahrscheinlich nicht an irgendetwas angeschlossen, um die Daten über seriell, SPI, I2C oder dergleichen zu übertragen. Wirklich die beste Option ist, alles vollständig portabel und isoliert zu halten und die Daten lokal im EEPROM zu speichern. Abtasten Sie einfach die Daten mit einer bestimmten Frequenz und schreiben Sie sie in den EEPROM-Speicher. Später können Sie alle Daten vom EEPROM über das serielle Terminal auf Ihren Computer übertragen und diese in Excel einfügen, um sie grafisch darzustellen und anzusehen! EEPROM ist wirklich cool.

Der folgende Code liest einen Sensor, speichert jeden Wert im nächsten verfügbaren Byte des EEPROM. Wenn er voll ist, liest das Programm alle Werte der Reihe nach und druckt sie auf das serielle Terminal. Beachten Sie, dass jedes BYTE des EEPROM nur eine Nummer bis zu 256 enthält (ein Byte ist eine 8-Bit-Nummer). Sie müssen also entweder niedrigere Nummern speichern oder mehr als 1 Byte EEPROM verwenden, um eine größere Nummer (oder eine andere) zu speichern Datentyp). Die EEPROM-Schreibfunktion gibt zuerst die Bytenummer an, in die Sie im Speicher schreiben, und dann den Wert, der geschrieben wird. Stellen Sie sicher, dass Sie wissen, wie viele Bytes Speicher Ihr Arduino hat (das neueste Uno / Nano hat 1024) und in welches Byte Sie schreiben möchten. Auch hier ist ein weiterer Trick, den Sie brauchen ... Starten Sie Ihr Programm mit einer Verzögerung von mehreren Sekunden. Warum? Denn nachdem Sie die Daten gespeichert haben, möchten Sie sie als Nächstes lesen, müssen jedoch zuerst die "Leseskizze" laden. Sobald Sie Ihr USB-Kabel anschließen, überschreibt das alte Programm Ihre Daten von der letzten Sitzung. Wenn Sie eine Verzögerung für den Start eingeben, haben Sie einige Sekunden Zeit, um auf die Upload-Schaltfläche zu klicken, bevor das alte Programm Ihre Daten ruinieren kann.

#include EEPROM.h> int addr = 0; void setup () {Serial.begin (9600); } void loop () {while (addr 1024) {int val = analogRead (0); EEPROM.write (addr, val); addr ++; Verzögerung (100); } addr = 0; while (addr 1024) {Serial.println (EEPROM.read (addr)); addr ++; Verzögerung (100); }}

3 Timer

Was ist es?

Ein Timer ist ein Gerät, das die Systemuhr als Mittel zum Zählen mit jedem Uhrentick verwendet. Während der Mikrocontroller seine Arbeit erledigt, arbeiten die Uhren unabhängig voneinander und zählen bis zu jeder gewünschten Anzahl mit der gleichen Geschwindigkeit, mit der der Rest des Chips seine Berechnungen durchführt.Daher kann jeder der 3 Timer unabhängig zählen, obwohl ihre Zählgeschwindigkeiten alle auf der Systemtaktgeschwindigkeit basieren. Wenn also die Taktrate 16 MHz beträgt (was es ist), tickt der Takt 16 Millionen Mal pro Sekunde und jeder Timer kann möglicherweise 16 zählen Millionen Zahlen pro Sekunde, wenn Sie dies möchten, aber da sie unabhängig sind, können sie dies tun, unabhängig davon, ob die CPU ausgelastet ist oder nicht, und sie können starten / stoppen, wann immer Sie dies möchten.

Timer arbeiten unter der einfachen Voraussetzung, dass sie nur zählen, aber Sie können diese Funktion verwenden, um eine Menge verschiedener Dinge zu tun. Indem Sie die Nummer auswählen, zu der sie zählen, und ihnen mitteilen, was zu tun ist, wenn sie diese Nummer erreichen (anhalten, in die andere Richtung zählen, das Programm unterbrechen usw.), können Sie eine Vielzahl von Aufgaben ausführen, von der Zeitangabe bis zum Fahren eines Switches Energieversorgung. Von den 3 auf dem Arduino-Chip verfügbaren Timern sind 2 8-Bit-Timer, was bedeutet, dass sie nur bis 256 zählen können, und der dritte ist 16-Bit, was bedeutet, dass er bis zu 65.000 zählen kann.

Was ist ein häufiges Beispiel?

Angenommen, Sie möchten eine Maschine so programmieren, dass Ihre Blumen einmal pro Woche gewässert werden. In der Zwischenzeit möchten Sie jedoch Daten zur Bodenfeuchtigkeit und zum Umgebungslicht erfassen. Sie benötigen einen Timer, um den Bewässerungsplan zu verfolgen, ohne das Hauptprogramm mit einer großen Verzögerung von 1 Woche zu unterbrechen.

Wie benutze ich es?

Dieses Programm verwendet Timer1 (16 Bit), um Intervalle von 1 Sekunde zu zählen und die LED in diesem Intervall ein- und auszuschalten. Dazu muss der Zähler bis zu einer bestimmten Zahl zählen, was 1 Sekunde dauert. Da der Takt mit 16 MHz läuft und der Timer nur bis ungefähr 65000 zählen kann (das ist die Größe einer 16-Bit-Zahl), würde er normalerweise bis weit vor 1 Sekunde CPU-Zeit bis zum Ende zählen. Um dies zu beheben, verwenden wir einen Prescaler-Faktor, um die 16 MHz auf einen niedrigeren Wert zu senken, sodass der Zähler langsamer als der Systemtakt tickt. Dann können wir tatsächlich 1 Sekunde zählen.

In der Loop-Funktion gibt es wirklich nichts zu tun. Durch einfaches Einrichten des Timers wird der Timer gestartet. Als erstes müssen Sie die 2 Timer-Register TCCR1A und B konfigurieren. Zuerst setzen wir beide auf 0, damit wir nur die gewünschten Teile aktivieren können. Dann setzen wir OCR1A, was die Zahl bestimmt, bis zu der wir zählen möchten. Wenn wir die Uhr um 1024 vorskalieren, erhalten wir 16000000/1024 = 15625. Da dies die Taktrate des Timers ist, enthält 1 Sekunde so viele Ticks und da wir sowieso 1 Sekunde wollen, möchten wir diese Zahl als unsere obere Zählgrenze beibehalten zu. Hätten wir 2 Sekunden gewollt, würden wir diese Zahl einfach verdoppeln. Da wir mit dem Zählen ab 0 beginnen, liegt die tatsächliche Grenze in diesem Fall bei 15624. Dies geht in OCR1A.

Jetzt stellen wir den Timer "Modus" von WGM12 ein. Das liegt daran, dass der Timer viele Dinge tun kann, aber wir möchten nur, dass er bis zu einer maximalen Anzahl zählt und einen Interrupt auslöst. Dies wird als CTC-Modus bezeichnet und über WGM12 ausgewählt. Dann setzen CS10 und CS12 den Vorteiler wie oben beschrieben auf 1024. TIMSK1 ist das Register, das wir konfigurieren müssen, damit Interrupts aktiviert werden, und damit sind wir fertig. Der Timer beginnt automatisch zu zählen und erreicht einmal pro Sekunde den Zielwert in OCR1A, unterbricht den LED-Pin und schaltet ihn um.

void setup () pinMode (13, OUTPUT); cli (); TCCR1A = 0; TCCR1B = 0; OCR1A = 15624; TCCR1B void loop () {} ISR (TIMER1_COMPA_vect) {digitalWrite (13 ,! DigitalRead (13)); }}

8 ADC-Kanäle mit 10-Bit-Auflösung

Was ist es?

Ein ADC ist ein Analog-Digital-Wandler, was im Grunde bedeutet, dass er variable Informationen in Form einer Spannung, die zwischen 0 und 5 Volt liegen kann, aufnimmt und in eine digitale 10-Bit-Zahl von 0 bis 1023 umwandelt. Die Größe der Zahl stellt dann die Größe des gelesenen Signals dar, wobei 1023 = 5 V und 0 = 0 V ist. Dies ist äußerst nützlich zum Lesen von Sensoren aller Art. Es gibt eine Menge Sensoren, die übermitteln, was sie erfassen, indem sie eine Spannung von 0 bis 5 V zurückmelden. Indem Sie diese Spannung lesen und in etwas umwandeln können, das der Mikrocontroller wie eine Ganzzahl mathematisch verstehen und manipulieren kann, können Sie die Funktionsweise Ihres Programms anhand von Eingaben aus der Umgebung manipulieren.

Der ADC-Multiplexer hat auch eine eingebaute Bandlückenreferenzspannung von 1,1 V. Dies bedeutet lediglich, dass Sie eine integrierte Option haben, mit der Sie Ihren Messbereich jederzeit auf 1,1 V ändern können, um eine bessere Auflösung für kleine Messungen zu erzielen, von denen Sie wissen, dass sie nicht über 1,1 V hinausgehen. Denken Sie daran, dass Sie nach dem Umschalten in diesen Modus etwas warten müssen, bis die Spannungsreferenz von ihrem Standardwert von 5 V abfällt, da sonst Ihre Messwerte falsch sind. Eine einfache Verzögerung kann dies erreichen.

Was ist ein häufiges Beispiel?

Angenommen, Sie möchten die Geschwindigkeit messen, mit der Sie dicker werden. Sie können einen Riemen mit Dehnungsmessstreifen (Sensoren, die Längenänderungen erkennen) anlegen und den Sensor an einen Verstärker anschließen, der dann an einen Ihrer ADC-Pins angeschlossen wird. Mit jedem Zentimeter Schmalz, den Sie Ihrer Taille hinzufügen, steigt die Spannung vom Dehnungsmessstreifen und wird verstärkt. Der ADC-Pin erkennt dann die ansteigende Spannung und wandelt sie in eine ansteigende ganze Zahl um. Stellen Sie sicher, dass Ihr Code den 10-Bit-Bereich des ADC überlaufen kann!

Wie benutze ich es?

Das ist wirklich einfach. Analoge Pins sind immer Eingänge und müssen nicht im Setup konfiguriert werden. Im Gegensatz zu digitalen Pins, die nur durch ihre Nummer identifiziert werden, müssen analoge Pins jedoch mit ihrem vollständigen Namen auf der Platine (z. B. A3, nicht nur 3) aufgerufen werden. Wenn Sie die Spannung an einem analogen Pin messen möchten, verwenden Sie einfach den folgenden Code und nehmen Sie die in "Wert" gespeicherte Ganzzahl, dividieren Sie sie durch 255 und multiplizieren Sie sie mit 5. Dadurch erhalten Sie die analoge Spannung an diesem Pin zu diesem Zeitpunkt es wurde gemessen. Im folgenden Beispiel wird der A0-Pin gemessen. Lassen Sie uns zum Teufel die Spannung berechnen und auch auf das serielle Terminal drucken.

int value; doppelte Spannung; void setup () {Serial.begin (9600); } void loop () {value = analogRead (A0); Spannung = Wert / 255 * 5; Serial.println (Spannung); }}

6 PWM-Kanäle

Was ist es?

PWM steht für Pulse Width Modulation und ist im Grunde eine alternierende Rechteckwelle mit fester Frequenz. Die Rechteckwelle hat einen hohen und einen niedrigen Pegel. Für jeden gegebenen Zyklus (1 Welle in der Dauer) bestimmt die Zeitdauer, in der die Welle hoch ist, gegenüber der Zeitdauer, in der die Welle niedrig ist, die "Pflicht" oder das Verhältnis von hoher Zeit zu niedriger Zeit. Dies ist nützlich, da es ein Mittel zum Timing von Ereignissen bietet, die zwischen verschiedenen Zuständen wechseln müssen. Ein Netzteil, das eine hohe Spannung aufnimmt und daraus viele niedrigere Spannungen erzeugt, arbeitet nach einem solchen Prinzip. Die PWM-Leistung gibt der Stromversorgung an, um wie viel die Spannung abfallen soll, da die Leistung ein Verhältnis darstellt. Eine Leistung von 50% entspricht also der Aussage, ich möchte 50% der maximalen Spannung.

Alles, was Sie schon immer über PWM wissen wollten, finden Sie im Video oben auf der Seite.

Was ist ein häufiges Beispiel?

Sie möchten lernen, wie man ein Oszilloskop verwendet, also verwenden Sie Ihren Arduino Nano, um ein zu messendes Testsignal bereitzustellen. Sie konfigurieren einen PWM-fähigen digitalen Pin als Ausgang und geben den Befehl analogWrite () mit unterschiedlichen Tastwerten aus, um zu bestätigen, dass sich die Form der Wellenform wie erwartet auf dem Oszilloskopbildschirm ändert.

Wie benutze ich es?

Sehr einfach. Nachdem Sie einen digitalen Pin ausgewählt haben, der PWM unterstützt (D3, D5, D6, D9, D10, D11), verwenden Sie einfach den folgenden Code, um den Pin (in diesem Fall D9) als Ausgang festzulegen und dann die PWM zu erzeugen. Der "Einschalt" -Parameter bestimmt die "Einschaltzeit" als Verhältnis zum Gesamtimpulsintervall. Somit wäre ein Arbeitszyklus von 25% 63/255, also wäre der "Arbeitszyklus" 63. Siehe unten:

intuty = 0; void setup () {pinMode (9, OUTPUT); } void loop () {uty = 63; analogWrite (9, Pflicht); }}

Analogausgang

Was ist es?

Analog Out ist die Fähigkeit einer digitalen Quelle wie eines Arduino-Mikrocontrollers, ein analoges Signal zu erzeugen, um etwas Externes wie Kopfhörer anzutreiben, die Ton aus analogen Spannungssignalen erzeugen. Dies ist äußerst wertvoll, da viele elektromechanische Geräte tatsächlich analoge Signale benötigen, um ordnungsgemäß zu funktionieren. Nur digitale Elektronik kann und möchte mit diskreten Spannungspegeln wie 0 oder 5 V arbeiten. Alles andere, von Motoren über Lautsprecher bis hin zu Funksendern, erfordert ein beliebiges Spannungsmuster, um wie beabsichtigt zu funktionieren. Daher muss es spezielle Schaltkreise geben, die diese analogen Signale aus digitalen Informationen in Ihrem Programm erzeugen können.

Was ist ein häufiges Beispiel?

Angenommen, Sie möchten einen Wechselrichter erstellen. Dazu müssen Sie eine Sinuswelle erzeugen, bei der es sich um eine analoge Spannung mit einer Spitze von 170 V und einer Frequenz von 60 Hz handelt. Sie müssen diese Welle mit digitaler Logik erzeugen, sodass ein DAC (Digital-Analog-Wandler) erforderlich ist, um die analoge Spannung auszugeben, aus der die Sinuswelle besteht.

Wie benutze ich es?

Zunächst einmal gibt es auf einem Arduino-Board kein "Analog-Out", aber ich versuche nicht, Sie oder irgendetwas auszutricksen. Die Hardware ist fast alles da. Sie müssen nur einen einfachen Tiefpassfilter zu einem der digitalen Pins hinzufügen, ihn mit PWM und Boom betreiben - analoge Ausgangsfunktionen. Wählen Sie dazu zuerst einen digitalen Pin, z. B. D9, und verbinden Sie einen Vorwiderstand und einen Parallelkondensator mit dem Pin. Es gibt viele Tools, die Sie googeln können, um die Werte auszuwählen. Aus Gründen der Argumentation sagen wir 10000 Ohm und 10 uF.

Wenn Sie diese beiden externen Elemente angeschlossen haben, versuchen Sie es mit dem folgenden Code und variieren Sie dann einfach den Wert für "Duty", um die Ausgangsspannung von 0 auf 5 V zu erhöhen oder zu verringern (das folgende Beispiel gibt 2,5 V an). Die Spannung, die Sie erhalten, beträgt: 5 x (Duty / 255). Ändern Sie daher den Duty-Wert in Ihrem Code entsprechend.

intuty = 0; void setup () {pinMode (9, OUTPUT); } void loop () {uty = 127; analogWrite (9, Pflicht); }}

Interner Temperatursensor

Was ist es?

Der Arduino-Chip verfügt über einen eingebauten Temperatursensor, der die Temperatur im Chip misst. Dies ist nützlich, wenn Sie Ihrem Board eine Schutzschicht hinzufügen möchten, um es vor Beschädigungen zu schützen, die durch zu viel Stromverbrauch oder durch Betrieb mit hoher Leistung in einer relativ heißen Umgebung entstehen. Sie können es auch verwenden, um eine ungefähre Schätzung der Umgebungstemperatur zu erhalten, wenn Sie den Arduino einige Minuten lang in den Ruhezustand versetzen und dann die Temperatur sofort messen, wenn Sie ihn aufwecken.

Was ist ein häufiges Beispiel?

Sie verwenden ein Arduino-Board in Ihrem Auto, um verschiedene Sensoren unter der Motorhaube zu messen, die Sie im Sommer in Arizona fahren. Temperaturen im Auto können Ihr Gesicht in Eile zum Schmelzen bringen, wenn Sie das Auto in der offenen Sonne verfallen lassen. Der interne Temperatursensor kann als Alarm fungieren, um den Fahrer über unsichere Betriebstemperaturen zu informieren, oder den Chip in einen seiner Ruhemodi versetzen, um zu verhindern, dass zusätzliche Wärmeerzeugung den Mikrocontroller beschädigt.

Wie benutze ich es?

Dieser Codeblock überprüft die Chip-Temperatur und druckt sie auf den seriellen Monitor. Um dies für die Überprüfung der Umgebungstemperatur nützlich zu machen, müssten Sie dies sofort ausführen, nachdem Ihr Board einige Minuten lang in der interessierenden Umgebung ohne Strom gesessen hat. Sobald sich die Platine einschaltet, erwärmt sich der 328 und wirft Ihren Umgebungstemperaturwert ab. Überprüfen Sie dies daher sofort.

void setup () {Serial.begin (9600); } void loop () = _BV (ADSC); while (bit_is_set (ADCSRA, ADSC)); wADC = ADCW; t = (wADC - 324,31) / 1,22; Serial.println (t); Verzögerung (1000);

Die ersten Zeilen der Schleifenfunktion konfigurieren den ADC-Multiplexer so, dass er von Kanal 8 liest, an dem sich der Temperatursensor befindet. Außerdem wird die Referenzspannung von 5 V auf 1,1 V gesenkt, um eine bessere Auflösung zu erzielen. Dann wird die Temperatur 't' berechnet, indem die Rohmessung wADC um einen Versatz (324,31) und eine Verstärkung (1,22) eingestellt wird. Dies sind Standardwerte, die für Ihr Board möglicherweise falsch sind. Verwenden Sie daher ein Thermometer, um den Versatz zu überprüfen und anzupassen, bis die Programmausgabe mit dem Thermometer übereinstimmt. Wenn der Wert dann bei einer völlig anderen Temperatur immer noch ausgeschaltet ist, müssen Sie auch die Verstärkung anpassen.

Spielen Sie mit diesen Werten, bis der Sensor bei allen Temperaturen innerhalb von +/- 2 ° C anzeigt. Wenn Sie den Code kompakter gestalten möchten und die Temperatur nicht auf den seriellen Monitor drucken müssen, schneiden Sie einfach alles im Setup-Block aus und schneiden Sie die Serial.println (t) aus dem Loop-Block aus.

USART

Was ist es?

USART ist im Grunde eine serielle Kommunikation ... die Art, die erforderlich ist, damit USB-Geräte mit dem Computer kommunizieren können. Wenn Sie ein Programm auf Ihr Arduino-Board hochladen, überträgt es mithilfe des USART die Daten vom Computer auf den Chip und umgekehrt, wenn der Chip Daten aus dem von Ihnen ausgeführten Code melden möchte, sofern Sie Ihren Code dafür eingerichtet haben. Stellen Sie sich das als serielle Kommunikationsschnittstelle vor.

Was ist ein häufiges Beispiel?

Sie haben gerade einen Magnetometer-Chip gekauft, der Ihnen einen Kurs in Grad gibt, der auf den Magnetpolen der Erde basiert. Sie möchten Live-Messwerte vom Sensor erhalten, um sicherzustellen, dass er ordnungsgemäß funktioniert und dass keine Interferenzen auftreten, die ihn abwerfen. Daher geben Sie in Ihrem Code Druckbefehle aus, um die Magnetometeranzeige zweimal pro Sekunde auf dem seriellen Terminal anzuzeigen, das in den Arduino-Compiler integriert ist. Dies ist anstelle des Erhaltens und Einrichtens eines tragbaren Bildschirms oder eines ähnlichen Ausgabegeräts.

Wie benutze ich es?

Mit der Arduino-Sprache können Sie sehr einfach die serielle Kommunikation einrichten, um Daten an Ihren PC zu senden. Sie können Benutzereingaben auch vom seriellen Terminal lesen. Und es gibt überhaupt kein Setup, wenn Sie es einfach zum Hochladen von Code auf den Chip verwenden möchten, da dies alles von der Arduino-Software erledigt wird, wenn Sie auf die Upload-Schaltfläche klicken. Der folgende Code ist der grundlegendste Ausgangspunkt für JEDES Projekt, da er Ihnen das rudimentärste Feedback von Ihrem Code liefert, ohne dass Sie grafische Anzeigen oder andere Ausgabegeräte anschließen müssen. Es verfügt auch über grundlegende Benutzereingabefunktionen, da Sie den Buchstaben X auf der Arduino-Karte eingeben müssen, um einen analogen Messwert zu erhalten. Auf diese Weise wird der universellste Bedarf an Eingabe- und Ausgabefunktionen dank des USART befriedigt.

Beachten Sie, dass Sie nach dem Hochladen dieses Codes auf den seriellen Monitor in Ihrem Compiler klicken, die Baudrate auswählen müssen, die Ihrem Code entspricht (in diesem Fall 9600), den Monitor schließen und erneut öffnen müssen. Dann müssen Sie X in die Leiste oben eingeben und die Eingabetaste drücken, um zu sehen, ob die Ausgabe funktioniert. Wenn die Baudraten nicht übereinstimmen, wird Müll herauskommen.

void setup () {Serial.begin (9600); } void loop () {Byteeingabe = Serial.read (); if (input == 'X') {int sensorValue = analogRead (A0); Serial.println (sensorValue); }}

SPI

Was ist es?

Es ist ein Kommunikationsprotokoll, mit dem Sie ein oder mehrere Peripheriegeräte mit Ihrem Arduino steuern können. Viele Sensoren und Anzeigen erfordern dieses Protokoll, um Daten mit dem Arduino hin und her zu übertragen. Es ist einfach in der Ausführung und schnell, verbraucht aber viele separate Drähte an Ihrem 328.

Was ist ein häufiges Beispiel?

Sie möchten einen Benutzeroberflächenbildschirm für ein Mehrzweck-Ladegerät erstellen, auf dem Sie alle Batterieparameter eingeben und Ihren Lade- oder Entlademodus auswählen können. Sie möchten gleichzeitig Echtzeit-Sensordaten auf einem anderen Bildschirm anzeigen. Sie können das SPI-Protokoll verwenden, um auf beide Anzeigen gemäß ihren Chipauswahlstiften zuzugreifen, sodass jede Anzeige im Wesentlichen zur gleichen Zeit unterschiedliche Informationen anzeigen und die meisten der gleichen Verbindungspunkte gemeinsam nutzen kann.

Wie benutze ich es?

Sie müssen mindestens passende Kabel zwischen Ihrem Arduino und dem Peripheriegerät anschließen für: VCC, GND, MISO, MOSI, SS (oder CS), SCK. Wenn Sie nur 1 Gerät ansteuern, können Sie manchmal den SS / CS-Pin überspringen, und wenn das Gerät nur für den Slave-Betrieb geeignet ist, können Sie manchmal auch den MISO-Pin überspringen. Diese Pins können über Ihre Skizze, die SPI im Softwaremodus ausführt, willkürlich verschiedenen E / A-Pins auf Ihrer Arduino-Karte zugewiesen werden, oder Sie können die vordefinierten Hardware-Pins im ICSP-Header verwenden, die SPI im Hardwaremodus ausführen (schneller) ). Die ICSP-Pinbelegung zeigt an, welcher Pin was tut.

In Bezug auf Ihre Skizze müssen Sie die SPI.h-Bibliothek und die gerätespezifische Bibliothek angeben, die für die Schnittstelle erforderlich ist. Dann müssen Sie eine Art Initialisierungsbefehl ausgeben, der von Gerät zu Gerät unterschiedlich ist, aber normalerweise die oben genannten Pin-Positionen definiert, wenn Sie in Software ausgeführt werden. Unten finden Sie eine verkleinerte Beispielskizze für die Steuerung eines SPI OLED-Displays. Dieses Programm wird später im I2C-Abschnitt erscheinen. Sehen Sie sich also genau an, wie sie sich unterscheiden.

#include SPI.h> #include Adafruit_GFX.h> #include Adafruit_SSD1306.h> // Bei Verwendung von Software-SPI (Standardfall): #define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 Adafruit_SSD1306-Anzeige (OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); #define LOGO16_GLCD_HEIGHT 16 #define LOGO16_GLCD_WIDTH 16 void setup () {display.begin (SSD1306_SWITCHCAPVCC); display.display (); Verzögerung (2000); display.clearDisplay (); display.drawPixel (10, 10, WHITE); display.display (); Verzögerung (2000); display.clearDisplay (); } void loop () {}

I2C (I "Quadrat" C)

Was ist es?

Ein anderes Kommunikationsprotokoll ähnlich SPI. Der Unterschied besteht darin, dass weniger Kabel benötigt werden und Sie viel mehr Geräte anschließen können, indem Sie dieselben 2 Kabel verwenden, während SPI mehr Kabel für zusätzliche Geräte benötigt. Der Nachteil ist, dass I2C langsamer als SPI ist. Einige Geräte sind sowohl in SPI- als auch in I2C-Ausführung erhältlich, z. B. OLED-Displays.

Was ist ein häufiges Beispiel?

Sie erwerben einen IMU-Sensor (Inertial Measurement Unit), eine Einplatinenlösung mit 3 verschiedenen Sensorchips: 1 Magnetometer, 1 Gyroskop und 1 Beschleuniger. Während dies von außen 1 Sensor zu sein scheint, ist es in Bezug auf Ihren Code tatsächlich 3. Sie würden das I2C-Protokoll verwenden, um mit den spezifischen Hardwarefunktionen jedes Chips zu kommunizieren, da Sie mit I2C mehrere Geräte auf denselben Daten- und Taktleitungen zusammenfassen können, indem Sie mithilfe der Softwareadressierung jeweils ein Gerät auf derselben gemeinsam genutzten Pipeline unterscheiden und aktivieren.

Wie benutze ich es?

Für jedes Gerät, das Sie von Ihrem 328 aus betreiben, ist die Pinbelegung beschriftet (ich hoffe). Sie müssen nur 4 Pins finden: VCC, GND, SDA, SCL. Manchmal sagt VCC 5V oder 3,3V, aber egal welche Spannung benötigt wird, es gibt einen Pin an Ihrem Arduino, um ihn zu versorgen. Verwenden Sie also einfach den entsprechenden Stromanschluss. GND ist immer gleich und Sie brauchen das, SDA ist analoger Pin A4 und SCL ist analoger Pin A5. Ordnen Sie einfach alle 4 Pins auf Ihrem Arduino-Board und Ihrem Gerät zu.

Was nun den Code betrifft ... es hängt ganz davon ab, welche Art von Gerät Sie verwenden, daher gibt es keine universelle Antwort. Der einzige universelle Teil davon ist, dass Sie die Wire.h-Bibliothek benötigen und einen Initialisierungsbefehl ausgeben müssen, unabhängig davon, ob er in der Gerätebibliothek enthalten ist, oder einen einfachen wire.begin () oder was auch immer.

Ich kann nicht vorhersagen, wie Ihr Code aussehen wird, da er je nach Gerät unterschiedlich ist. Wenn Sie sich jedoch das folgende Beispiel ansehen, handelt es sich um ein abgespecktes Programm, das ein OLED-Display steuert. Achten Sie besonders darauf, dass es die Drahtbibliothek aufruft, das Gerät anhand seiner HEX-Adresse (0x3D) identifiziert und mit Befehlen, die für dieses OLED-Gerät typisch sind, ein einzelnes Pixel auf den Bildschirm druckt. I2C verfügt möglicherweise nicht über eine universelle Ausführung, aber es ist nicht allzu schwer, dies herauszufinden, wenn Sie nur das Gerät nachlesen, das Sie ausführen möchten.

#include Wire.h> #include Adafruit_GFX.h> #include Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306-Anzeige (OLED_RESET); #define LOGO16_GLCD_HEIGHT 16 #define LOGO16_GLCD_WIDTH 16 void setup () {display.begin (SSD1306_SWITCHCAPVCC, 0x3D); display.display (); Verzögerung (2000); display.clearDisplay (); display.drawPixel (10, 10, WHITE); display.display (); Verzögerung (2000); display.clearDisplay (); } void loop () {}

Watchdog Timer

Was ist es?

Es ist ein spezieller Timer, der die CPU überwacht und nach regelmäßigen Statusaktualisierungen sucht, um sicherzustellen, dass alles in Ordnung ist. Wenn der Code fehlerhaft funktioniert und die CPU hängt oder wenn ein Hardwarefehler einen ähnlichen Fehler bei der Ausführung verursacht, läuft der Watchdog-Timer ab und kann die Arduino-Karte zurücksetzen. Da der Watchdog unabhängig von der CPU ausgeführt wird, verfügt er über einen eigenen separaten Oszillator und kann die CPU auch im Ruhezustand aktivieren.

Watchdog-Timer sind sehr nützlich, wenn Sie Code über längere Zeiträume mit Ruheintervallen ausführen oder wenn Sie erwarten, dass unsicheres Programmverhalten auftritt und das Gerät nicht für immer hängen bleiben soll. Wenn Ihr Code nicht hängt, muss er den Hund "treten", um zu verhindern, dass er Ihr Board zurücksetzt. Dies bedeutet im Grunde, dass ein "OK" -Signal an den Hund gesendet wird, damit keine Zeitüberschreitung auftritt.

Was ist ein häufiges Beispiel?

Sie versuchen, eine Arduino-Karte zu verwenden, um mit einer anderen zu kommunizieren. Die zweite Karte ist in verschiedenen Bereitschaftszuständen mit verschiedenen Sensoren verbunden. Bei der Programminitialisierung möchten Sie die zweite Karte und alle ihre Sensoren überprüfen, um sicherzustellen, dass sie zur Datenübertragung bereit sind, bevor Sie mit Ihrem Code fortfahren. Bei jeder Überprüfung kann Ihr Programm möglicherweise hängen bleiben, wenn der Sensor nicht ordnungsgemäß eingeschaltet und initialisiert ist.

Sie möchten sicherstellen, dass Ihr Hauptprogramm nicht für immer an einem nicht reagierenden Sensor hängt, sondern sich nach einer bestimmten Zeit selbst zurücksetzt. Sie programmieren den Watchdog-Timer daher so, dass nur so lange gewartet wird, bis alle Sensoren bereit sind. Wenn einer von ihnen während der Abfrage hängt, läuft der Watchdog ab und setzt das Hauptprogramm zurück, sodass es seine Überprüfungen erneut durchläuft. Wenn alle Überprüfungen erfolgreich sind, wird der Watchdog "getreten", um ein Zurücksetzen des Programms zu verhindern, und das Hauptprogramm kann wie geplant fortgesetzt werden.

Wie benutze ich es?

Der folgende Code ist ein grundlegendes Beispiel für die Verwendung des Watchdog-Timers zum Unterbrechen und anschließenden Zurücksetzen des 328 aufgrund einer Endlosschleife (die das Programm im Wesentlichen für immer hängen lassen kann).

Es funktioniert, indem zuerst der Watchdog-Timer zurückgesetzt und dann konfiguriert wird. Die 2 Register, denen Binärwerte zugewiesen wurden, setzen beide die WDT-Registerbits, so dass der Watchdog in 8 Sekunden eine Zeitüberschreitung aufweist, Interrupts aktiviert und das Zurücksetzen aktiviert. In der Schleifenfunktion geben wir dann eine Schleife ein, die die "korrekte" Programmausführung simuliert, wobei der Hund nach jeder Schleife über wdt_reset () getreten wird, um anzuzeigen, dass das Programm korrekt funktioniert. Dies dauert etwa 5 Sekunden. Danach tritt das Programm in eine zweite Schleife ein, diesmal ohne Beendigungsbedingung. Dies simuliert eine fehlerhafte Ausführung, was zu einer Endlosschleife führt.

Nach 8 Sekunden dieser Schleife wird der Hund nicht getreten, sodass die Endlosschleife automatisch unterbrochen wird, was daran erkennbar ist, dass die LED auf LOW gesetzt ist. Schließlich setzt der Hund den 328 zurück und der Code beginnt von vorne. Dies ist nur ein Prototyp für Ihre persönliche Anwendung, zeigt jedoch sowohl die korrekte als auch die fehlerhafte Programmausführung und wie der Watchdog-Timer bei korrekter Konfiguration funktioniert. Sie können Ihren Code um dieses Beispiel herum erstellen, indem Sie einfach die WDTCSR-Registerbits gemäß dem 328-Datenblatt ändern, um das gewünschte Watchdog-Timeout und Timeout-Verhalten zu erhalten.

Hinweis: Einige Nano-Boards (insbesondere die Klone) funktionieren nicht mit dem WDT. Was passiert ist, das Programm wird gut ausgeführt, der WDT wird die Karte unterbrechen und zurücksetzen, wenn sie hängt, aber dann wird die Karte nicht neu gestartet. Dies liegt an einem Fehler im Bootloader, der nie behoben wurde. Die Lösung für dieses Problem besteht darin, den Bootloader von der Nano-Version auf die Uno-Version zu ändern, sodass der Nano im Wesentlichen den Eindruck erweckt, es sei ein Uno.

Da sie so ähnlich sind, ist dies in 99,9% der Fälle kein Problem, aber um die Änderung vorzunehmen, benötigen Sie 2 Karten, eine Uno als Programmierer und die zu programmierende Karte. Sie müssen auch die ICSP-Header-Drähte zwischen den beiden Karten anschließen und eine spezielle Skizze hochladen, die den neuen Bootloader brennt.

#include avr / wdt.h> void setup () = B00011000; WDTCSR = B01101001; sei (); void loop () {int i = 0; während (i 5) {Verzögerung (1000); wdt_reset (); i ++; } while (1) Verzögerung (50); } ISR (WDT_vect) {digitalWrite (13, LOW); }}

2 Hardware-Interrupts

Was ist es?

Ein Interrupt ist eine Funktion, mit der die Codeausführung gestoppt werden kann, unabhängig davon, wo sie sich gerade befindet, sodass an ihrer Stelle etwas anderes getan werden kann. Dies wird am häufigsten benötigt, wenn Sie darauf warten, dass etwas passiert, aber Sie wissen nicht, wann es passieren wird, und Sie können es sich nicht leisten, zu warten, um es in einer Schleifenstruktur zu überprüfen. Wenn Sie einen Sensor überwachen, der normalerweise nicht aktiv ist, und sofort Maßnahmen ergreifen möchten, wenn sich sein Status ändert, benötigen Sie eine Unterbrechung, damit Sie, wenn der Sensor das richtige Signal gibt, aufhören, was Sie tun, und ein kleines Stück davon ausführen Code, um mit dem Sensorlesen umzugehen und dann dort fortzufahren, wo Sie aufgehört haben.

Jeder Pin kann als Interrupt konfiguriert werden, es sind jedoch zwei spezielle Hardware-Interrupts bestimmten Pins zugeordnet. Diese sind viel schneller, da sie fest mit dem Chip verbunden sind und nicht auf Software angewiesen sind, um die Interrupt-Funktion zu emulieren.

Was ist ein häufiges Beispiel?

Sie möchten die Drehzahl eines Motors anhand eines an der Welle angebrachten optischen Encoders messen. Das Intervall der Impulse vom Encoder variiert mit der Motordrehzahl, sodass Sie nicht einfach in regelmäßigen Abständen nach den Impulsen suchen können oder sie möglicherweise übersehen. Daher erhalten Sie die Impulse, um dem Programm mitzuteilen, wann sie ankommen, indem Sie die Encoderleitung an einen der Hardware-Interrupt-Pins anschließen. Wenn der Pin einen Impuls erkennt, fordert er das Programm auf, anzuhalten, die Zeit zu überprüfen und eine schnelle Berechnung durchzuführen, um die Dauer seit dem letzten Impuls zu messen. Die Umkehrung dieser Dauer ist die Drehzahl des Motors.

Wie benutze ich es?

Es gibt eine Arduino-Funktion namens attachInterrupt (Pin, ISR, Modus), die zuerst einen bestimmten Pin als Interrupt-Pin bestimmt, welche Routine ausgeführt wird, wenn der Interrupt auftritt und wie der Interrupt ausgelöst wird (zum Beispiel, wenn der Pin den Status von wechselt Absteigend). Die Routine, die Sie ausführen, wird als ISR bezeichnet. Sie können ihm einen Namen Ihrer Wahl geben und ihn einfach in der Zeile attachInterrupt referenzieren.

Der Inhalt des ISR sollte EXTREM KURZ sein. Dies liegt daran, dass das Unterbrechen Ihres Codes alles stoppt, bis der ISR abgeschlossen ist. Wenn der Hauptcode zeitkritisch war, möchten Sie diesen Code so schnell wie möglich fortsetzen. Daher ändern ISRs häufig einfach ein boolesches Flag und lassen den Hauptcode in der nächsten Schleife damit umgehen, indem sie das Flag überprüfen und etwas tun. Im folgenden Beispiel wird ein Flag umgeschaltet, das das Hauptprogramm auffordert, die LED des Nanos einzuschalten.

Eine andere Sache ist, dass jede Arduino-Karte unterschiedliche Hardware-Interrupt-Pins und IDs hat. Auf den Nanostiften 2 und 3 befinden sich INT.0 bzw. INT.1. Stellen Sie sicher, dass Sie in Ihrer Funktion attachInterrupt auf Letzteres verweisen (im Beispiel 0). Wenn Sie den Pin jedoch als Eingang einrichten, müssen Sie die normale Pin-ID (2) verwenden. Sei einfach vorsichtig damit. Beachten Sie auch, dass wir im Pin-Setup einen speziellen Eingabemodus namens INPUT_PULLUP verwenden. Dies ist wie INPUT, außer dass der Pin gezwungen wird, bei 5 V zu bleiben, es sei denn, ein echtes Signal treibt ihn auf einen anderen Pegel.

Dies ist wichtig, wenn Sie sich über die Qualität des Eingangs an einem bestimmten Pin nicht sicher sind. Manchmal, wenn ein Signal fehlt oder schwach ist, kann der Stift aufgrund statischer oder elektrischer Felder in der Luft herumschweben und einen beliebigen Wert zufällig anzeigen. Dies kann zu allen möglichen falschen Interrupts und anderem Wonky-Verhalten führen. Insbesondere bei Interrupts, die zum Erkennen von Änderungen der PIN-Ebene eingerichtet wurden, möchten Sie den INPUT_PULLUP-Modus verwenden.

Boolescher Turnon = false; void setup () {pinMode (2, INPUT_PULLUP); attachInterrupt (0, interruptRoutine, CHANGE); } void loop () {if (turnon == true) {pinMode (13, OUTPUT); digitalWrite (13, HIGH); }} void interruptRoutine () {turnon =! turnon; }}

Energiesparzustände

Was ist es?

Grundsätzlich benötigen alle Funktionen des Arduino-Chips Strom, um zu funktionieren. Je mehr Funktionen Sie verwenden, desto mehr Strom wird benötigt. Selbst wenn Funktionen nicht verwendet werden, bedeutet die Tatsache, dass sie aktiviert sind, dass sie Strom verschwenden. Sie können verschiedene Funktionen ausschalten, einschließlich der CPU selbst, und den Chip in verschiedenen Zuständen mit geringem Stromverbrauch belassen.

Der Hauptunterschied zwischen den Energiesparmodi und dem Abschalten der Stromversorgung besteht darin, dass in jedem Energiesparmodus immer noch etwas eingeschaltet ist, das die Platine aufwecken und die volle Leistung wiederherstellen kann. Der Stromverbrauch dieser minimalen Keep-Alive-Komponenten ist jedoch extrem gering und kann tragbare Batteriequellen für Tage / Wochen / Monate aufbewahren, an denen sie ansonsten innerhalb weniger Stunden gestorben sein könnten.

Was ist ein häufiges Beispiel?

Sie verwenden ein Arduino-Board, um einen Servomechanismus zu steuern, der Sonnenkollektoren auf die Sonne richtet. Nachts muss das Servo natürlich nicht gesteuert werden, sodass das Board in einen Energiesparmodus versetzt werden soll, damit es länger hält und keinen Strom verschwendet. Sie programmieren die Karte so, dass sie in einen Energiesparzustand wechselt, wenn die Panel-Spannung für einen bestimmten Zeitraum unter einem bestimmten Wert bleibt, was darauf hinweist, dass es Nacht ist. Wenn die Spannung am nächsten Morgen ansteigt, leiten Sie diese Spannung an das Gate eines MOSFET, das einen Hardware-Interrupt-Pin erdet. Da dieser Pin normalerweise auf 5 V gezogen wird, aktiviert der plötzliche Abfall auf 0 V aufgrund der Erregung des Transistorgates das Interrupt-System und bringt den 328 aus dem Ruhezustand.

Wie benutze ich es?

Der folgende Code zeigt 1 von 6 verschiedenen Schlafmodi, die als Power Down bezeichnet werden. Dies ist nicht nur ein häufig verwendeter Ruhemodus, sondern spart auch die meiste Energie, indem fast alles auf der Platine heruntergefahren wird (mit Ausnahme des WDT und der 2 Hardware-Interrupts des 328). Daher sind die WDT- und Interrupt-Pins die einzige Möglichkeit, aus diesem Ruhemodus aufzuwachen. Unten sehen Sie, dass der Code zuerst Pin 2 als INPUT_PULLUP definiert. Dies ist ein Eingang, bei dem der Spannungspegel normalerweise hoch ist (5 V). Pin2 ist einer der speziellen Hardware-Interrupt-Pins. Weitere Informationen finden Sie in diesem Abschnitt.

Als nächstes aktivieren wir die Funktionen für den Schlafmodus im Allgemeinen, überprüfen, ob der Interrupt-Pin hoch ist (damit wir prüfen können, ob er niedrig ist), "hängen" den Interrupt an, damit er aktiv überwacht wird, und stellen dann den Schlafmodus ein in den Power Down-Modus. Dann müssen wir den 328 nur noch einschläfern lassen. Möglicherweise stellen Sie fest, dass die nächste Zeile den Ruhezustand deaktiviert, aber denken Sie daran, dass der 328 zu diesem Zeitpunkt bereits in den Ruhezustand wechselt, sodass die Programmausführung angehalten wird und diese Anweisung erst ausgeführt wird, wenn Sie sie aktivieren.

Zu diesem Zeitpunkt ist alles eingefroren und wir warten nur darauf, dass Pin 2 den 328 aufweckt. Wenn dies der Fall ist, wird der Ruhemodus deaktiviert und der Interrupt getrennt. Dies ist wichtig, da sonst die CPU in einer Schleife stecken bleiben könnte, solange Pin 2 geerdet bleibt, und es auch möglich ist, dass der 328 in den Ruhezustand wechselt, bevor das Interrupt-System bereit ist, ihn wieder zu aktivieren. Das Timing ist alles, daher müssen Sie ausfallsicheren Code einbauen, um sicherzustellen, dass nichts Seltsames passiert, wenn die Bedingungen nicht Ihren Erwartungen entsprechen. Mit dieser Skizze können Sie den Ruhemodus testen, indem Sie Pin 2 für einen kurzen Moment nach dem Erlöschen der LED mit Masse kurzschließen. Die LED sollte wieder aufleuchten, um anzuzeigen, dass der 328 erfolgreich aufgewacht ist.

Noch etwas: Tun Sie nicht das, was ich getan habe, und schalten Sie die LEDs in Ihrer Interrupt-Routine ein. Ich habe das zu Demonstrationszwecken gemacht, aber es ist eine schlechte Form, irgendetwas in einer Interrupt-Routine zu tun, die nicht blitzschnell ist. Im wirklichen Leben warten möglicherweise andere Ereignisse (andere Interrupts oder kritisch zeitgesteuerte Funktionen) darauf, während der Code unterbrochen wird, sodass Sie ihn kurz und schnell halten möchten.

#include avr / interrupt.h> #include avr / sleep.h> Byte pin2_interrupt_flag = 0; void setup () {pinMode (2, INPUT_PULLUP); PinMode (13, OUTPUT); digitalWrite (13, HIGH); } void loop () {delay (5000); sleep_enable (); if (digitalRead (2)) pin2_interrupt_flag = 0; if (pin2_interrupt_flag == 0) attachInterrupt (0, pin2_isr, LOW); set_sleep_mode (SLEEP_MODE_PWR_DOWN); cli (); sleep_bod_disable (); sei (); digitalWrite (13, LOW); sleep_cpu (); sleep_disable (); } void pin2_isr () {sleep_disable (); removeInterrupt (0); pin2_interrupt_flag = 1; digitalWrite (13, HIGH); }}

22 Digitale E / A-Pins

Was ist es?

Dies ist die grundlegendste Funktion eines Mikrocontrollers. Diese Pins können Ein- oder Ausgänge sein und erkennen nur zwei Zustände: Hoch und Niedrig. Hoch ist die Spannung, die der logischen Hochspannung (in diesem Fall 5 V) entspricht, und niedrig entspricht der logisch niedrigen Spannung (0 V). Als Eingang können diese Pins eine 0 oder eine 1 zurückgeben, je nachdem, ob sie ein 0-V- oder 5-V-Signal am Pin erkennen. Als Ausgänge können Sie sie als hoch oder niedrig empfehlen und sie drücken eine Spannung von 5 V oder 0 V am Pin aus. Dies ist äußerst nützlich, um Schalter zu aktivieren oder Statusänderungen für andere digitale Geräte mit Logikpegeleingängen anzuzeigen.

Was ist ein häufiges Beispiel?

Sie entwerfen einen farbigen Toilettensitz mit LEDs, damit Sie im Dunkeln pinkeln UND einen Anfall bekommen können. Angenommen, jede LED derselben Farbe wurde zusammengeschaltet, können Sie sie aktivieren, indem Sie ein einzelnes digitales HIGH-Signal an einen Transistor mit Logikpegel senden, der den Stromfluss von einer Stromversorgung zu den LEDs steuert. Jede Farbe hätte einen eigenen Transistor, der von einem anderen digitalen E / A-Pin gesteuert wird. Der Arduino-Code würde einfach entscheiden, welcher digitale Pin zu welcher Zeit und für wie lange auf HIGH oder LOW gesetzt werden soll, um eine choreografierte Lichtshow zu produzieren.

Wie benutze ich es?

Sie können einen bestimmten Pin für die Eingabe oder Ausgabe im Block setup () {} festlegen. Abhängig von der Zuweisung, die Sie diesem Pin gegeben haben, können Sie entweder den Logikpegel dieses Pins steuern oder lesen, wie hoch der Logikpegel darauf ist Stift. Um beispielsweise die Pin-Nummer D8 am Nano auf einen Eingang und D9 am Nano auf einen Ausgang zu setzen und dann den Pegel von D8 zu lesen und D9 auf HIGH zu setzen, gehen Sie folgendermaßen vor:

int pin8level; void setup () {pinMode (8, INPUT); PinMode (9, OUTPUT); } void loop () {digitalWrite (9, HIGH); pin8level = digitalRead (8); }}

Analoger Komparator

Was ist es?

Ein Komparator vergleicht, wie der Name schon sagt, zwei Spannungseingänge miteinander und gibt einen digitalen Zustand aus (häufig dargestellt durch eine Logikpegelspannung), der davon abhängt, welcher der Eingänge größer ist. Wenn zum Beispiel der erste Eingang eine größere Spannung als der zweite hat, kann der Ausgang "HIGH" sein und bei der Spannung bleiben, die HIGH darstellt. Wenn dieser erste Eingang dann sogar geringfügig unter den zweiten fällt, schwingt der Ausgang plötzlich "LOW" auf die Spannung, die dies darstellt (häufig 0 V), und zwar schrittweise und ohne reibungslosen Übergang. Komparatoren werden häufig für logische Operationen verwendet, bei denen ein TRUE oder ein FALSE die Größe eines Eingangs angeben soll, der einen anderen überschreitet. Es gibt viele Anwendungen für diese Art von Funktion.

Was ist ein häufiges Beispiel?

Sie fügen einem Batterieladegerät eine Anzeigelampe hinzu, die den Benutzer darüber informiert, ob und wann die von einem Knopf gesteuerte Versorgungsspannung die Spannung der zu ladenden Batterie erreicht oder überschritten hat. Sobald der Akku mit dem Ladegerät verbunden ist, wird ein mit dem Pluspol verbundenes Kabel mit dem D7-Arduino-Pin verbunden, während die Ausgangsspannung des Ladegeräts mit D6 verbunden wird. Wenn der Benutzer den Drehknopf dreht und die Ladespannung erhöht, steigt die Spannung an D6 an, bis sie die Referenzspannung an D7 überschreitet. Erst zu diesem Zeitpunkt gibt der Komparator ein HIGH-Ergebnis zurück und löst die Kontrollleuchte am Ladegerät aus.

Wie benutze ich es?

Wenn Sie den folgenden Code untersuchen, werden Sie feststellen, dass die Ausführung sehr einfach ist und sich nicht wesentlich von anderen 328-Funktionen unterscheidet, die wir zuvor aktiviert haben. In diesem Fall müssen Sie ein einzelnes Register konfigurieren und die Bits (gemäß Datenblatt 328) ändern, um das gewünschte Verhalten zu aktivieren. In diesem Fall wollen wir den Komparator einschalten, Interrupts aktivieren und sie bei einer "steigenden Flanke" aktivieren. Dies bedeutet, dass der Komparator einen HIGH-Logikpegel zurückgibt, wenn Ihre D6-Spannungsreferenz Ihren D7 überschreitet, was bedeutet, dass die 0-V-Leitung plötzlich auf den hohen Logikpegel ansteigt oder "ansteigt". Dies ist eine steigende Flanke. Sie können Interrupts auch bei einer fallenden Flanke aktivieren, in diesem Beispiel jedoch nicht.

Wie zu erwarten ist, gibt es auch eine Interrupt-Routine, die bei dieser ansteigenden Flanke aufgerufen wird und in diesem Fall dazu führt, dass die LED aufleuchtet. Diese grundlegende Codevorlage kann einfach angepasst werden, um die Anforderungen Ihrer Anwendung zu erfüllen. Sie können verwirrt sein, warum D6 und D7 zum Vergleichen von analogen Spannungseingängen verwendet werden.

Alles, was ich sagen kann, ist, dass der 328 auf mysteriöse Weise funktioniert und die interne Verkabelung, wie einige komplexe Rohrleitungen in einem Gebäude, voller Ventile ist, die den Stromfluss je nach Einrichtung ihrer Register zu verschiedenen Stiften umleiten können. D6 und D7 wurden speziell ausgewählt, um als + und - Eingangskanäle für den Komparator zu dienen. Versuchen Sie nach dem Hochladen des folgenden Codes, die Stifte D6 und D7 gleichzeitig mit Ihrem Finger zu berühren.

Führen Sie Ihren Finger hin und her und beobachten Sie, wie die LED flackert. Was Sie tatsächlich tun, ist, die Stifte an einem großen Widerstand (Ihrem Finger) kurzzuschließen und die Spannungen nahezu identisch zu machen. Es verwirrt den 328, da es versucht herauszufinden, welche Spannung größer ist und das Licht flackert, wenn der Komparator zwischen LOW und HIGH hin und her wechselt.

void setup () (1 ACI) void loop () {} ISR (ANALOG_COMP_vect) {digitalWrite (13 ,! digitalRead (13)); }}

Das Board-Layout

Von der Arduino-Produktlinie mag ich den Nano, weil er alle Funktionen des 328 bietet, aber in einem sehr kleinen Paket, das Steckbrett-freundlich ist, native USB-Funktionalität zum Hochladen Ihrer Skizzen UND einen eingebauten Leistungsregler bietet kann ihm eine ziemlich willkürliche Spannung zuführen, ohne sich zu viele Gedanken über das Sprengen der Platine zu machen.

Der Nano verfügt über viele Pins, auf die der Benutzer zugreifen kann. Einige davon befassen sich mit Strom, andere mit digitaler E / A, andere mit analogem Eingang und andere mit Kommunikation. Nicht wenige Pins haben je nach Programmierung mehr als eine Funktion. Beispielsweise werden viele der digitalen und analogen Pins gegebenenfalls auch für die Kommunikation mit Peripheriegeräten verwendet. Sofern der von Ihnen hochgeladene Code nicht angibt, dass die Karte auf diese Weise verwendet werden soll, erfüllen die Pins nur ihre Hauptfunktion. Selbst dann müssen die meisten Pins, die Sie verwenden möchten, zuerst eingerichtet werden, bevor sie tatsächlich aktiv werden. Schauen wir uns die Pinbelegung des Nano genauer an.

Zuerst hast du deine Power Pins. Sie haben VIN (geregelt + Spannungsversorgung), 2 GND-Pins (Masse oder 0 V), 5 V (ein gemeinsamer Logikpegel HIGH, mit dem die Karte selbst oder andere Peripheriegeräte von der Karte versorgt werden können), 3 V3 (3,3 V in oder out (eine gemeinsame Versorgungsspannung für Prozessoren aller Art) und 2 RST-Pins (Durch Erdung dieses Pins über einen eingebauten Druckknopf wird das Programm zurückgesetzt).

Als nächstes kommen alle Ihre digitalen E / A.Diese sind mit dem Buchstaben D gefolgt von einer Zahl gekennzeichnet. Der Nano hat die Pins D2 bis D13, aber in Wirklichkeit können sich alle analogen Pins + TX und RX auch als digitale Pins verhalten, wodurch sich die Gesamtzahl auf 22 erhöht (gemäß den obigen Spezifikationen).

Im weiteren Verlauf haben wir die oben genannten analogen Eingangsstifte. Diesen wird der Buchstabe A entsprechend vorangestellt. Sie haben A0 bis A7 für insgesamt 8 und diese werden alle gemultiplext, sodass jeweils nur 1 überprüft werden kann.

TX und RX sind digitale E / A-Pins, die hauptsächlich zum Senden und Empfangen von seriellen Daten verwendet werden. Diese Pins können anstelle der USB-Buchse für die Kommunikation mit dem 328 verwendet werden.

Dann haben wir einen ungewöhnlichen Cluster von 6 Pins, die zusammen als ISCP-Header bezeichnet werden und im Grunde dedizierte Hardwareleitungen für die SPI-Kommunikation mit Peripheriegeräten sind. Dies ist praktisch, wenn Sie beispielsweise ein OLED-Display mit Strom versorgen müssen, da alle benötigten Strom- und Signalleitungen vorhanden sind.

Die einzige Besonderheit ist der AREF-Pin, eine Spannungsreferenz, die Sie willkürlich als Maximalwert für Ihre analogen Eingangsstifte auswählen können. Wenn Sie also möchten, dass Ihre Analogeingangspins aus irgendeinem Grund von 0 bis 4 V messen, stellen Sie an diesem Pin die obere Spannung ein.

Die Arduino Software-Umgebung

Um Ihre Mikrocontroller-Karte verwenden zu können, müssen Sie "Skizzen" hochladen, was nur ein ausgefallener Name für ein Programm ist. Die Programmierumgebung ist kostenlos und einfach zu bedienen. Die Anweisungen auf niedriger Ebene, die der Chip versteht, werden automatisch aus der übergeordneten und vertrauten C-Sprache konvertiert, mit der Sie Ihr Programm schreiben. Daher müssen Sie nichts über die Assemblersprache des 328 wissen. Neben C gibt es einige andere Snippets aus Java, C ++ und nativen Arduino-Funktionen, mit denen Sie das gesamte Potenzial des 328 ausschöpfen können. Lass dich davon aber nicht erschrecken.

Die Arduino-Funktionen sind auf den Hilfeseiten im Internet gut dokumentiert und in ihrer Syntax sehr offensichtlich. Alle anderen Codes, die Sie schreiben, um die Variablen, Logik und Schleifenstrukturen zu diktieren, werden direkt aus C gerippt.

Eine kleine Besonderheit ist, dass alle Arduino-Programme zwei spezifische Teile haben müssen: einen Setup-Block und einen Loop-Block. Abgesehen von der Tatsache, dass sie physisch in Ihrem Code vorhanden sein müssen, müssen Sie sich keine Gedanken darüber machen, warum sie dort vorhanden sind. Es ist nur eine Formalität. Wenn Sie möchten, können Sie Ihr gesamtes Programm in den void void () {} -Block schreiben. Dieser Block wird nach Beendigung eine Schleife ausführen. Wenn Sie dies nicht möchten, können Sie Ihren Code einfach so gestalten, dass er nicht endet. Eine einfache Weile (1) {} wird das tun. Wir möchten jedoch häufig, dass der Code eine Schleife durchläuft, da wir die Umgebung beispielsweise ständig mit Sensoren abtasten und überwachen müssen. Die Loop-Funktion ist also praktisch und steht Ihnen zur Verfügung.

So würde eine vollständig leere Skizze aussehen, die kompiliert und hochgeladen werden kann (dh es handelt sich um eine vollständige Skizze):

void setup () {

}

void loop () {

}

Setup ist der Ort, an dem Sie Ihre Ein- und Ausgänge konfigurieren, Register konfigurieren und im Grunde die Board- und Chip-Funktionen so vorbereiten, dass sie funktionieren, wie es das Programm später vorschreibt. Die Schleifenfunktion soll der Ort sein, an dem Ihr Code den vorkonfigurierten Pins mitteilt, was und wann zu tun ist. Sie müssen dieser Philosophie nicht unbedingt folgen, aber es ist eine gute Idee. Das Setup wird immer zuerst und nur einmal ausgeführt. Loop läuft von Natur aus für immer, es sei denn, Sie tun etwas, um es zu stoppen.

Sobald Sie das Arduino SDK heruntergeladen und installiert haben, können Sie am schnellsten in Ihr erstes Programm springen, indem Sie eine Beispieldatei wie BLINK öffnen. Sie finden es im Menü (Datei> Beispiele> 01.Basics). Löschen Sie einfach den Code in den Setup- und Loop-Blöcken und ersetzen Sie ihn durch Ihren eigenen. Denken Sie daran, alle erforderlichen Bibliotheken oben einzuschließen und Ihre globalen Variablen zu deklarieren. Wenn Sie nicht wissen, welche Bibliotheken Sie möglicherweise benötigen, lesen Sie erneut die Beispielskizzen, die sich auf das beziehen, was Sie tun möchten. Die Bibliotheken werden dort geschrieben.

Selbst wenn Sie Ihrem Code die richtigen Bibliotheken hinzufügen, haben Sie diese möglicherweise nicht auf Ihrem Computer. Es ist jedoch einfach, eine Bibliothek zu googeln und herunterzuladen (oft von Github). Sobald Sie dies getan haben, sichern Sie den Ordner einfach in dem Ordner Arduino Libraries in Ihrer Arduino-Installation. Starten Sie den Compiler neu und die Bibliothek wird verfügbar sein, ebenso wie alle Beispielskizzen.

Sobald Sie mit dem Schreiben Ihrer Skizze fertig sind, können Sie "Überprüfen" (Häkchen oben links) überprüfen. Dadurch wird Ihr Code auf Fehler überprüft und die Skizze dann auf Ihr Board "hochgeladen" (Pfeilschaltfläche neben "Überprüfen"). Bevor Sie dies tun, gehen Sie zuerst zu Extras im Menü und wählen Sie Ihre Karte, Ihren Prozessor und Ihren Port aus. Ein Beispiel für das Board wäre Arduino Nano. Der Prozessor könnte ATMEGA328 und der Port sein ... nun, das hängt davon ab, an welchen Port Sie Ihr USB-Kabel anschließen. Um den richtigen Anschluss zu ermitteln, rufen Sie das CONTROL PANEL Ihres Computers auf, gehen Sie zu SYSTEM, dann zu HARDWARE und dann zu DEVICE MANAGER und scrollen Sie nach unten, bis Sie PORTS sehen.

Schließen Sie jetzt einfach Ihr Arduino-Board an einen beliebigen USB-Anschluss an (oder ziehen Sie es ab und stecken Sie es wieder ein) und sehen Sie sich die Liste an, um zu sehen, welches neue Element angezeigt wird. Die dem neuen Artikel zugeordnete COM-Nummer ist Ihre PORT-Nummer. Gehen Sie zurück zum Compiler, wählen Sie diese Nummer aus und laden Sie sie hoch. Warten Sie einige Sekunden, bis AVR-DUDE Danke sagt (lol) und Sie fertig sind! Wenn Sie das Board das nächste Mal mit Strom versorgen, wird das von Ihnen hochgeladene Programm ausgeführt.

Machen Sie Ihr Projekt portabel

Speziell für Uno und Nano gibt es integrierte Schaltkreise zur Regelung der Stromversorgung, sodass Sie sich nicht zu viele Sorgen um Ihre Versorgungsspannung machen müssen. Um Ihr Projekt mobil zu machen, haben Sie die Möglichkeit, die Stromversorgung über die USB-Buchse (dh Sie benötigen eine dieser Powerbanks, die üblicherweise zum Aufladen von Telefonen verwendet werden) über die VIN- und GND-Pins (die eine Spannung von bevorzugen) zu liefern 9-12V) oder direkt über die 5V- und GND-Pins (in diesem Fall benötigen Sie zwischen 4,5 und 5,5V). Wenn Sie die 5-V-Option anstelle der VIN- oder USB-Option wählen, MÜSSEN Sie eine Spannung bereitstellen, die sehr nahe an 5 V liegt. Andernfalls funktioniert die Karte entweder nicht oder brennt ab, da der 5-V-Pin NICHT geregelt ist.

In vielen Fällen steht bereits ein Netzteil zur Verfügung ... möglicherweise für einen Motor oder etwas anderes, das eine angemessene Spannung benötigt. Wenn es im Bereich von 9-12 V liegt, sind Sie bereits gut. Wenn es höher ist, reduzieren Sie es ein wenig mit einem Spannungsteiler oder einer Zenerdiode. Wenn Sie mehrere Sensoren mit Strom versorgen, werden diese wahrscheinlich auch mit 5 V betrieben, sodass Sie eine gemeinsame Versorgung für Ihre gesamte Elektronik am 5-V-Pin teilen können.

Wenn Sie Ihr Board direkt von einer Batterie versorgen müssen, versuchen Sie, eine Konfiguration mit einer Packspannung zwischen 9 und 12 V auszuwählen. Sieben AA-Alkalien reichen aus. Dies gilt auch für 3 Lithium-Ionen-Batterien in Reihe. Für diese Angelegenheit ist jede 12V Bleisäure auch in Ordnung, aber diese sind schwer und groß.

Einige Arduino-Karten haben keine Regelschaltung (um Platz zu sparen), daher müssen Sie 5 V liefern. In diesem Fall haben Sie nur 2 Möglichkeiten. Bauen Sie entweder selbst einen Spannungsregler (Spannungsteiler, Regler-IC-Chip oder Zenerdiode) oder verwenden Sie Ni-Cd- oder Ni-MH-Batterien, da die Spannungen zufällig das richtige Vielfache für diesen Job sind. Vier Zellen einer der beiden Chemikalien liefern bei voller Ladung etwas mehr als 5 V und bleiben bei 4,8 V konstant, bis sie fast tot sind. Ni-MH hat den Vorteil einer größeren Kapazität. Ni-Cd hat den Vorteil einer längeren Lebensdauer, Haltbarkeit und geringerer Lebensdauerkosten.

Warum Arduino anstelle von Raspberry Pi verwenden?

Der Pi ist ein beeindruckendes Stück Hardware, machen Sie keinen Fehler. Es gibt jedoch Zeiten, in denen Sie nur einen Motor drosseln oder einen Thermostat für einen kleinen Weinkühler herstellen möchten.

Boards wie der Pi sind:

  • Teurer
  • Benötigen Sie ein Betriebssystem (Linux im Fall des Pi)
  • Benötigen Sie mehr Leistung und präzisere Energieverwaltung
  • Sind nicht so einfach, für einfache Projekte sofort nützlich zu machen
  • Verschwenden Sie Ressourcen für einfache Projekte (ineffizient)

Denken Sie daran, der Pi ist ein Computer. Die Arduino-Boards sind es nicht. Verwenden Sie Computer für das, wofür sie gut sind, wie das Rendern von Videos oder das Verbinden mit dem Internet. Die Verwendung zum Umlegen eines Schalters ist nicht nur übertrieben, sondern es ist auch eine große Schwierigkeit, diese grundlegenden Funktionen zum Laufen zu bringen. Bedenken Sie. Wenn ich Ihnen sagen würde, dass Sie Ihren PC zu Hause verwenden sollen, um eine Glühbirne einzuschalten, könnten Sie das tun? Ich konnte nicht (zumindest nicht am selben Tag). Mit einem Arduino können Sie dies in etwa 5 Minuten oder weniger und für nur ein paar Dollar an Teilen tun, die in eine Hand passen.

Arduino ist Funduino!

(Verzeihen Sie den lahmen Witz.) Arduino-Boards sind auf ironische Weise wirklich super cool. Wir sind seit Jahrzehnten von leistungsstarken Computern umgeben und was machen wir damit? Schauen Sie sich Bilder an, surfen Sie im Internet, verwalten Sie vielleicht unsere Steuern? Was für eine Verschwendung von Rechenleistung für solch eine erbärmliche Produktivitätsausbeute!

Wenn du einen Arduino aufnimmst, bist du fertig! Sie stellen Thermostate, Motorsteuerungen, Drohnenleitsysteme, Wechselrichter und alle möglichen verrückten, großartigen Dinge her. Dinge, die Sie mit einem PC im Wert von 50 Pfund auf Ihrem Schreibtisch niemals hätten tun können, was mit 16 GB RAM und 3D-Grafiken zu tun hat ... Nehmen Sie also eines dieser Dinge und gewinnen Sie einen Nobelpreis oder so etwas: D.

Quizzeit!

Wählen Sie für jede Frage die beste Antwort. Der Antwortschlüssel ist unten.

  1. Wie suchen Sie nach einem Ereignis, das zu einem beliebigen Zeitpunkt eintreten kann?
    • Verwenden Sie reguläre analogRead () -Anweisungen, um häufig nach dem Ereignis zu suchen
    • Verwenden Sie Interrupts, um das Ereignis zu überwachen
    • Verwenden Sie den WDT, um die CPU zu aktivieren, wenn das Ereignis eintritt
    • Der Arduino ist dazu nicht in der Lage
  2. Wie führen Sie zwei verschiedene Codeteile gleichzeitig aus?
    • Weisen Sie den ersten Code einem der Timer und den anderen der CPU zu
    • Erstellen Sie separate Funktionen und rufen Sie beide nacheinander über die Hauptschleifenfunktion auf
    • Der Arduino ist dazu nicht in der Lage
    • Laden Sie den ersten Code hoch, trennen Sie die Stromversorgung und laden Sie dann den zweiten Code hoch
  3. Wie erhält man ein beliebiges Gleichstromsignal von der Arduino-Karte?
    • PWM
    • DAC
    • MUX
    • ADC
  4. Welche Kommunikationsschnittstelle würden Sie für einen OLED-Bildschirm verwenden, wenn alle Ihre analogen Pins verwendet werden?
    • I2C
    • SPI
    • USART
    • Facebook

Lösungsschlüssel

  1. Verwenden Sie Interrupts, um das Ereignis zu überwachen
  2. Der Arduino ist dazu nicht in der Lage
  3. PWM
  4. SPI

Interpretieren Sie Ihre Punktzahl

Wenn Sie zwischen 0 und 1 die richtige Antwort erhalten haben: Bleiben Sie bei Windows 8 ...

Wenn Sie 2 richtige Antworten haben: Vielleicht gibt es doch Hoffnung für diesen Kellerlichtschalter.

Wenn Sie 3 richtige Antworten haben: Wir können wahrscheinlich Freunde sein.

Wenn Sie 4 richtige Antworten erhalten haben: Sie sind offiziell schlauer als jeder andere in der Regierung. Vielleicht könnten Sie unseren Strom verwalten?

Dieser Artikel ist genau und nach bestem Wissen des Autors. Der Inhalt dient nur zu Informations- oder Unterhaltungszwecken und ersetzt nicht die persönliche Beratung oder professionelle Beratung in geschäftlichen, finanziellen, rechtlichen oder technischen Angelegenheiten.

Seitenwahl

Mehr Details

Was ist der Qualitätsfaktor (Q-Faktor) von Antennen?
Industriell

Was ist der Qualitätsfaktor (Q-Faktor) von Antennen?

Tamara Wilhite i t techni che Redakteurin, Wirt chaft ingenieurin, Mutter von zwei Kindern und veröffentlichte cience-Fiction- und Horror-Autorin.Der Q-Faktor oder Qualität faktor eine abge ...
Lustige E-Mail-Signaturen und Abmeldungen
Internet

Lustige E-Mail-Signaturen und Abmeldungen

Melanie i t eine Tech YouTuber, die ocial Media liebt und eine Expertin für Internetkultur i t. ie betreibt auch einen YouTube-Kanal: The Curiou Coder.Eine E-Mail i t einem Brief ehr ähnlich...