Étape 6: Arduino Sketch
J’ai ajouté moutons originales Ethan Dicks sculpture esquisse à cette étape. Je vais ajouter un fichier de dessin mis à jour à une date ultérieure, lorsque j’ai finalisé la conception. Ceci obtiendra au moins vous avez commencé avec deux écharpes de travail.
/ * ++ Moutons - utilisent une combinaison de RGB et LED IR et un capteur photoélectrique d’imiter la foule réagissant comportement (émergent), copiez le code suivant va avec le fusible usine atelier « Faire an Emergent comportement Sculpture avec l’Arduino » http://thefusefactory.org/2009/09/03/make-an-emergent-behavior-sculpture-with-the-arduino/ l’a, ou les « moutons », est un assemblage artistique d’un kit Lilypad Pro (base Lilypad attaché à une unité d’alimentation de 5V Ilusyon) avec un tri-color LED monté sur la MCU 328V sur le plateau de Lilypad. Un grand Protoboard de Lilypad se trouve entre le bloc d’alimentation et le Lilypad lui-même pour acheminer la puissance et d’organiser les résistances et les composants de l’IR. L’illusion d’un quadraped est complétée par 1W et 2W LED soudé à l’UAP « corps » et plié en tant que de jambes. Le code dépend d’une variable persistante, appelée « mood » - lorsqu’elle est nulle ou presque nulle, le mouton est « heureux ». Au-dessous de zéro et le mouton est « solitaire » ; au-dessus de zéro et de l’estime de moutons bondé ou agité. Solitude est représentée par le bleu, le bonheur par green et agitation de rouge. Entre exprimant "mood" (à l’aide de PWM à le pour ombre de la LED RGB), la partie principale du code vérifie les impulsions de l’IR d’autres brebis et peut émettre ses propres impulsions à "crier" pour les autres moutons. En ajustant les variables internes, les moutons peuvent être plus ou moins sensibles aux appels d’autres ovins. Le comportement émergent sort lorsque plusieurs moutons sont assemblés et posées sur une table, criant à l’autre. La bourrasque d’impulsions IR peut induire la brebis à être heureux ou peut-être agité. Quelques impulsions et le mouton présente la solitude. Sheep.PDE - transformer un Arduino en une sculpture de comportement émergent Copyright (C) 2009, Ethan Dicks ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier sous les termes de la GNU General Public License telle que publiée par la Free Software Foundation, soit la version 3 de la licence, ou (à votre choix) toute version ultérieure. Ce programme est distribué dans l’espoir qu’il sera utile, mais sans aucune garantie ; sans même la garantie implicite de qualité marchande ou d’ADEQUATION a un usage particulier. Voir la GNU General Public License pour plus de détails. Vous devriez avoir reçu une copie de la licence publique générale GNU avec ce programme. Si non, voir.--* / / * ++ initialisation Variable - avant le début du code, mettre tous les paramètres utilisateur-réglable en haut afin qu’ils soient faciles à modifier. --* / / / Définition des valeurs de « mood » #define MOODMAX 80 #define MOODMIN (-1 * MOODMAX) #define solitaire (MOODMIN) #define HAPPY (0) #define BONDÉ (MOODMAX) #define MSTEPS 5 #define BLEAT_VOLUME 1 / / Global définitions de possiblité de broche (pour simplifier les appels de fonction individuelle) int statusPin = 13 ; LED de contrôle embarqué est connecté à la broche numérique 13int redPin = 11 ; Pétale de R le module LED RVB connecté à la broche numérique 11int greenPin = 9 ; Pétale de G sur le module LED RVB connecté à la broche numérique 9int bluePin = 10 ; Pétale de B sur le module LED RVB connecté à la broche numérique 10int sensorPin = 5 ; Phototransistor IR connecté à la broche numérique 5int irPin = 6 ; IR LED connectée à la broche numérique 6 / / commencer s’attendant à être int heureux humeur = HAPPY ; Garder une trace de ce sens de le œil d’entrée pinint = 0 ; Et n’oubliez pas comment « loud », nous sommes « bêlement"(clignotant nos LED IR) int bêlement = BLEAT_VOLUME ; / * ++ setup() - l’environnement Arduino appellera le code dans setup() une fois seul, juste après que le jury est remis à zéro. Mettre le code dans cette fonction pour initialiser les broches e/s et autres - choses qui doivent seulement être fait une fois au cours d’une course. --* / voidconfiguration() {/ / pour le débogage Serial.begin(9600) ; Serial.println ("moutons v0.02") ; Pour la plupart, nos broches d’e/s sont sorties à LEDs pinMode (statusPin, sortie) ; définit le statusPin être une sortie pinMode (redPin, sortie) ; définit le redPin être une sortie pinMode (greenPin, sortie) ; définit le greenPin être une sortie pinMode (bluePin, sortie) ; définit le bluePin pour être une sortie pinMode (irPin, sortie) ; définit l’irPin faire une sortie / / une seule exception est le IR phototransistor pinMode (sensorPin, entrée) ; définit le sensorPin être une entrée Serial.print ("réglage IR ' bêlement" à") ; Serial.println(bleat) ; analogWrite (irPin, bêlement) ; } / * ++ loop() - l’environnement Arduino appelle le code de cette boucle pour toujours. Mettez ici des choses intéressantes qui sont destinés à être exécuté sans cesse après que setup() est appelée une seule fois. Le seul moyen de sortir de cette boucle est de réinitialiser la carte. --* / voidloop() / / run maintes et maintes fois {/ / Set nos LED RGB pour refléter notre "mood", qui je l’espère changera de temps en temps set_mood(mood); / / ralentir à quelle vitesse nous réagissons aux autres delay(100) 'moutons'; / / retard pendant 1 seconde / / sensorPin a une résistance de 10 K pullup, donc * non * lumière signale un 1. Il faut / / inverser le sens logique de la broche si nous voulons penser logiquement de la lumière / / 1-est-sur/0-est-off œil = 1 - digitalRead(sensorPin) ; la valeur oeil 1 si nous « voir » tout IR lumière / / rapport notre statut présent à chaque fois la boucle Serial.print (« humeur est") ; Serial.Print(Mood) ; Serial.Print("
. Capteur est ") ; Serial.println(Eye) ; Si nous voyons des impulsions d’une autre « mouton », incrémenter l’humeur, mais MOODMAX pas passé si (œil) {/ / puisque les humains ne peut pas « voir » la lumière infrarouge, utiliser la LED d’État comme un indicateur visible digitalWrite (statusPin, HIGH); / / écho détection d’entrée IR sur le statut LED humeur += MSTEPS * 2; if (humeur > MOODMAX) {humeur = MOODMAX;}} / / si nous ne voyons aucune impulsions IR, decrement, l’humeur, mais d’autre pas ci-dessous MOODMIN {/ / puisque les humains ne peut pas « voir » la lumière infrarouge , utiliser la LED d’État comme un indicateur visible digitalWrite (statusPin, basse) ; l’écho de détection d’entrée IR sur le statut LED humeur = 1 ; Si (humeur < MOODMIN) {humeur = MOODMIN;}} } / * ++ set_mood - convert « humeur » à un jeu de couleurs Mood varie d’un nombre négatif à cette même valeur comme un nombre positif (jusqu’ici, -80 / 80 et -100 / + 100 produisent des résultats raisonnables). Toutes proportions gardées, le continuum de l’humeur au mappage de couleur semblable au suivant : humeur -100 + 100 0 Lonely -> Happy -> CrowdedR 0 0 0 30 100 G 0 30 100 70 0 b 100 70 0 0 0--* / void set_mood (int humeur) {/ / commencer avec chaque couleur étant off - ajuster le haut issu des rougeurs unsignedchar "mood" = 0; unsignedchar verdeur = 0; unsignedchar bleu = 0; #ifdef DEBUG Serial.print (« humeur est") ; Serial.println(Mood) ; #endif / / bleu est tout à propos de humeur étant moins si alors heureux (humeur < HAPPY) {bleu = abs(mood) ; verdeur = MOODMAX + humeur;} / / rougeur est tout au sujet d’être d’humeur plus que heureux elseif (humeur > HAPPY) {rougeur = humeur ; verdeur = MOODMAX - humeur;} / / verdure est quelque humeur étant deux heureux d’autre {verdeur = MOODMAX;} / / Set la LED pour refléter la couleur de notre humeur actuelle (rougeur, vert, bleu) ; } / * ++ couleur (r, g, b) - définir le tricolore a conduit à la valeur demandée de couleur utilise analogWrite (pin, valeur) à la valeur PWM pour chaque couleur individuelle de LED la LED tricolore est un dispositif commun-anode, donc à prendre à la légère, nous au sol la goupille désirée. Pour inverser le signal PWM, nous soustrayons notre intensité souhaitée de 255, afin que, par exemple, si nous voulons rouge, logiquement, nous passent autour d’une valeur de zéro, mais la valeur PWM sur 255 afin que la broche est entraînée haute 100 % du temps. Pour obtenir du rouge à la luminosité maximale, nous passent autour d’une valeur logique de 255, mais la valeur PWM sur 0, tirant sur cette broche bas 100 % du temps.--* / void couleur (unsignedchar rouge, unsignedchar verte, unsignedchar bleu) / / la couleur fonction génératrice {#ifdef DEBUG Serial.print("color(") ; Serial.Print(Red,hex) ; Serial.Print(Blue,hex) ; Serial.Print(Green,hex) ; Serial.println(")") ; #endif / / inverser le sens de la valeur PWM lorsque vous appelez analogWrite() pour chaque couleur analogWrite (redPin, 255-rouge) ; analogWrite (bluePin, 255-bleu) ; analogWrite (greenPin, 255-vert) ; }