Suivi d’une Source de lumière avec un actionneur (5 / 6 étapes)

Étape 5: Suivez cette desklamp !

OK, alors peut-être il y a une meilleure application de suivi un desklamp...:)

Si vous téléchargez le code que suit à l’Arduino, vous devriez être capable de reproduire les résultats dans la vidéo.

/ * Ce script déplace un actionneur jusqu'à ce que d’entrée analogique maximal est atteint. Alors que c' est exemple d’application est de suivre une source lumineuse avec une cellule solaire qui est attachée à l’extrémité de l’actionneur, il pourrait servir à suivre puisscance quoi que ce soit attaché à la LIGHT_SENSOR_PIN. peut-être comme son source suivi trop ? :) * / #define ACTUATOR_AMP_SENSOR_PIN A5 #define ACTUATOR_PWM_PIN 11 #define ACTUATOR_DIR_PIN 12 #define LIGHT_SENSOR_PIN A4 / / Vitesse maximum est de 255 - c’est la valeur qui est écrit / / à la ACTUATOR_PWM_PIN. Remarque ne pas modifier ou limiter / / détection il n’y aucun travail #define ACTUATOR_SPEED 255 / / la valeur analogique du capteur amp se situe entre elles, c’est / / considérée comme au repos (pas de courant en cours d’élaboration). #define ZEROAMP_RANGE_LOW 505 #define ZEROAMP_RANGE_HIGH 520 / / directions pour l’actionneur (Obtient la valeur ACTUATOR_DIR_PIN) #define rétracter 0 #define EXTEND 1 / / ne bougent pas si échantillonné lumière valeur d’entrée se trouve dans / / STILL_TOLERANCE de g_lastInputValue #define STILL_TOLERANCE 2 / / déplacer le déclencheur jusqu'à ce que la chute de max est inférieur à #define SEEK_TOLERANCE 2 / / nombre minimal de millisecondes de retard entre l’échantillonnage de la ACS712 / / recommandé dans fabricant échantillon source #define SAMPLING_DELAY 1 int g_currentDirection = EXTEND ; int g_lastInputValue = 0 ; limité à 255 char chaînes void serialPrintf (char const * format,...) {tampon char [255] args va_list va_start (args, format); vsprintf (tampon, format, args); va_end(args) ; Serial.println(buffer) ; } booléenne isActuatorMoving() {int val = analogRead(ACTUATOR_AMP_SENSOR_PIN); / / serialPrintf ("lecture de capteur Amp: %d", val); retourner val < ZEROAMP_RANGE_LOW || val > ZEROAMP_RANGE_HIGH;} void stopActuator() {analogWrite (ACTUATOR_PWM_PIN, 0);} boolean almostEqual (int a, int b, int tolérance) {retourner un > = b - tolérance & & un < = b + tolérance;} / / mSeconds = éventuellement se déplacer dans la direction n millisecondes, puis s’arrêtera / / retourne false si mSeconds! = 0 et à fin de voyage boolean moveActuator (int direction int mSeconds = 0) {serialPrintf ("déplacement direction actionneur = %d", direction); analogWrite (ACTUATOR_PWM_PIN, ACTUATOR_SPEED); digitalWrite (ACTUATOR_DIR_PIN, direction); if(mSeconds > 0) {delay(mSeconds) ; boolean stillMoving = isActuatorMoving() ; stopActuator() ; return stillMoving;} retourne true;} / / renvoie le nombre de millisecondes prises unsigned long moveActuatorToEnd (int direction) {long startMs = millis() ; moveActuator(direction) ; tandis que (isActuatorMoving()) {delay(SAMPLING_DELAY); / / léger délai entre le prélèvement le module ACS712 est recommandé} stopActuator() ; stopSP long = millis() ; return stopSP - startMs;} Sub changeDirection (int direction = -1) {si (direction == -1) direction = g_currentDirection + 1 ; masque de bit unique - 0 ou 1, 0 + 1 est 1 et 1 + 1 devient g_currentDirection 0 = direction & 1 ; } / / trouve le maximum d’entrée en passant par la gamme complète du mouvement calibrate() Sub {moveActuatorToEnd(EXTEND); / / démarrer complètement sortie long tMaxInput = 0; / / temps écoulé alors que rétracter cette entrée Max. était atteint int maxInput = 0; / / quel a été le startMs long d’entrée = millis() ; moveActuator(RETRACT) ; tandis que (isActuatorMoving()) {int inputValue = analogRead(LIGHT_SENSOR_PIN) ; if (inputValue > maxInput) {maxInput = inputValue ; tMaxInput = millis() - startMs ; delay(SAMPLING_DELAY);}} stopSP long = millis(); / / revenir au moment quand à max moveActuator (étendre stopSP - startMs - tMaxInput) ; } / / retourne false si à la fin du voyage boolean seekHighInput (int code pin, direction int, int inputValue) {int nextInputValue = inputValue ; int maxInputValue = inputValue stillMoving booléenne booléenne atMax ; serialPrintf ("cherchant à un apport élevé en direction % d. inputValue = %d", direction, inputValue); moveActuator(direction) ; do {delay(SAMPLING_DELAY) ; stillMoving = isActuatorMoving() ; if (nextInputValue > maxInputValue) maxInputValue = nextInputValue ; nextInputValue = analogRead(pin) ; serialPrintf ("stillMoving = %d nextInputValue = %d", stillMoving, nextInputValue); atMax = almostEqual (nextInputValue maxInputValue, SEEK_TOLERANCE) ; } tandis que (stillMoving & & atMax) ; stopActuator() ; Return stillMoving ; } void seekToLight() {boolean stillMovable ; int inputValue = analogRead(LIGHT_SENSOR_PIN) ; int initialValue = inputValue ; if (almostEqual (inputValue, g_lastInputValue, STILL_TOLERANCE)) {return;} stillMovable = seekHighInput (LIGHT_SENSOR_PIN, g_currentDirection, inputValue); inputValue = analogRead(LIGHT_SENSOR_PIN) ; lessThanAtStart booléen = inputValue < initialValue - STILL_TOLERANCE ; si ()
! stillMovable || lessThanAtStart) {changeDirection();} / / si nous recevons moins entrée qu’au début de cet appel, changeDirection / / et retour à if max (lessThanAtStart) {seekHighInput (LIGHT_SENSOR_PIN, g_currentDirection, inputValue);} g_lastInputValue = inputValue ; } / / la routine d’installation s’exécute une fois que lorsque vous appuyez sur reset : void setup() {/ / initialiser la communication série 9600 bits par seconde : pinMode (ACTUATOR_PWM_PIN, OUTPUT); pinMode (ACTUATOR_DIR_PIN, OUTPUT); pinMode (entrée, ACTUATOR_AMP_SENSOR_PIN), Serial.begin(9600) ; pinMode (entrée, LIGHT_SENSOR_PIN); / / on n’a vraiment pas besoin de calibrer quoi que ce soit, l’algorithme de recherche devrait traiter / / variance dans les gammes d’entrées pour le capteur de lumière. / / / / source de l’analyse de l’amplitude des mouvements d’entrée plus élevée que calibrate() / / effectue mai venez en pratique dans des environnements de lumière ambiantes élevées, où il est difficile / / pour distinguer une source singulière. L’algorithme de recherche devront être itérée / / sur le meilleur support des environnements de lumière ambiantes élevées / / / / calibrate() ; serialPrintf ("installation complète") ; } / / la routine de la boucle s’exécute maintes et maintes fois pour toujours : void loop() {seekToLight();}

