Mikrocontroller - Anfängerfragen

  • Wie bestimmen Sie, wie viele Sensoren ein Mikrocontroller verwenden kann?
  • Meines Wissens können Sie C# nicht direkt auf einem Mikrocontroller verwenden, aber Sie können C# verwenden und über USB kommunizieren und nach einem bestimmten Port 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 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.

Nur zu Ihrer Information, Arduino und Netdurino sind Entwicklungsboards und keine Mikrocontroller. Arduino basiert auf dem AVR und Netduino basiert auf dem STM32F-Mikrocontroller
@ChrisStratton Ich vermute, dass OP nach der Betätigung eines physischen Fensters fragt, das irgendwie offen gehalten und durch Bewegen der Stütze / des Stellglieds geschlossen wird.
Schauen Sie sich dieses Mikrocontroller-Kit an. Es ist drahtlos und hat bereits einen Temperatursensor eingebaut, der drahtlos an einen Empfänger gesendet werden kann. Noch besser, der enthaltene Beispielcode erledigt dies für Sie. ti.com/tool/ez430-rf2500

Antworten (5)

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.

Das Speichern der Informationen ist möglicherweise etwas komplexer, aber nicht unmöglich. Die Kommunikation über USB ist nicht einfach, aber möglich, wenn Sie wissen, was Sie tun. Anstatt zu versuchen, Code für USB zu schreiben (es ist sehr kompliziert ...), würde ich vorschlagen, einen USB-zu-Seriell-Konverterchip zu verwenden und stattdessen seriell zu kommunizieren. Es ist viel, viel einfacher zu programmieren und wird als interne Standardhardware auf einigen Mikrocontrollern geliefert. Aber wie ich bereits erwähnt habe, kommt auf vielen Arduino-Boards ein USB-Konverter-Chip zum Einsatz, weil sie so programmiert sind.
Dies beginnt mit einer falschen Annahme. Das Vorhandensein von Netduino in der Geräteliste ist ein spezifischer Verweis auf einen eingebetteten Mikrocontroller, auf dem C#-Code ausgeführt wird.
Guter Anruf. Der ist mir nicht bekannt.
-1 für den Arduino-Schiefer. Für diejenigen, die sich mehr für Software und "Maker" -artige Sachen interessieren, wie Künstler usw., ist es überhaupt nicht falsch, nicht alle Feinheiten der MCU-Architekturen, komplexen physikalischen Schaltkreise usw. zu lernen. Einige Bastler sind softwarezentriert, andere hardwarezentriert -, manche beides, manche wollen nur, dass etwas mit minimalem Aufwand/Verständnis funktioniert. Es ist nichts Falsches daran, den Code eines anderen zu hacken, um etwas schnell zum Laufen zu bringen, auch wenn Sie nicht alles verstehen.
@Brad: Ich habe nie gesagt, dass etwas nicht stimmt. Ich verstehe, dass manche Leute sich nicht für Hardware interessieren, und das ist völlig in Ordnung. Ich habe einfach gesagt, dass es sich lohnen würde, mit dem nackten Chip anstelle einer Entwicklungsplatine zu beginnen, wenn sich jemand in Zukunft für das Entwerfen von Schaltungen (HARDWARE) interessieren würde. Auch die "Feinheiten der MCU-Architektur" haben nichts damit zu tun. Es ist mir egal, was im Silizium passiert, aber wenn Sie sich nicht das Datenblatt ansehen und ein wenig selbst lernen, werden Sie keine Ahnung haben, was ein Chip kann, sondern nur, was andere Leute damit gemacht haben.
In Bezug auf die Hardware muss sich eine Arduino-kompatible Plattform nicht mehr verstecken als jede andere minimale Schaltung - siehe Breadboarding-Tutorial. Der Großteil der Abstraktion liegt auf der Softwareseite .
@Chris Stratton, ich dachte irgendwie, dass ...

Die Wahl zwischen den Plattformen

  • Arduino ist eine Open-Source-Plattform, die (hauptsächlich) auf AVR (ATmega)-Chips aufgebaut ist, mit einer Ausnahme: Der Arduino Due ist als Cortex-M3-CPU aufgebaut. Es ist in C, C++ programmiert.
  • Netduino ist eine Plattform, die auf Cortex-M3- und Cortex-M4-Chips basiert. Es ist in C# programmiert
  • AVR ist eine Familie von Mikrocontrollern von Atmel, die in C, C++ oder Assembly programmiert sind. Die Mikroprozessoren sind das Herzstück der meisten (aber nicht ganz aller) Arduinos.

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.

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/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.

Temperaturerfassung

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.

Motoren

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.

Schöne Erklärung, obwohl ich Ihren Gedanken nicht zustimmen würde, dass Arduino definitiv einfacher ist. Ich bin fest davon überzeugt, dass es Ihnen in Zukunft enorm helfen wird, sich die zusätzliche Zeit zu nehmen, um zu erfahren, was vor sich geht. Die Verwendung von Arduino schränkt die Gestaltungsmöglichkeiten stark ein. Aber andererseits ist das nur meine Meinung - nicht gültiger als deine. Eine andere Sache, es gibt einige AVR-Chips, die USB eingebaut haben, zum Beispiel: hackaday.com/2011/08/07/1-chip-usb-avr-development
Warum gibt es ein analogRead, wenn digitalRead die gleiche Aufgabe erfüllt?
@KurtE.Clothier: Danke für diesen Link. Wording zum Einstieg angepasst: Was haltet ihr davon?
@jippie: Sie haben natürlich Recht, Sir. Das war ein Brain-O (wie ein Tippfehler, aber wenn das Gehirn versagt)
Sieht gut für mich aus.

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.

Danke für die Antwort. Ich kann auf Sparkfun sehen, dass sie die Controller und das Thermometer haben, aber welche Art von Motoren funktionieren mit einem Mikrocontroller?
Eigentlich jeder Motor. Jeder Motor muss gesteuert werden, und je nach Motor kann dies zwischen Modellen, Typen usw. variieren. Sobald Sie wissen, wie der Motor gesteuert wird, müssen Sie eine Schaltung erstellen (ein Mikrocontroller allein reicht nicht aus). das verbindet Ihren Mikrocontroller mit dem Motor.
@ user2278106 Motoren benötigen einen höheren Strom als ein typisches Mikro liefern kann. Sie benötigen höchstwahrscheinlich einen Motortreiber oder eine ähnliche Lösung (z. B. eine H-Brücke). Die Motorauswahl wird durch die mechanischen Anforderungen des Systems bestimmt (wie viel Drehmoment ist zum Öffnen/Schließen des Fensters erforderlich und wie schnell soll es geöffnet/geschlossen werden), und die Treiber werden ausgewählt/konstruiert, sobald ein Motor ausgewählt ist

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.