Le capricieux nocturne - Jed Diller et Ken Hoff (3 / 6 étapes)

Étape 3: Code comportemental Overview

Comme mentionné précédemment, l’Arduino Mega contrôle le comportement des étoiles, des paires d’yeux et firefly. Il y a beaucoup de choses à considérer lorsque vous écrivez du code propre pour le comportement de votre écran. Voici ce que nous avons choisi de le faire.

Objectifs pour le Code de comportement nocturne capricieux :

-3 séparer les groupes de LED : vedettes, des paires d’yeux et firefly, chacune avec un comportement distinct.
-Individu stars et de paires d’yeux agissent comme des entités distinctes
-La luciole fonctionne comme une seule entité
-Les stars se fanent dedans et dehors, imitant un clin d’oeil. (Cela a été fait à l’aide de la modulation de largeur d’impulsions)
-Les paires d’yeux clignotent au hasard
-Tous les groupes répondent aux sons et reprendre le comportement continuellement.

Comment ça marche:

-Au cours de la boucle principale, chaque entité (star, paire d’yeux, firefly) est éveillé ou endormi
-Si il est éveillé, nombres aléatoires sont utilisés pour déterminer le moment de clignotement/fondu les yeux/stars et la luciole continue sur son chemin vers la prochaine broche LED
-Si il est endormi, la variable « temps endormi » est augmentée

Quand il y a un son (et le seuil est violé) :

-Chaque entité est définie endormi, et temps endormi commence à augmenter
-Alors qu’une entité est endormie :
-Chaque fois qu’une entité endormie est visitée, un nombre aléatoire est généré et par rapport à la fois que l’entité a été endormie - si temps endormi est supérieure, que l’entité se réveille.
-Ceci conduit à chaque entité se faire réveillée au hasard à des moments différents.

Questions et conseils :

-Lorsque vous écrivez le code comportemental, le construit en Arduino fonction delay() doit être évitée car il peut contenir jusqu'à tous les autres processus en cours. C’est intenable, avec trois groupes de LED se comporter différemment et en même temps. Au lieu de cela, le nombre d’itérations de la boucle principale peut être utilisé pour un comportement dépendant au moment. Notez que le temps de que nécessaire pour chaque itération de la boucle principale est dépendante de la quantité trucs que vous ayez passe qu’il contient. Tâtonnements et l’art du raffinement sont vos amis.
-Comme indiqué dans l’étape 3, nous avons eu bruit microphone insurmontables avec le microphone étant sur la même carte que les LED qui est manipulé. Notre solution a été de séparer totalement le micro en le faisant être l’unique composant sur un tableau distinct, l’Arduino Uno.

Exemple de Code :

C’est le code que nous avons couru sur l’Arduino Mega pendant le fonctionnement. Pour le code à exécuter sur la Uno Voir l’étape 2.

---------------------------------------------------------------------------------------------------------------------

Tout d’abord, vous devez initialiser toutes les variables qui utiliseront vos classes et la boucle principale

int max_led = 50 ;
int star_twinkle_delay = 10 ;

const int light_sensor = A0 ;

int sensorValue = 0 ;
int sensorMin = 1023 ;        valeur minimale de capteur
int sensorMax = 0 ;

seuil d’int = 255 ;
flotteur a0 = 0,3 ;   Coeff pour valeur perçoivent
flotteur a1 = 0,2 ;  Coeff de plus & moins 1 de calc
flotteur a2 = 0,1 ;  Coeff de plus & moins 2 de calc
flotteur a3 = 0,05 ;  Coeff de plus & moins 3 de calc

int sV_adjusted ;    valeur ajustée stockée

int sV_m3 ;    valeur de la sonde 3 avant calc
int sV_m2 ;    valeur de la sonde 2 avant calc
int sV_m1 ;    valeur de la sonde 1 avant calc
int sV_0 ;     valeur de la sonde étant calculée, centre de la courbe
int sV_p1 ;    valeur de la sonde 1 après à calc
int sV_p2 ;    valeur de la sonde 2 après à calc
int sV_p3 ;    valeur de la sonde 3 après à calc (ce qui est actaully est lu)

