Question:
Microcontrôleurs - Questions pour débutants
user2278106
2013-04-18 06:41:25 UTC
view on stackexchange narkive permalink
  • Comment déterminez-vous combien de capteurs un microcontrôleur peut utiliser?
  • Je crois comprendre que vous ne pouvez pas utiliser C # directement sur un microcontrôleur, mais vous pouvez utiliser C # et communiquer via USB et rechercher un port spécifique. Est-ce vrai?

Dans mon cas, je me suis limité aux trois microcontrôleurs suivants:

  • Arduino
  • Netdurino
  • AVR

C'est ce que j'essaie de faire en tant que premier projet et bien sûr, ce n'est peut-être pas un projet facile.

Je veux pouvoir brancher un thermomètre et lorsque les degrés atteignent + -3 d'une température de base, ouvrir ou fermer une fenêtre de support. Aussi, je veux pouvoir stocker les informations du thermomètre dans une base de données MySql.

Donc, fondamentalement, si la température de base est de 80, lorsque la température est supérieure à 83, je veux ouvrir la fenêtre. Et si c'est 77, je veux fermer la fenêtre.

Je ne suis pas intéressé par le mécanisme exact qui ouvre et ferme les fenêtres, juste comment envoyer les signaux pour l'ouvrir ou la fermer.

Juste un FYI, Arduino et Netdurino sont des cartes de développement et non des microcontrôleurs. Arduino est basé sur l'AVR et Netduino est basé sur le microcontrôleur STM32F
@ChrisStratton Je soupçonne que OP pose des questions sur l'actionnement d'une fenêtre physique appuyée d'une manière ou d'une autre, et fermée en déplaçant l'hélice / l'actionneur.
Découvrez ce kit de microcontrôleur. Il est sans fil et dispose d'un capteur de température déjà intégré qui peut être envoyé sans fil à un récepteur. Mieux encore, l'exemple de code inclus le fait pour vous. http://www.ti.com/tool/ez430-rf2500
Cinq réponses:
Kurt E. Clothier
2013-04-18 07:08:05 UTC
view on stackexchange narkive permalink

Informations sur le microcontrôleur:

Bien que Netduino utilise C #, la plupart des autres microcontrôleurs sont programmés en C - ce sont deux langages de programmation totalement différents. En plus de cela, Arduino utilise une version de C ++, qui est encore différente.

Les microcontrôleurs sont généralement programmés en C ou en assemblage (ASM). Si vous êtes nouveau, je recommanderais C.Arduino n'est pas un microcontrôleur, c'est une carte de développement (généralement) basée sur un microcontrôleur AVR, bien qu'il y ait d'autres MCU en cours d'utilisation. Les MCU embarqués (unités de microcontrôleur) auront un bootloader installé. Il s'agit d'une section spéciale de code qui modifie le fonctionnement du MCU. Dans le cas d'Arduino, il permet la programmation via le port série par opposition aux méthodes de programmation standard ainsi que l'accès aux fonctions spéciales de la bibliothèque. Il y aura également (généralement) un convertisseur USB vers série car de nombreuses puces plus petites n'ont pas de matériel USB interne, donc l'USB doit être converti pour une communication correcte.

Question 1:

Un MCU aura un nombre spécifique de broches d'E / S. Ce sont des broches qui peuvent être des entrées ou des sorties. Vous pouvez connecter directement autant de capteurs numériques que de broches d'E / S, mais les capteurs analogiques sont limités au nombre de broches ADC (convertisseur analogique-numérique) disponibles. Tous les microcontrôleurs ne disposent pas d'une unité ADC. Vous pouvez également connecter de nombreux autres capteurs en utilisant des extensions GPIO externes ou des registres d'entrée en parallèle et de sortie série. Ceux-ci peuvent être contrôlés à l'aide de quelques broches MCU et peuvent considérablement augmenter le nombre de broches d'E / S disponibles.

Question 2:

Vous allez écrire un programme sur l'ordinateur qui est installé sur le MCU. Si le code vous permet d'avoir des communications externes (via USB, série, SPI, I2C, etc.), vous pouvez communiquer avec la puce pendant son fonctionnement. Mais cette capacité dépend du code que vous écrivez. Le langage que vous utilisez pour communiquer avec le MCU est à peu près ouvert à tout ce que vous voulez, car la communication est réellement effectuée par le matériel, pas par le langage de programmation. C'est peut-être ce que vous vouliez dire avec la mention "C #".

Votre projet:

En réalité, votre projet ne semble pas si compliqué: lisez un capteur de température (sonne comme analogique) et entraîner un moteur pour ouvrir / fermer une fenêtre en fonction de la lecture de ce capteur. Quand arrêter le moteur sera probablement basé sur un autre capteur attaché à la fenêtre. Cela peut être fait avec un très petit MCU avec peu de broches et peu d'espace de programme (comme ATtiny24 ou ATtiny25). Mais je pense que vous rencontrerez beaucoup de problèmes si vous ne travaillez pas d'abord sur quelque chose d'un peu plus petit. Le "bonjour le monde" standard des MCU est de faire clignoter une LED. Ensuite, construisez sur cela en essayant de contrôler la vitesse de clignotement avec un bouton, puis conduisez un moteur, etc.

Opinion personnelle ...

Je ne veux pas et je n'ai aucune envie d'utiliser Arduino. Je construis tous mes propres circuits, généralement avec des MCU AVR, mais je comprends la raison pour laquelle les gens les utilisent. Personnellement, je pense qu'il est de loin préférable d'apprendre à concevoir votre propre circuit et à le programmer que de copier le code d'autres personnes et de reconstituer des choses aléatoires - c'est ce que je vois faire la plupart des utilisateurs d'Arduino. Il existe BEAUCOUP de tutoriels en ligne pour démarrer avec des microcontrôleurs qui n'impliquent pas Arduino, c'est ce que je vous suggérerais de regarder si vous envisagez de concevoir votre propre circuit à l'avenir. Si vous n'avez aucun désir d'apprendre quoi que ce soit, alors, par tous les moyens, copiez, mais sachez qu'il existe souvent des moyens beaucoup plus simples et plus efficaces de faire les choses que vous ne comprendrez jamais si vous ne savez pas ce qui se passe.

Le stockage des informations peut être un peu plus complexe, mais pas impossible. Communiquer via USB n'est pas facile, mais peut être fait si vous savez ce que vous faites. Plutôt que d'essayer d'écrire du code pour USB (c'est très compliqué ...), je suggérerais d'utiliser une puce de conversion USB vers série et de communiquer via série à la place. Il est beaucoup plus simple à coder et est fourni en tant que matériel interne standard sur un certain nombre de microcontrôleurs. Mais comme je l'ai mentionné, une puce de conversion USB est installée sur de nombreuses cartes Arduino car c'est ainsi qu'elles sont programmées.
Cela commence par une hypothèse erronée. La présence de Netduino dans la liste des périphériques est une référence spécifique à un microcontrôleur embarqué exécutant du code C #.
Bon appel. Je ne connais pas celui-là.
-1 pour l'ardoise arduino. Pour ceux qui sont plus intéressés par les logiciels et les trucs de type «créateur», comme les artistes, etc., il n'y a rien de mal à ne pas apprendre toutes les subtilités des architectures MCU, des circuits physiques complexes, etc. Certains amateurs sont centrés sur le logiciel, certains matériels -, certains les deux, certains veulent juste que quelque chose fonctionne avec un minimum d'effort / de compréhension. Il n'y a rien de mal à pirater le code de quelqu'un d'autre pour faire fonctionner quelque chose rapidement, même si vous ne comprenez pas tout.
@Brad: Je n'ai jamais dit que quelque chose n'allait pas. Je comprends que certaines personnes ne se soucient pas du matériel, et c'est tout à fait correct. J'ai simplement déclaré que si quelqu'un était intéressé par la conception de circuits (HARDWARE) à l'avenir, cela en valait la peine de commencer avec la puce nue au lieu d'une carte de développement. De plus, les «subtilités de l'architecture MCU» n'ont rien à voir avec cela. Je me fiche de ce qui se passe dans le silicium, mais à moins de regarder la fiche technique et d'apprendre un peu par vous-même, vous n'aurez aucune idée de ce qu'une puce peut faire, seulement de ce que d'autres personnes en ont fait.
En termes de matériel, une plate-forme compatible Arduino n'a pas besoin de se cacher plus que tout autre circuit minimal - voir le tutoriel de maquette. La plupart de l'abstraction est du côté * logiciel *.
@Chris Stratton, je pensais en quelque sorte que ...
angelatlarge
2013-04-18 10:12:47 UTC
view on stackexchange narkive permalink

