- Wie bestimmen Sie, wie viele Sensoren ein Mikrocontroller verwenden kann?
- Meines Wissens nach können Sie C # nicht direkt auf einem Mikrocontroller verwenden, aber Sie können C # verwenden und über USB kommunizieren und nach einem bestimmten Anschluss suchen. Ist das wahr?
In meinem Fall habe ich mich auf die drei folgenden Mikrocontroller eingegrenzt:
- Arduino
- Netdurino
- AVR
Dies ist, was ich als erstes Projekt versuche und natürlich ist dies möglicherweise kein einfaches Projekt.
Ich möchte in der Lage sein, ein Thermometer anzuschließen und wenn die Grad + -3 einer Basistemperatur erreichen, ein Requisitenfenster öffnen oder schließen. Außerdem möchte ich die Thermometerinformationen in einer MySQL-Datenbank speichern können.
Wenn also die Basistemperatur 80 beträgt, wenn die Temperatur größer als 83 ist, möchte ich das Fenster öffnen. Und wenn es 77 ist, möchte ich das Fenster schließen.
Ich bin nicht an dem genauen Mechanismus interessiert, der die Fenster öffnet und schließt, sondern nur daran, wie man die Signale sendet, um sie zu öffnen oder zu schließen.
Antworten:
Informationen zum Mikrocontroller:
Während Netduino C # verwendet, sind die meisten anderen Mikrocontroller in C programmiert - das sind zwei völlig unterschiedliche Programmiersprachen. Darüber hinaus verwendet Arduino eine Version von C ++, die sich noch unterscheidet.
Mikrocontroller werden normalerweise in C oder in Assembly (ASM) programmiert. Wenn Sie neu sind, würde ich empfehlen, dass C. Arduino kein Mikrocontroller ist, sondern ein Entwicklungsboard (normalerweise), das auf einem AVR-Mikrocontroller basiert, obwohl andere MCUs verwendet werden. Auf den integrierten MCUs (Mikrocontroller-Einheiten) ist ein Bootloader installiert. Dies ist ein spezieller Codeabschnitt, der die Funktionsweise der MCU ändert. Im Fall von Arduino ermöglicht es die Programmierung über die serielle Schnittstelle im Gegensatz zu Standardprogrammiermethoden sowie den Zugriff auf spezielle Bibliotheksfunktionen. Auf der Platine befindet sich (normalerweise) ein USB-zu-Seriell-Konverter, da viele kleinere Chips keine interne USB-Hardware haben und der USB-Anschluss für eine ordnungsgemäße Kommunikation konvertiert werden muss.
Frage 1:
Eine MCU verfügt über eine bestimmte Anzahl von E / A-Pins. Dies sind Pins, die Ein- oder Ausgänge sein können. Sie können so viele digitale Sensoren direkt anschließen, wie E / A-Pins vorhanden sind. Analoge Sensoren sind jedoch auf die Anzahl der verfügbaren ADC-Pins (Analog-Digital-Wandler) beschränkt. Nicht alle MCUs verfügen über eine ADC-Einheit. Sie können auch viele, viele weitere Sensoren anschließen, indem Sie externe GPIO-Expander oder parallele serielle Ausgangsregister verwenden. Diese können mit wenigen MCU-Pins gesteuert werden und die Anzahl der verfügbaren E / A-Pins erheblich erhöhen.
Frage 2:
Sie schreiben ein Programm auf den Computer, der auf der MCU installiert ist. Wenn der Code eine externe Kommunikation ermöglicht (über USB, seriell, SPI, I2C usw.), können Sie mit dem Chip kommunizieren, während er ausgeführt wird. Diese Fähigkeit hängt jedoch von dem Code ab, den Sie schreiben. Welche Sprache Sie für die Kommunikation mit der MCU verwenden, ist für alles, was Sie möchten, ziemlich offen, da die eigentliche Kommunikation von der Hardware und nicht von der Programmiersprache erfolgt. Vielleicht haben Sie das mit der Erwähnung von "C #" gemeint.
Dein Projekt:
Realistisch gesehen klingt Ihr Projekt nicht so kompliziert: Lesen Sie einen Temperatursensor (klingt wie analog) und treiben Sie einen Motor an, um ein Fenster basierend auf diesem Sensorwert zu öffnen / schließen. Wann der Motor gestoppt werden muss, hängt wahrscheinlich von einem anderen Sensor ab, der am Fenster angebracht ist. Dies kann mit einer sehr kleinen MCU mit wenigen Pins und wenig Programmraum (wie dem ATtiny24 oder ATtiny25) erfolgen. Aber ich denke, Sie werden auf viele Probleme stoßen, wenn Sie nicht zuerst an etwas Kleinerem arbeiten. Die Standard- "Hallo Welt" von MCUs besteht darin, eine LED zu blinken. Bauen Sie dann darauf auf, indem Sie versuchen, die Blinkgeschwindigkeit mit einem Knopf zu steuern und dann einen Motor usw. anzutreiben.
Persönliche Meinung...
Ich habe weder den Wunsch noch jemals, Arduino zu verwenden. Ich baue alle meine eigenen Schaltkreise, normalerweise mit AVR-MCUs, aber ich verstehe den Grund, warum Leute sie verwenden. Persönlich denke ich, dass es weitaus besser ist, zu lernen, wie man eine eigene Schaltung entwirft und programmiert, als den Code anderer Leute zu kopieren und zufällige Dinge zusammenzusetzen - was die meisten Arduino-Benutzer tun. Es gibt VIELE Online-Tutorials für den Einstieg in Mikrocontroller ohne Arduino. Ich würde Ihnen empfehlen, dies zu prüfen, wenn Sie Pläne haben, in Zukunft Ihre eigenen Schaltkreise zu entwerfen. Wenn Sie keine Lust haben, etwas zu lernen, kopieren Sie auf jeden Fall weg, aber seien Sie gewarnt, dass es oft viel einfachere und effektivere Möglichkeiten gibt, Dinge zu tun, die Sie nie verstehen werden, wenn Sie nicht wissen, was los ist.
quelle
Die Wahl zwischen den Plattformen
Welches Sie wählen, ist eine Frage des persönlichen Geschmacks. AVR ist niedriger als Arduino. Wenn Sie also gerade erst anfangen, ist es definitiv einfacher, schnell mit Arduino zu beginnen. Netduino gibt es, wenn Sie wirklich C # wollen, Arduino wird jedoch besser unterstützt als Netduino.
Schnittstelle zum seriellen / USB-Anschluss des PCs
Auf der PC-Seite können Sie unabhängig von Ihrer Wahl eine Schnittstelle zu Ihrem Arduino / Netduino / Bare-AVR-Chip / Schaltkreis über die serielle Schnittstelle / USB herstellen. Auf der PC-Seite können Sie jede gewünschte Programmiersprache verwenden, solange Sie Zugriff auf serielle Schnittstellen haben. Dies funktioniert so, dass Arduino / Netduino / Bare AVR vom seriellen / USB-Anschluss liest / schreibt, ebenso wie Ihr PC-Programm. Kommunikation folgt.
Auf der eingebetteten Seite haben die meisten Dinge, die Sie in Betracht ziehen, einen USART, was bedeutet, dass die serielle Kommunikation eingestellt ist. Menschliche reine AVR-Chips verfügen jedoch per se nicht über einen USB-Anschluss : Sie müssen eine USB-Unterstützung über einen separaten Schaltkreis erstellen. Kurt E Clothier weist jedoch darauf hin, dass einige AVR-Chips über eine integrierte USB-Unterstützung verfügen . Einige AVR-Chips verfügen nicht über einen integrierten USART, aber Sie werden diese wahrscheinlich nicht auswählen.
Temperaturerfassung
In Bezug auf die Temperaturerfassung bieten Ihnen alle von Ihnen vorgeschlagenen Plattformen die Möglichkeit, dies zu tun. Das Ablesen einer Temperatur kann so einfach sein wie das Ablesen eines ADC, wenn Sie einen LM34- oder einen LM35-Temperatursensor verwenden. Auf Arduino wird dies mit einer Zeile erreicht:
myReading = analogRead(pinNumber);
Sie müssen den Temperaturwert in die tatsächliche Temperatur umwandeln, dies ist jedoch nicht besonders schwierig.Motoren
Die Motoren sind etwas komplizierter: Bei den meisten (fast allen) Motoren kann Ihr Arduino / Netduino / AVR-Chip den Motor nicht direkt antreiben. Sie benötigen mindestens einen MOSFET / BJT- Schalter (siehe hier für weitere Informationen) und eine Dämpfungsdiode oder robuster eine Motortreiberschaltung. Die Arduino-Plattform verfügt über eine Vielzahl von Peripheriegeräten (im Allgemeinen als Abschirmungen bezeichnet , obwohl Olin den Begriff Tochterplatine bevorzugt ), einschließlich einer Motorabschirmung. Wenn Sie einen Hochleistungsmotor verwenden, ist dies der richtige Weg.
quelle
Auf dem Netduino wird eine Version der .NET-Laufzeit ausgeführt, die als "Micro Runtime" IIRC bezeichnet wird. Sie schreiben Code in C # und er wird auf dem Netduino interpretiert. Das Netduino wird mit Bibliotheken geliefert, um auf die verschiedenen Funktionen des Mikrocontrollers zuzugreifen, und diese Bibliotheken sind in C geschrieben. Der von Ihnen geschriebene C # -Code ist sehr langsam auszuführen, obwohl der Bibliothekscode schnell ist. Ich schreibe C # -Code für meinen Lebensunterhalt, aber ich denke nicht, dass das Netduino eine gute Wahl für einen Mikrocontroller ist. Es ist in mancher Hinsicht schwieriger zu verwenden als ein Arduino, hat weitaus weniger Unterstützung (weniger Beispielcode, weniger kompatible Hardware) und kostet mehr. Ich denke auch nicht, dass C # die richtige Sprache für Controller ist.
Ich habe Projekte mit benutzerdefiniertem Code für AVRs und andere Projekte mit Arduinos durchgeführt. Wenn Sie gerade erst anfangen, hat das Arduino jede Menge Vorteile, und der einzige Nachteil sind die höheren Kosten als bei einem rohen AVR.
Ich empfehle, einige der Einführungen für den AVR und für das Arduino zu lesen. Ich denke, das gibt Ihnen eine gute Vorstellung davon, welches für Sie besser ist.
quelle
Das hängt davon ab, wie kreativ Sie sein können, wie viele Iopins verfügbar sind und wie viele Pins der Sensor benötigt. Wenn Sie 4 3-Pin-Sensoren haben, bedeutet dies nicht unbedingt, dass Sie 12 Pins benötigen, um sie zu steuern. Sie können sie multiplexen und 5 Pins verwenden und 7 Io-Pins speichern. Es kommt also wirklich darauf an. Eine Sichtweise ist jedoch, wie viele verfügbare Io-Pins Sie haben und wie viele Pins Ihre Sensoren benötigen. Dies würde Ihnen eine Untergrenze für die Anzahl der Pins geben, die Sie haben können. Kreativität, Erfahrung und Verständnis dafür, wie alles funktioniert, können die Anzahl der Sensoren erhöhen.
Obwohl ich nicht viel USB gemacht habe, weiß ich, dass wenn Sie USB von Grund auf neu machen, dies das Schreiben von Treibern auf Ihrem Host-Computer beinhalten würde. Am beliebtesten ist es, einen IC zu verwenden, der bereits das gesamte USB-Protokoll und die Treiber verwaltet und sich wie eine serielle Schnittstelle Ihres Computers verhält. Grundsätzlich verfügen Sie über eine USB-Serial-Bridge, die an eine serielle Schnittstelle Ihres Mikrocontrollers angeschlossen werden kann. Ich glaube, der Arduino macht das. Ich bin mir nicht sicher über Netduino. Ja, Sie können C # verwenden, um über USB über einen bestimmten Anschluss zu kommunizieren (vorausgesetzt, Sie tun dies auf einfache Weise und verwenden eine USB-Serial-Bridge).
Was Sie vorschlagen, ist definitiv möglich. Sie können ein Programm schreiben, das mit Ihrer Datenbank verbunden ist und serielle Daten an Ihren Mikrocontroller senden und empfangen kann.
quelle
Um einen bestimmten Punkt zu beantworten, könnte an einem Mikrocontroller vermutlich eine (sehr hohe) Anzahl von Sensoren angebracht sein. Die Verwendung von Bussensoren wie i2c, spi, ein Draht, seriell oder einem anderen Busprotokoll würde es Ihnen ermöglichen, x viele pro Bus zu haben, wobei x die Grenze für einen bestimmten Bus ist. Sie müssten einige technische Spezifikationen für die Verkabelung des Busses befolgen und könnten mit mehreren desselben Busses noch mehr erweitern.
Die Grenze liegt wirklich in Bezug auf Geschwindigkeit und Praktikabilität. Ich könnte tausend Sensoren auf einem einzelnen Arduino haben, aber könnte ich diese Informationen in angemessener Zeit mit Strom versorgen, lesen, verarbeiten und anzeigen? Vielleicht hängt es davon ab, wie gut Sie codieren können oder wie einfallsreich Sie werden.
Sogar analoge Sensoren können auf diese Weise mit Multiplexern oder ADCs hergestellt werden. Die bessere Frage ist nicht "wie viele Sensoren ein Mikrocontroller verwenden kann", sondern "wie viele Sensoren brauche ich" und nehmen sie von dort.
quelle