Voici où votre 3 classes (types de LEDs) sont définies. Ils ont chacun une fonction d’installation et de la boucle, à l’instar de l’Arduino.

Star

étoile de classe
{
public :
tige d’int ;
effacement de l’int ;
int luminosité ;
int éveillé ;
int time_asleep ;

Sub setup_star()
{
éveillé = 1 ;
décoloration = rand() % 2 ;
luminosité = rand() % max_led + 1 ;
}

Sub twinkle()
{
Si (éveillé == 1)
{
Si (décoloration == 1)
{
luminosité += 1 ;
}
d’autre luminosité-= 1 ;

Si (luminosité > max_led)
{
luminosité = max_led ;
décoloration = -1 ;
}
ElseIf (luminosité < 10)
{
luminosité = 10 ;
décoloration = 1 ;
}

analogWrite (pin, luminosité) ;
Delay(1) ;
}
}
};

Yeux

classe eye_pair
{
public :
tige d’int ;
int éveillé ;
int clignoter ;
int blink_duration ;
int time_since_blink ;
int time_asleep ;

Sub setup_eyes()
{
éveillé = 1 ;
time_since_blink = rand() % 1000 ;
}

Sub display_eyes()
{
Si (éveillé == 1)
{
Si (clignotant == 1)
{
digitalWrite (broches, faible) ;
blink_duration ++ ;
Si (blink_duration > ((rand() % 20) + 10))
{
clignote = 0 ;
blink_duration = 0 ;
time_since_blink = 0 ;
}
}

Si (clignotant == 0)
{
digitalWrite (tige, haute) ;
Si (time_since_blink > ((rand() % 1000) + 500))
{
clignote = 1 ;
digitalWrite (broches, faible) ;
}
d’autre time_since_blink ++ ;
}
}
}

};

Luciole - poignées c’est pin propre configuration

Luciole de classe
{
public :
broches int [12] ;
int temps ;
int time_to_blink ;
on_off int ;
int current_pin ;
int éveillé ;
int time_asleep ;

Sub setup_firefly()
{
éveillé = 1 ;
time_to_blink = 100 ;
pour (int i = 0; i < 12; i ++)
{

broches [i] = i + 40 ;
pinMode (broches [i], sortie) ;
digitalWrite (épingles [i], faible) ;
}
current_pin = 0 ;
}

Sub go_firefly()
{
Si (éveillé == 1)
{
Désactiver
Si ((on_off == 1) & & (temps > (rand() % 100) + 400))
{
digitalWrite (épingles [current_pin], faible) ;
temps = 0 ;
on_off = 0 ;
}

mettre en marche
Si ((on_off == 0) & & (temps > time_to_blink))
{
current_pin = (current_pin + 1) % 12 ;
digitalWrite (épingles [current_pin], HIGH) ;
temps = 0 ;
on_off = 1 ;
}
temps ++ ;
}
}
};

Définit des étoiles, des yeux et objets de la luciole - appel firefly objet frank juste pour se distinguer

étoiles étoiles [12];// = {2,3,4,5,6,7,8,9,10,11,12,13} ;
eye_pair yeux [31] ;
frank luciole ;

Installation - Initialise étoiles, yeux, firefly et capteur

void setup()
{
Serial.Begin(9600) ;
pour (int i = 0; i < 12; i ++)
{
Stars de broches [i] = i + 2 ;
pinMode (broches étoiles [i], sortie) ;
Stars[i].setup_star() ;
}

pour (int i = 0; i < 16; i ++)
{
broches d’yeux [i] = i + 24 ;
pinMode (broches yeux [i], sortie) ;
Eyes[i].setup_eyes() ;
}

Frank.setup_firefly() ;

sV_m3 = analogRead(light_sensor) ;
sV_m2 = analogRead(light_sensor) ;
sV_m1 = analogRead(light_sensor) ;
sV_0 = analogRead(light_sensor) ;
sV_p1 = analogRead(light_sensor) ;
sV_p2 = analogRead(light_sensor) ;

}