Le choix entre les plates-formes

  • Arduino est une plate-forme open source construite (principalement) autour de puces AVR (ATmega), à une exception près: l'Arduino Due est construit autour du processeur Cortex-M3. Il est programmé en C, C ++.
  • Netduino est une plateforme construite autour des puces Cortex-M3 et Cortex-M4. Il est programmé en C #
  • AVR est une famille de microcontrôleurs d'Atmel, programmés en C, C ++ ou Assembly. Les microprocesseurs sont au cœur de la plupart des Arduinos (mais pas tout à fait).

Lequel vous choisissez est une question de goût personnel. L'AVR est un niveau plus bas que sur Arduino, donc si vous venez de commencer, Arduino est certainement plus facile à démarrer rapidement. Netduino est-ce que vous voulez vraiment C #, cependant, Arduino est mieux supporté que Netduino.

Interfaçage avec le port série / USB du PC

Du côté du PC, peu importe ce que vous choisissez , vous pourrez vous connecter à votre puce / circuit Arduino / Netduino / AVR nu via le port série / USB. Côté PC, vous pouvez utiliser le langage de programmation de votre choix à condition qu'il vous donne accès aux ports série. La façon dont cela fonctionnera est qu'Arduino / Netduino / bare AVR lira / écrira à partir du port série / USB, tout comme votre programme PC. La communication s'ensuit.

Du côté intégré, la plupart des choses que vous envisagerez auront un USART, ce qui signifie que la communication série est définie. Cependant, les puces AVR man pure n'ont pas de port USB, en soi prêt à l'emploi: vous devrez construire un support USB via un circuit séparé, mais comme Kurt E Clothier souligne que certaines puces AVR ont un support USB intégré. Quelques puces AVR n'ont pas d'USART intégré, mais il est peu probable que vous les choisissiez.

Détection de température

En ce qui concerne la détection de température, toutes les plates-formes que vous avez suggérées vous donneront les capacités pour le faire. La lecture d'une température peut être aussi simple que la lecture d'un ADC si vous utilisez un LM34 ou un capteur de température LM35. Sur Arduino, cela se fait avec une seule ligne: myReading = analogRead (pinNumber); Vous devrez transformer la lecture de température en température réelle, mais ce n'est pas particulièrement difficile.

Moteurs

Les moteurs un peu plus compliqués: pour la plupart (presque tous) des moteurs votre puce Arduino / Netduino / AVR ne pourra pas piloter directement le moteur. Vous aurez besoin d'au moins un commutateur MOSFET / BJT (voir ici pour plus d'informations) et une diode d'amortissement, ou, plus robuste, un pilote de moteur circuit. La plate-forme Arduino possède une grande variété de périphériques (appelés en général blindages , bien que Olin préfère le terme carte fille ), y compris un blindage moteur. Si vous utilisez un moteur haute puissance, c'est la voie à suivre.

Belle explication, même si je ne suis pas d'accord avec ce que vous pensez qu'Arduino est définitivement plus facile. Je crois fermement que prendre le temps supplémentaire à l'avance pour apprendre ce qui se passe vous aidera énormément à l'avenir. L'utilisation d'Arduino limite considérablement les possibilités de conception. Mais là encore, c'est juste mon avis - pas plus valable que le vôtre. Une autre chose, il y a des puces AVR qui ont intégré USB, par exemple: http://hackaday.com/2011/08/07/1-chip-usb-avr-development/
Pourquoi y a-t-il un AnalogRead si digitalRead fait le même travail?
-1
@jippie: Vous avez bien sûr raison Monsieur. C'était un brain-o (comme une faute de frappe, mais quand le cerveau fonctionne mal)
Cela me semble correct.
Eric Gunnerson
2013-04-18 09:59:12 UTC
view on stackexchange narkive permalink

Le Netduino exécute une version du runtime .NET connue sous le nom de "micro runtime" IIRC. Vous écrivez du code en C #, et il est interprété sur Netduino. Le netduino est livré avec des bibliothèques pour accéder aux différentes fonctions du microcontrôleur, et ces bibliothèques sont écrites en C. Le code C # que vous écrivez sera très lent à exécuter, bien que le code de la bibliothèque soit rapide. J'écris du code C # pour gagner ma vie, mais je ne pense pas que le netduino soit un excellent choix pour un microcontrôleur; il est plus difficile à utiliser qu'un arduino à certains égards, a beaucoup moins de support (moins de code d'exemple, moins de matériel compatible) et coûte plus cher. Je ne pense pas non plus que C # soit le bon langage pour les contrôleurs.