Articles Liés

IR, suivi d’une tourelle avec PIC et C

IR, suivi d’une tourelle avec PIC et C

Il s'agit d'un projet d'apprentissage bon c'est amusant de construire - j'ai sorti beaucoup de ce qui en fait. Je pense que cela a été fait tout à fait un peu déjà, mais je n'ai pas trouvé un moyen simple de le faire avec des photos. Quand j'ai eu en
Comment allumer une LED ou lumière régulière avec USB !

Comment allumer une LED ou lumière régulière avec USB !

Ce Instructable va vous apprendre comment allumer une ampoule d'éclairage à travers un port USB !Désolé : Je n'ai actuellement aucun caméra donc je ne peux pas charger vers le haut de toutes les images !Mais : J'ai un scanner donc je vais faire de mo
Transformer un écran cassé 22" une boîte à lumière

Transformer un écran cassé 22" une boîte à lumière

Vous avez chez vous un écran cassé ? Besoin d'un jour nouveau? !Réutiliser le rétro-éclairage de votre écran cassé !J'ai eu un Samsung 22" panel, LCD est cassé, alors j'ai décidé de le transformer en une source de lumière.Premières étapes sont simple
Source de lumière du spectre

Source de lumière du spectre

besoin de sources de lumière monochromatique ?  Remarquant le fait que beaucoup de voyants ont spectre très étroit, j'ai voulu faire une source de lumière multi-étroit-spectre à des fins scientifiques diverses telles que des spécimens de botanique so
La source de lumière 10W LED fibre