Boucle principale - lit en entrée audio, puis gère les LEDs

void loop()
{
sV_p3 = analogRead(light_sensor) ;

calculer la valeur ajustée
sV_adjusted = (int) (a3 * (float) sV_m3 + a2 * (float) sV_m2 + a1 * (float) sV_m1 + a0 * (float) sV_0 + a1 * (float) sV_p1 + a2 * (float) sV_p2 + a3*(float)sV_p3) ;

valeurs des déplacements autour de prochaine itération
sV_m3 = sV_m2 ;
sV_m2 = sV_m1 ;
sV_m1 = sV_0 ;
sV_0 = sV_p1 ;
sV_p1 = sV_p2 ;
sV_p2 = sV_p3 ;

Si (sV_adjusted < seuil)
{

pour (int i = 0; i < 13; i ++)
{
Stars[i].Twinkle() ;
Si (les étoiles [i] .time_asleep > ((rand() % 100000000) + 3000))
{
les étoiles [i] .awake = 1 ;
les étoiles [i] .time_asleep = 0 ;
}
d’autre
{
les étoiles [i] .time_asleep ++ ;
}
}
pour (int i = 0; i < 30; i ++)
{
Eyes[i].display_eyes() ;
Si (les yeux [i] .time_asleep > ((rand() % 100000000) + 3000))
{
.awake yeux [i] = 1 ;
les yeux [i] .time_asleep = 0 ;
}
d’autre
{
les yeux [i] .time_asleep ++ ;
}
}
Frank.go_firefly() ;
Si (frank.time_asleep > ((rand() % 100000000) + 3000))
{
Frank.Awake = 1 ;
Frank.time_asleep = 0 ;
}
d’autre
{
Frank.time_asleep++ ;
}
}
d’autre
{

pour (int j = 0; j < 54; j ++)
{
digitalWrite (j, faible) ;
pour (int i = 0; i < 13; i ++)
{
les étoiles [i] .awake = 0 ;
}
pour (int i = 0; i < 30; i ++)
{
les yeux [i] .awake = 0 ;
}
Frank.Awake = 0 ;
}
}

}

---------------------------------------------------------------------------------------------------------------------

Notes du Code comportemental :

Vous pouvez remarquer que le comportement de convolution est vu dans ce code aussi. Cette convolution est étant réalisée sur les valeurs analogiques qui sont sorties par l’ONU. Si un micro plus stable et moins bruyant (ou un capteur de lumière) ont été utilisé, l’utilisation de l’ONU pourrait être éliminée et ce code n’aurait pas à être changé.

Articles Liés

Édentée, la marionnette peluche Roaring

Édentée, la marionnette peluche Roaring

il s'agit du second projet de la choses que pense printemps 2012 cours d'informatique à l'Université du Colorado, Boulder. L'objectif de ce projet était de créer une peluche qui utilise également le calcul d'une certaine façon. L'équipe, formée de Je
1959 original maillot de bain Barbie et Ken

1959 original maillot de bain Barbie et Ken

bien que réticent, j'ai convaincu mon copain se déguiser en Ken pour correspondre à mon costume de Barbie ! Tous les matériaux pour mon costume ont été achetés dans un magasin de tissu local (Marie-Jo à Gastonia, Caroline du Nord) et un ami a utilisé
Raspberry PI vision nocturne.

Raspberry PI vision nocturne.

Très simple et pas cher Infra-Red night vision googles, en utilisant un modèle pi framboise, une caméra NOIR et Quanum FPV lunettes.Pendant un certain temps maintenant, j'ai joué avec Multicopters, et tandis que je préfère me faire les modèles et leu
Dispositif de Vision nocturne infrarouge DIY

Dispositif de Vision nocturne infrarouge DIY

j'ai été impliqué avec airsoft depuis environ deux ans, étant affilié à un grand groupe local de gens de notre communauté qui se réunissent régulièrement et ont prévu des jeux, opérations et événements. Airsoft est un grand sport et un passe-temps qu
Debloquer réplique de Holocron Jedi de Star Wars : The Clone Wars animés

