IoT atelier : Lab 3 - contrôle de sortie avec entrée (4 / 6 étapes)

Étape 4: Écriture du Code

Pour cet exercice, vous allez créer un nouveau fichier nommé lab003.js dans le même répertoire que vous avez fait dans les laboratoires de la précédentes. Il n’y a pas de dépendances supplémentaires, nous n’avez pas besoin d’apporter des modifications au fichier package.json.

Dans le fichier lab003.js commencer par déclarer les objets clés, y compris une variable pour la goupille de la LED et la broche analogique que vous utiliserez (broche numérique 13 pour la LED et la broche analogique A0 pour la photorésistance - si vous avez encore votre planche projet filaire vers le haut des laboratoires précédents, alors vous devriez être tous ensemble). Vous devriez également talon sur la fonction de rappel board.on() de Johnny Five.

 var five = require("johnny-five"); var board = new five.Board(); var LEDPIN = 13; var ANALOGPIN = 0; board.on("ready", function() { // The next code will go here }); // You will add a couple functions here later in the lab 

À l’intérieur de la fonction board.on() vous initialisera tout d’abord la broche numérique que vous utiliserez pour la LED comme une épingle de modulation (PWM) de largeur impulsion.

 board.on("ready", function() { // Set pin 13 to PWM mode this.pinMode(LEDPIN, five.Pin.PWM); }); 

Ensuite, vous utiliserez la fonction analogRead() pour capturer les données provenant de la photorésistance. Dans le Lab 2 vous simplement écrit les données dans le journal de console. Pour cet atelier, vous utiliserez les données pour déterminer la luminosité des LED devrait être. Le concept est le même, mais la fonction de rappel que vous écrivez cette fois aura un peu plus (mais pas beaucoup).

Tout d’abord, définir la fonction analogRead() et la fonction de rappel qui sera appelée lors de l’entrée de données est reçue. Le format est this.analogRead (pinNumber, callbackFunction) ;

 // read the input on analog pin 0: this.analogRead(ANALOGPIN, function(val) { // The next code will go here }); 

Cette fonction indique à l’application pour lire les données de la broche analogique (0 dans ce laboratoire) et lorsque l’entrée est collectée, appeler la fonction de rappel dans le deuxième argument et passer la dat d’entrée dans l’argument de val .

Votre objectif est de créer une application qui augmente la luminosité de la LED comme les baisses de lumière ambiante. Si il est léger dans la salle, vous ne voulez pas la LED s’allume, et le plus sombre il obtient plus vous voulez la LED pour obtenir. Vous voulez aussi un seuil de lumière ambiante où la LED s’éteint (c'est-à-dire, vous ne voulez pas avoir la LED faiblement éclairée dans une pièce modérément claire - il juste s’use la LED). La façon de procéder consiste à mapper la tension d’entrée à la tension de sortie de la photorésistance pour la LED. Il y a une incompatibilité. L’entrée de la photorésistance est dans une gamme de 16 bits de 0-1023 et le PWM pris en charge par notre Conseil d’administration est une gamme de 8 bits de 0 à 255. Vous pouvez simplement diviser la valeur d’entrée dans la moitié, mais vous avez encore besoin tenir compte du seuil minimal.

Si vous faisiez cela en C en utilisant les structures Arduino, valeurs et fonctions, sans utiliser les frameworks tels que Johnny-cinq, vous pouvez utiliser la fonction map() mapper la valeur d’entrée dans une nouvelle plage de données, telles que la cartographie de la valeur d’entrée analogique (varie de 0-1023) à une nouvelle gamme de 0 à 255. Vous pouvez le faire ici - il suffit d’écrire la fonction map() vous-même. Ajoutez le code suivant à la fin du fichier lab003.js (après la fin de la fonction board.on() .

 // This function maps a value from one range into another range // Example: map (25, 0, 25, 0, 50) returns 50 // Example: map (20, 0, 100, 0, 10) returns 2 function map(x, in_min, in_max, out_min, out_max) { return Math.round((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min); } 

Il s’agit de la formule exacte utilisée par l’Arduino. Cette fonction vous pouvez passer une valeur et son aire de répartition prédéfinie, et la plage souhaitée et elle retournera la valeur appropriée pour cette gamme.

La fonction map() retournent des valeurs négatives vous devez également recréer la fonction constrain() Arduino, qui vous permettra de s’assurer que la valeur est limitée à une valeur minimale et maximale. Ajoutez le code suivant immédiatement après la fonction map() .

 // This function ensures a value is within a defined range function constrain(x, in_min, in_max) { return Math.round(x < in_min ? in_min : x > in_max ? in_max : x); } 

Maintenant, la vous avez écrit les fonctions support pour map() et constrain() , vous pouvez écrire la fonction de rappel pour la fonction analogRead() , vous commence à écrire à l’intérieur de la fonction board.on() ... Tout d’abord, vous devez utiliser la fonction map() pour mapper la valeur entrante de la photorésistance pour une valeur de luminosité de la LED.

 // read the input on analog pin 0: this.analogRead(ANALOGPIN, function(val) { // Map the analog value (0-1023) to an 8-bit value (0-255) // so it can be used to define the LED output. var brightness = map(val, 350, 1023, 0, 255); }); 

Lorsque vous définissez la valeur de luminosité vous mappé les données entrantes allant de 350-1023 à 0-255. Ce faisant, vous définissez efficacement la valeur de lumière ambiante de 350 à un éclat de 0 (puisque 350 cartes à 0). Si la valeur en provenance de la photorésistance est inférieure à 350 alors la fonction map() retournera une valeur négative. Pour tenir compte de la possibilité d’une valeur négative, vous pouvez contraindre la valeur pour les 0-255 rang à l’aide de la fonction constrain() , vous avez écrit.

 // read the input on analog pin 0: this.analogRead(ANALOGPIN, function(val) { // Map the analog value (0-1023) to an 8-bit value (0-255) // so it can be used to define the LED output. var brightness = map(val, 350, 1023, 0, 255); // Use the constrain function to ensure the right values brightness = constrain(brightness, 0, 255); }); 

Cela garantira que la valeur de luminosité est comprise entre 0 et 255.

La dernière étape consiste à définir la valeur de l’axe de sortie à la valeur de luminosité. Lab 1, vous avez utilisé digitalWrite() pour affecter à l’axe de sortie soit haute ou basse (1 ou 0). Étant donné que vous avez défini la broche de sortie LED comme une goupille PWM vous allez utiliser analogWrite() au lieu de cela, qui nous dira le jury pour simuler un appareil analogique à l’aide de PWM. Pour des fins de débogage, vous pouvez également ajouter un appel de console.log() .

 // read the input on analog pin 0: this.analogRead(ANALOGPIN, function(val) { // Map the analog value (0-1023) to an 8-bit value (0-255) // so it can be used to define the LED output. var brightness = map(val, 350, 1023, 0, 255); // Use the constrain function to ensure the right values brightness = constrain(brightness, 0, 255); console.log('val: ' + (val * (5.0 / 1024.0)) + '; brightness: ' + brightness); // Set the brigthness of the LED this.analogWrite(ledPin, brightness); }); 

C’est tout le code - vous êtes maintenant prêt à exécuter l’application.

Articles Liés

Contrôler vos sorties RF avec LinkIt One

Contrôler vos sorties RF avec LinkIt One

J'ai récemment acheté un ensemble de minuteries mur prise pour quelques lumières dans ma maison. Tout en ayant toutes les lumières mettre « on » à un certain moment est cool, j'ai réalisé qu'il y avait quelques inconvénients. Tout d'abord, alors que
Photo Frame contrôleur de jeu avec Makey Makey et gratter

Photo Frame contrôleur de jeu avec Makey Makey et gratter

Dans ce Instructable vous trouverez comment faire un contrôleur de jeu de cadre de photo que vous pouvez utiliser pour contrôler un personnage dans une égratignure jeu via un Makey Makey. Il s'agit d'un amusant projet pour un adulte et un enfant de f
Bluetooth sous contrôle LED portable avec Intel Edison

Bluetooth sous contrôle LED portable avec Intel Edison

Avez-vous déjà imaginé un monde où vous pouvez modifier le modèle d'une robe avec une pression sur le bouton ? Ou un pour pouvoir modifier la hauteur d'un ourlet avec un coup de vous doigts ? Technologie permet contrôle et personnalisation dans des e
Contrôle de cardan avec Google verre sans

Contrôle de cardan avec Google verre sans

Cette instructable sert une version abrégée d'un document plus long sur l'installation et le fonctionnement d'un système de contrôle sans fil de cardan à l'aide de Google Glass.Les méthodes et les résultats sont généralement en phase de bêta-test et
Raspberry Pi Zero - contrôle RGB Leds avec E-déchets

Raspberry Pi Zero - contrôle RGB Leds avec E-déchets

Hé Nation économe,Je vais vous montrer comment contrôler une bande de RVB led avec votre pi framboise et pigpioJ'ai construit ce circuit hors déchets électroniques consistant en une ancienne carte mère et une alimentation mortsSi la vidéo ci-dessus n
Contrôler l’Arduino avec python basé web API (pas de php)

Contrôler l’Arduino avec python basé web API (pas de php)

Dans ce guide, je vais vous montrer comment contrôler votre appareil arduino d'une page Web ! Par la suite, je vais vous montrer comment contrôler votre arduino depuis votre appareil mobile et même créer une API basée sur le web pour contrôler votre
Contrôler un ordinateur avec votre esprit !

Contrôler un ordinateur avec votre esprit !

Contrôler votre ordinateur avec votre esprit semble définitivement comme toujours sorti d'un film de science-fiction, mais contrôle de l'esprit est en fait une chose relativement facile et peu coûteux à réaliser. À l'aide d'un jouet bon marché d'EEG,
Contrôle Arduino RoverBot avec télécommande TV

Contrôle Arduino RoverBot avec télécommande TV

je suis un Hacker pauvres d'Arduino âgé de 15 ans, qui a peu d'accès aux composants et matériaux pour construire un robot Hi-Tech.  Je suis sûr qu'il y a beaucoup d'autres là-bas qui sont dans ma situation.  Ce petit Instructable va expliquer et démo
Contrôler vos LEDs avec votre télécommande de la TV? ! || Arduino IR tutoriel

Contrôler vos LEDs avec votre télécommande de la TV? ! || Arduino IR tutoriel

Dans ce projet, je vais vous montrer comment j'ai réaffecté les boutons inutiles sur mon téléviseur distant pour contrôler les LEDs derrière mon téléviseur. Vous pouvez également utiliser cette technique pour contrôler toutes sortes de choses avec un
Contrôler un Arduino avec votre téléphone.

Contrôler un Arduino avec votre téléphone.

Dans ce Instructable je vais montrer comment contrôler vos trucs avec votre téléphone et la carte arduino. J'ai commandé tout de machines à fumée trop légères christmas populaire avec ce programme.Vidéo :Désolé, que la vidéo est un peu étrange parce
Hack-A-lampe ou comment contrôler l’Arduino avec votre smartphone

Hack-A-lampe ou comment contrôler l’Arduino avec votre smartphone

J'ai eu une lampe ikea dans mon condo, il fonctionne bien, s'allume, s'éteint... qu'elle ne. C'est ennuyeux kindy, n'est-il pas ? Je pensais, que se passe-t-il si j'ai le hack ? LED RGB viennent alors à ma tête et les idées ont commencé à s'écouler.A
Contrôler un Arduino avec cacao (Mac OS X) ou c# (Windows)

Contrôler un Arduino avec cacao (Mac OS X) ou c# (Windows)

non je ne parle pas contrôler un Arduino avec une barre de chocolat ou de cacao en poudre. Je parle le langage de programmation Objective-C. Quel est donc le cacao ? Le cacao est un ensemble d'écrits dans le langage de programmation de Objective-C po
2RM voix contrôlée Robot avec Arduino et serveur BitVoicer

2RM voix contrôlée Robot avec Arduino et serveur BitVoicer

Dans ce Instructable je vais montrer comment construire un robot de commande vocale 2RM . Même si je suis contrôle uniquement les moteurs à courant continu pour déplacer le robot, la même approche peut servir à la voix-contrôle de moteurs pas à pas e
Arduino universel Bluetooth Connect - contrôle votre Arduino avec votre appareil Android

Arduino universel Bluetooth Connect - contrôle votre Arduino avec votre appareil Android

J'ai toujours voulu contrôler plus facilement mon Arduino avec mon Smartphone, mais j'ai jamais trouvé la solution parfaite pour le faire. Je ne veux pas dire que c'est parfait, mais il fait ce que je veux qu'il do...well pas complètement, mais je su