In meinem Fall habe ich mich auf die drei folgenden Mikrocontroller eingegrenzt:
Dies ist, was ich als erstes Projekt versuche, und natürlich könnte dies kein einfaches Projekt sein.
Ich möchte in der Lage sein, ein Thermometer anzuschließen und wenn die Grad +-3 einer Basistemperatur erreichen, ein Requisitenfenster zu öffnen oder zu schließen. Außerdem möchte ich die Thermometerinformationen in einer MySql-Datenbank speichern können.
Wenn also die Basistemperatur 80 beträgt, möchte ich das Fenster öffnen, wenn die Temperatur über 83 liegt. Und wenn es 77 ist, möchte ich das Fenster schließen.
Ich interessiere mich nicht für den genauen Mechanismus, der die Fenster öffnet und schließt, sondern nur dafür, wie die Signale zum Öffnen oder Schließen gesendet werden.
Informationen zum Mikrocontroller:
Während Netduino C# verwendet, werden die meisten anderen Mikrocontroller in C programmiert - das sind zwei völlig unterschiedliche Programmiersprachen. Darüber hinaus verwendet Arduino eine Version von C++, die noch anders ist.
Mikrocontroller werden typischerweise in C oder in Assembler (ASM) programmiert. Wenn Sie neu sind, würde ich C empfehlen. Arduino ist kein Mikrocontroller, es ist (normalerweise) ein Entwicklungsboard, das auf einem AVR-Mikrocontroller basiert, obwohl andere MCUs verwendet werden. Auf den integrierten MCUs (Mikrocontrollereinheiten) 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) auch ein USB-Seriell-Konverter, da viele kleinere Chips keine interne USB-Hardware haben, sodass der USB für eine ordnungsgemäße Kommunikation konvertiert werden muss.
Frage 1:
Eine MCU hat eine bestimmte Anzahl von I/O-Pins. Dies sind Pins, die Ein- oder Ausgänge sein können. Sie können so viele digitale Sensoren direkt anschließen, wie I/O-Pins vorhanden sind, aber analoge Sensoren sind auf die Anzahl der verfügbaren ADC-Pins (Analog-Digital-Wandler) beschränkt. Nicht alle MCUs haben eine ADC-Einheit. Sie können auch viele, viele weitere Sensoren anschließen, indem Sie externe GPIO-Expander oder Parallel-In-, Serial-Out-Register verwenden. Diese können mit wenigen MCU-Pins gesteuert werden und können die Anzahl der verfügbaren I/O-Pins erheblich erweitern.
Frage 2:
Sie schreiben ein Programm auf dem Computer, das auf der MCU installiert ist. Wenn der Code externe Kommunikation (über USB, seriell, SPI, I2C usw.) zulässt, können Sie mit dem Chip kommunizieren, während er ausgeführt wird. Aber diese Fähigkeit hängt von dem Code ab, den Sie schreiben. Welche Sprache Sie verwenden, um mit der MCU zu kommunizieren, ist ziemlich offen für alles, was Sie möchten, da die eigentliche Kommunikation von der Hardware und nicht von der Programmiersprache durchgeführt wird. Vielleicht haben Sie das mit der Erwähnung von "C#" gemeint.
Dein Projekt:
Realistischerweise 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 Programmspeicher (wie ATtiny24 oder ATtiny25) erfolgen. Aber ich denke, Sie werden auf viele Probleme stoßen, wenn Sie nicht zuerst an etwas Kleinerem arbeiten. Das standardmäßige "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, dann einen Motor antreiben usw.
Persönliche Meinung...
Ich habe weder noch den Wunsch, jemals Arduino zu verwenden. Ich baue alle meine eigenen Schaltungen, normalerweise mit AVR-MCUs, aber ich verstehe den Grund, warum die Leute sie verwenden. Persönlich denke ich, dass es viel 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 meiner Meinung nach die meisten Arduino-Benutzer tun. Es gibt ZAHLREICHE Online-Tutorials für den Einstieg in Mikrocontroller ohne Arduino. Ich würde Ihnen vorschlagen, sich diese anzuschauen, wenn Sie in Zukunft Pläne haben, Ihre eigenen Schaltkreise zu entwerfen. Wenn Sie keine Lust haben, irgendetwas zu lernen, dann 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 vor sich geht.
Welche 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 ist dort, wo Sie wirklich C# wollen, aber Arduino wird besser unterstützt als Netduino.
Auf der PC-Seite können Sie unabhängig von Ihrer Wahl eine Schnittstelle zu Ihrem Arduino/Netduino/nackten AVR-Chip/Schaltkreis über die serielle Schnittstelle/USB herstellen. Auf der PC-Seite können Sie jede beliebige Programmiersprache verwenden, solange Sie Zugriff auf serielle Schnittstellen haben. Dies funktioniert so, dass Arduino / Netduino / Bare AVR vom seriellen / USB-Anschluss lesen / schreiben und Ihr PC-Programm auch. Kommunikation erfolgt.
Auf der eingebetteten Seite haben die meisten Dinge, die Sie berücksichtigen werden, einen USART, was bedeutet, dass die serielle Kommunikation eingestellt ist. Reine AVR-Chips haben jedoch per se keinen USB-Anschluss : Sie müssen eine USB-Unterstützung über einen separaten Schaltkreis aufbauen, obwohl, wie Kurt E. Clothier betont , einige AVR-Chips über eine integrierte USB-Unterstützung verfügen . Einige AVR-Chips haben keinen eingebauten USART, aber Sie werden diese wahrscheinlich nicht auswählen.
Was die Temperaturmessung betrifft, 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 Temperaturmesswert in die tatsächliche Temperatur umwandeln, aber das ist nicht besonders schwierig.
Die Motoren 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 ( weitere Informationen finden Sie hier ) und eine Überspannungsschutzdiode oder robuster eine Motortreiberschaltung. Die Arduino-Plattform verfügt über eine Vielzahl von Peripheriegeräten (allgemein als Shields bezeichnet , obwohl Olin den Begriff Daughterboard bevorzugt ) , einschließlich eines Motorschilds. Wenn Sie einen Hochleistungsmotor verwenden, ist dies der richtige Weg.
Auf dem Netduino läuft eine Version der .NET-Laufzeit, die als „Micro Runtime“ IIRC bekannt ist. Sie schreiben Code in C# und er wird auf 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 wird sehr langsam ausgeführt, obwohl der Bibliothekscode schnell ist. Ich schreibe C#-Code für meinen Lebensunterhalt, aber ich denke nicht, dass der Netduino eine gute Wahl für einen Mikrocontroller ist; Es ist in gewisser Weise schwieriger zu verwenden als ein Arduino, hat weitaus weniger Unterstützung (weniger Beispielcode, weniger kompatible Hardware) und kostet mehr. Ich glaube 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 ein roher AVR.
Ich empfehle, sich einige der Einführungen für den AVR und für das Arduino anzusehen. Ich denke, das wird Ihnen eine gute Vorstellung davon geben, welches für Sie besser ist.
Wie bestimmen Sie, wie viele Sensoren ein Mikrocontroller verwenden kann?
Das hängt davon ab, wie kreativ Sie sein können und wie viele Iopins Sie zur Verfügung haben und wie viele Pins der Sensor benötigt. Wenn Sie 4 3-Pin-Sensoren haben, bedeutet das 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 sparen. Es hängt also wirklich alles davon ab. Aber eine Sichtweise ist, wie viele verfügbare IO-Pins Sie haben und wie viele Pins Ihre Sensoren benötigen, das würde Ihnen eine niedrige Grenze geben, wie viele Sie haben können. Kreativität, Erfahrung und Verständnis dafür, wie alles funktioniert, können die Anzahl der Sensoren erhöhen.
Soweit ich weiß, können Sie C# nicht direkt in einen Mikrocontroller einbetten, aber Sie können C# verwenden und über USB kommunizieren und nach einem bestimmten Port suchen, stimmt das?
Obwohl ich nicht viel USB gemacht habe, weiß ich, dass, wenn Sie USB von Grund auf neu machen, das Schreiben von Treibern auf Ihrem Host-Rechner beinhalten würde. Der beliebtere Weg ist die Verwendung eines ICs, der bereits das gesamte USB-Protokoll und die Treiber verarbeitet und sich wie ein serieller Anschluss an Ihrem Computer verhält. Sie haben im Grunde eine USB-Seriell-Brücke, die an einen seriellen Anschluss Ihres Mikrocontrollers angeschlossen werden kann. Ich glaube, der Arduino tut dies. Bei Netduino bin ich mir nicht sicher. Also ja, Sie können C # verwenden, um über USB über einen bestimmten Port zu kommunizieren (vorausgesetzt, Sie tun dies auf einfache Weise und verwenden eine USB-Serial-Bridge).
Was Sie vorschlagen, ist auf jeden Fall möglich. Sie können ein Programm schreiben, das mit Ihrer Datenbank verbunden ist und serielle Daten an Ihren Mikrocontroller senden und empfangen kann.
Um einen bestimmten Punkt zu beantworten, könnte ein Mikrocontroller vermutlich eine (sehr hohe Anzahl) von Sensoren haben. Die Verwendung von Bussensoren wie i2c, spi, One Wire, Serial oder anderen Busprotokollen 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 beachten und könnten bei mehreren gleichen Bussen noch mehr erweitern.
Die Grenze liegt wirklich in Bezug auf Geschwindigkeit und Praktikabilität. Ich könnte tausend Sensoren auf einem einzigen Arduino haben, aber könnte ich diese Informationen in angemessener Zeit mit Strom versorgen, lesen, verarbeiten und anzeigen? Vielleicht, hängt davon ab, wie gut Sie programmieren können oder wie einfallsreich Sie werden.
Sogar analoge Sensoren können auf diese Weise mit Multiplexern oder ADC-ICs realisiert werden. Die bessere Frage ist nicht "wie viele Sensoren ein Mikrocontroller verwenden kann", sondern "wie viele Sensoren brauche ich" und von dort aus.
efox29
Anindo Ghosh
Analoger Brandstifter