J'ai réalisé des projets avec du code personnalisé pour les AVR et d'autres projets avec Arduinos. Si vous débutez, l'arduino a des tonnes d'avantages, et le seul inconvénient est le coût plus élevé qu'un AVR brut.

Je recommande de regarder certaines des introductions pour l'AVR et pour l'arduino. Je pense que cela vous donnera une bonne idée de celui qui vous convient le mieux.

efox29
2013-04-18 06:59:08 UTC
view on stackexchange narkive permalink

Comment déterminez-vous le nombre de capteurs qu'un microcontrôleur peut utiliser

Cela dépendra de votre créativité, du nombre d'iopins dont vous disposez et du nombre de broches le le capteur nécessite. Si vous avez 4 capteurs 3 broches, cela ne signifie pas nécessairement que vous avez besoin de 12 broches pour les contrôler, vous pouvez les multiplexer et utiliser 5 broches et enregistrer 7 broches io. Donc tout dépend vraiment. Mais une façon de voir les choses est de savoir combien de broches io disponibles avez-vous et combien de broches vos capteurs ont besoin, cela vous donnerait une limite basse sur le nombre que vous pouvez en avoir. La créativité, l'expérience et la compréhension de la façon dont tout fonctionne peuvent augmenter le nombre de capteurs.

Je crois comprendre que vous ne pouvez pas intégrer C # directement sur un microcontrôleur, mais vous pouvez utiliser C # et communiquer via USB et cherchez un port spécifique est-ce vrai?

Bien que je n'ai pas fait beaucoup d'USB, je sais que si vous faites de l'USB à partir de zéro, cela impliquerait d'écrire des pilotes sur votre machine hôte . Le moyen le plus courant consiste à utiliser un circuit intégré qui gère déjà tout le protocole USB et les pilotes et qui se comporte comme un port série sur votre ordinateur. Vous avez essentiellement un pont USB-série qui peut se connecter à un port série de votre microcontrôleur. Je pense que l'Arduino fait cela. Pas sûr de Netduino. Donc, oui, vous pouvez utiliser C # pour communiquer via USB via un port spécifique (en supposant que vous le faites de manière simple et en utilisant un pont USB-série).

Ce que vous proposez de faire est certainement possible. Vous pouvez écrire un programme qui s'interface avec votre base de données et qui peut envoyer et recevoir des données série vers votre microcontrôleur.

Merci d'avoir répondu. Je peux voir sur sparkfun qu'ils ont les contrôleurs et le thermomètre, mais quel type de moteur fonctionne avec un microcontrôleur?
N'importe quel moteur vraiment. Chaque moteur doit être contrôlé, et selon le moteur, cela peut varier selon les modèles, types, etc. Une fois que vous savez comment le moteur est contrôlé, il faudrait créer un circuit (un microcontrôleur seul ne suffit pas), qui interface votre microcontrôleur avec le moteur.
Les moteurs @user2278106 nécessitent un courant plus élevé qu'un micro typique peut fournir. Vous aurez probablement besoin d'un pilote de moteur ou d'une solution similaire (par exemple, un pont en H). La sélection du moteur est dictée par les exigences mécaniques du système (combien de couple est nécessaire pour ouvrir / fermer la fenêtre, et à quelle vitesse voulez-vous qu'elle s'ouvre / se ferme), et les pilotes sont choisis / conçus une fois qu'un moteur est sélectionné
Passerby
2013-04-18 14:10:55 UTC
view on stackexchange narkive permalink

Pour répondre à un point spécifique, un microcontrôleur pourrait supposer avoir un (très grand nombre) de capteurs connectés. L'utilisation de capteurs de bus, comme i2c, spi, un fil, série ou tout autre protocole de bus, vous permettrait d'avoir x plusieurs par bus, où x est la limite pour un bus donné. Vous auriez à suivre certaines spécifications techniques pour le câblage du bus, et avec plusieurs du même bus, pourrait s'étendre encore plus.

La limite est vraiment en termes de vitesse et de praticité. Je pourrais avoir un millier de capteurs sur un seul arduino, mais pourrais-je alimenter, lire, traiter et afficher ces informations dans un délai raisonnable? Cela dépend peut-être de votre capacité à coder ou de votre imagination.

Même les capteurs analogiques peuvent être réalisés de cette manière, en utilisant des multiplexeurs ou des ADC. La meilleure question n'est pas "combien de capteurs un microcontrôleur peut utiliser" mais "de combien de capteurs ai-je besoin" et à partir de là.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...