Debloquer réplique de Holocron Jedi de Star Wars : The Clone Wars animés

Ceci est un tutoriel pour faire une lumière vers le haut et le déverrouillage de réplique de le Jedi Holocron comme vu dans Star Wars : The Clone Wars Animated.Cela peut aller d'une configuration « verrouillée » à une configuration de « déblocage »,
Nocturnal-un boulier Knex

Nocturnal-un boulier Knex

Voilà, Nocturnal, mon dixième boulier ! Je pensais que régent était mon dixième mais ensuite j'ai réalisé que j'avais mal compté. 1 ascenseur, 5 chemins et environ 2500 pièces. Musique composée par moi via noteflight.com. Les stars partout dans la ma
Titulaire des écouteurs de Jedi

Titulaire des écouteurs de Jedi

Bonjour. Cette création a été inspirée par la saga immortelle du Jedi.Avec elle, il suffit d'utiliser la « force » qui existe au sein de vous d'avoir les écouteurs dans vos mains.Vidéos :Étape 1: fonctionnement Le fonctionnement est très simple :Lors
Dispositif de Vision anti-nocturne ¡¡¡CAUTION, non sans danger pour les personnes sujettes épileptique ou saisie!!!

Dispositif de Vision anti-nocturne ¡¡¡CAUTION, non sans danger pour les personnes sujettes épileptique ou saisie!!!

Avez-vous déjà été préoccupé par faire bricolage Vision de nuit, il y a, et pourtant il n'y a aucun anti-Night Vision Instructables ? Comment de nombreux tutoriels DIY Drone sont là, mais pas anti-Drones ? Comment protégeons-nous nous-mêmes et notre
Coudre un Jedi ou Harry Potter Robe ou un manteau

Coudre un Jedi ou Harry Potter Robe ou un manteau

cette instructable nécessite une Machine à coudre et la connaissance de l'utilisation de l'un. Si vous ne respectez pas ces exigences, mieux trouver quelqu'un qui le fait.HistoireQuelqu'un m'a demandé de faire une robe d'école Harry Potter. Il a été
Barbie et Ken

Barbie et Ken

mon fiancé et moi sommes allés à une fête d'Halloween comme Barbie et Ken.Nous avons le costume en achetant un garçon grand placard dans un magasin de fournitures déménagement, coupant en demi, couper les panneaux frontaux à forme et peindre. Les fin
Jedi Gym Bob

Jedi Gym Bob

j'ai vu certaines différentes séances d'entraînement en ligne qui impliquent un régime de formation Jedi.  J'ai pensé que si quelqu'un devait faire leur propre centre de formation de Jedi à domicile - Bob serait un atout.Si vous étiez un Jedi et vous
Réaliste, Animatronic Lion Mask avec vision nocturne stéréo et audience amplifié

Réaliste, Animatronic Lion Mask avec vision nocturne stéréo et audience amplifié

c'est la pleine étape par étape sur la construction d'un réaliste masque de lion avec le déplacement des mâchoiresavec système de vision nuit stereo vision et/ou de la couleur et l'augmentation de l'audience amplifié.Ce système a été prototypés dans
Jedi Nagai Sentinel : Cosplay de bricolage Star Wars

Jedi Nagai Sentinel : Cosplay de bricolage Star Wars

Tout le monde Bienvenue sur mon tutoriel rapide de « Bricolage » Cosplay de Star Wars !Comme un grand fan de Star Wars, j'ai été inflexible sur l'exécution d'un Costume de Jedi/Cosplay avant la sortie de la Star Wars : The Force Awakens film. Depuis
Dills casher et épicées (sans vinaigre)

Dills casher et épicées (sans vinaigre)

Il est la meilleure recette de cornichon jamais, après avoir passé des années être déçues avec la disponibilité d'un aneth kasher vraiment génial avec une petite bouchée, en dehors de l'agglomération de NY, j'ai expérimenté pour les années à venir av