La source de lumière 10W LED fibre

au cours de ces dernières années j'ai été lentement rassembler un microscope stéréo Franken-ebay. Le stand, microscope et anneau de lumière tout est venu de différents fournisseurs et ont été choisis principalement parce que le prix était juste. Adap
Source de lumière portable

Source de lumière portable

une source de lumière portable, fonctionnant sur batterie peut être très utile lorsque vous cherchez des méthodes rapides et bon marchés d'extérieur éclairage (ou à l'intérieur lorsqu'une prise est difficile à trouver). Cette instructable couvre la c
Précieuse source de lumière...

Précieuse source de lumière...

j'ai utilisé cela plusieurs fois afin de préserver la précieuse source de lumière...Étape 1: prendre une batterie... Prendre une batterie sinon vous pouvez prendre une source de petite batterie d'une voiture rc... nous pouvons également prendre une b
Construire une boîte à lumière super bon marchée pour la photographie macro.

Construire une boîte à lumière super bon marchée pour la photographie macro.

Je voulais prendre quelques photos de petits objets de près, mais j'ai été satisfait par les images originales. L'éclairage était pauvre et les couleurs semblent être rincés. J'ai donc décidé de construire une boîte à lumière de divers éléments, que
Un ensemble de construction avec une lumière et une source d’électricité seulement à l’aide de réflexion en physique de la lumière

Un ensemble de construction avec une lumière et une source d’électricité seulement à l’aide de réflexion en physique de la lumière

mon projet est assez simple et tellement incroyable, imaginez que vous pouvez allumer un bâtiment ou même plus à l'aide d'une lumière et une source d'électricité et la chose la plus importante... la physique, je vais vous dire comment... ce projet es
Vos périphériques USB avec une source d’alimentation 6-24V comme les panneaux solaires de puissance

Vos périphériques USB avec une source d’alimentation 6-24V comme les panneaux solaires de puissance

Avez-vous jamais vous-même trouvé avec une source d'alimentation 6-24V, ou panneaux solaires, nous vous souhaitons pourrait recharger votre téléphone ou exécuter n'importe quel autre périphérique USB de 5V ? Eh bien maintenant vous pouvez !Il s'agit
Un schéma de circuit simple avec une source de tension simple et des résistances en série et en parallèle de problèmes

Un schéma de circuit simple avec une source de tension simple et des résistances en série et en parallèle de problèmes

Mechanical engineers nécessitent quelques connaissances de base des circuits, l'électricité et des concepts connexes afin de travailler multi-plateforme avec ingénieurs électriciens, électriciens, informaticiens et autres assimilés. Ce Instructable a
Game Boy Light alimenté par une pile : un autre projet avec SUGRU

Game Boy Light alimenté par une pile : un autre projet avec SUGRU

nous les aimons, nous le jeu avec eux et ils se tiennent comme l'un des plus grands mobiles consoles hors de tous les temps. Mais vous ne pouvez pas toujours eux jouer dans le noir. j'ain ce projet j'ai Difficulté on de la Gameboy colour plus ennuyeu
Une main robotique modulaire & bras (avec la gamme étendue de mouvement) (3D imprimés)

Une main robotique modulaire & bras (avec la gamme étendue de mouvement) (3D imprimés)

Bonjour à tous ! Il s'agit de ma prothèse de bras et des mains de prototype que j'ai été la conception depuis plusieurs mois maintenant. C'est encore un peu d'un work in progress, et depuis que je suis en finir avec les classes de collège pour le sem
Comment pirater une Time Capsule d’Apple avec une framboise Pi

Comment pirater une Time Capsule d’Apple avec une framboise Pi

Introduction de la « Capsule de Pi ». Il est actuellement le seul Apple Time Capsule, vous pouvez brancher sur votre téléviseur..., cela rend un Apple TV ? ;-)OK, ok, disons que vous avez un vieux Apple Time Capsule autour de la pose qui ne fonctionn