Que ce soit par simple coquetterie ou pour vous assurer que votre chien soit facilement visible la nuit, nous vous proposons ici de fabriquer un collier lumineux extravagant pour votre fidèle compagnon grâce au microcontrôleur Flora de la marque Adafruit et son nombre illimité de NeoPixels Adafruit aux couleurs changeantes.
Le projet
Niveau : débutant
Temps : 2 heures
Budget : 80-100 €
Matériel requis : un microcontrôleur Adafruit Flora, des LEDs NeoPixel RGB Adafruit Flora, une batterie Lipo 150 mAh ou un bloc pile 3xAAA, du fil conducteur, un accéléromètre Adafruit Flora
Vous aurez également besoin : de votre ordinateur, d’un collier pour chien, d’une aiguille et de fil
Connecter l’accéléromètre et les NeoPixels au microcontrôleur Adafruit Flora
Avant de vous attaquer à la phase de construction, il est important de comprendre comment les composants (accéléromètre et NeoPixels) seront connectés par la suite à la carte Adafruit Flora. La connexion sera assurée par des fils conducteurs qui permettra le bon fonctionnement de transmission des signaux et du courant. Il vous faut ainsi garder à l’esprit la liste suivante (les lettres représentent les points de connexion des différents composants et de la carte Adafruit) :
Accéléromètre :
- GND → GND
- SCL → SCL
- SDA → SDA
- 3V → 3.3V
Raccordement en série des NeoPixels :
- Vcc (Power) → FLORA VBATT
- IN (Data Input) → FLORA D6
- Gnd (Ground) → GND
Choix de l’emplacement des NeoPixels et de l’Adafruit Flora
Attention : assurez-vous de toujours travailler sur une surface non-conductrice et de vérifier qu’il n’y a pas de court-circuit indésirable avant de connecter l’Adafruit Flora à la batterie ou à l’ordinateur.
L’étape suivante consiste à sélectionner l’emplacement souhaité pour les NeoPixels, l’Adafruit Flora et l’accéléromètre sur le collier du chien. Lorsque votre choix est fait, vous pouvez coudre la carte mère et l’accéléromètre. Pour l’Adafruit Flora, les raccordements opposés GND et 3,3V conviennent. Il est également possible d’utiliser des fils toronnés qui relient les composants par des points de soudure. Ensuite, il faut relier l’Adafruit Flora et l’accéléromètre par un fil conducteur.
Raccordement des NeoPixels avec l’Adafruit Flora
L’étape suivante consiste à connecter les NeoPixels à la carte mère. Partez du connecteur D6 de la carte mère et conduisez le fil conducteur jusqu’au connecteur doté d’une flèche pointant vers l’intérieur du premier NeoPixel. Puis, à partir du connecteur opposé du NeoPixel, doté de la flèche dirigée vers l’extérieur, guidez le fil conducteur vers le NeoPixel suivant – jusqu’à ce que vous ayez relié tous les NeoPixels.
Prenez ensuite deux autres fils conducteurs et cousez le fil de terre et le raccordement électrique entre la carte mère et les NeoPixel.
Allumer les NeoPixels
Connectez maintenant la carte mère à votre ordinateur à l’aide d’un câble USB. Ouvrez l’EDI Adafruit Arduino, qui contient la bibliothèque NeoPixel. Nous vous recommandons la procédure suivante :
- Pour tester le NeoPixel : uploadez le sketch vers l’emplacement suivant : File→Examples→Adafruit_NeoPixel→strandtest. Si tous les pixels s’allument et que les couleurs changent, c’est que tout est en ordre.
- Pour tester l’accéléromètre : téléchargez la bibliothèque Adafruit Sensor, ainsi que la bibliothèque unifiée LSM303DLHC et uploadez le sketch ici : File→Examples→Adafruit_LSM303→Test. Ouvrez ensuite le moniteur série (Serial Monitor) et recherchez les changements de Motion Values
- En troisième étape, copiez et uploadez le code suivant (fourni sur la page d’accueil officielle d’Adafruit) dans l’EDI Adafruit (les couleurs peuvent être ajustées dans le tableau myFavoriteColors et la sensibilité de mouvement sous MOVE_THRESHOLD) :
#include #include #include #include // Parameter 1 = number of pixels in strip // Parameter 2 = pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_RGB Pixels are wired for RGB bitstream // NEO_GRB Pixels are wired for GRB bitstream // NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels) // NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip) Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, 6, NEO_GRB + NEO_KHZ800); Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(54321); // Here is where you can put in your favorite colors that will appear! // just add new {nnn, nnn, nnn}, lines. They will be picked out randomly // R G B uint8_t myFavoriteColors[][3] = {{200, 0, 200}, // purple {200, 0, 0}, // red {200, 200, 200}, // white }; // don't edit the line below #define FAVCOLORS sizeof(myFavoriteColors) / 3 // mess with this number to adjust TWINklitude :) // lower number = more sensitive #define MOVE_THRESHOLD 45 void setup() { Serial.begin(9600); // Try to initialise and warn if we couldn't detect the chip if (!accel.begin()) { Serial.println("Oops ... unable to initialize the LSM303. Check your wiring!"); while (1); } strip.begin(); strip.show(); // Initialize all pixels to 'off' } void loop() { /* Get a new sensor event */ sensors_event_t event; accel.getEvent(&event); Serial.print("Accel X: "); Serial.print(event.acceleration.x); Serial.print(" "); Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print(" "); Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print(" "); // Get the magnitude (length) of the 3 axis vector // http://en.wikipedia.org/wiki/Euclidean_vector#Length double storedVector = event.acceleration.x*event.acceleration.x; storedVector += event.acceleration.y*event.acceleration.y; storedVector += event.acceleration.z*event.acceleration.z; storedVector = sqrt(storedVector); Serial.print("Len: "); Serial.println(storedVector); // wait a bit delay(100); // get new data! accel.getEvent(&event); double newVector = event.acceleration.x*event.acceleration.x; newVector += event.acceleration.y*event.acceleration.y; newVector += event.acceleration.z*event.acceleration.z; newVector = sqrt(newVector); Serial.print("New Len: "); Serial.println(newVector); // are we moving if (abs(newVector - storedVector) > MOVE_THRESHOLD) { Serial.println("Twinkle!"); flashRandom(5, 1); // first number is 'wait' delay, shorter num == shorter twinkle flashRandom(5, 3); // second number is how many NeoPixels to simultaneously light up flashRandom(5, 2); } } void flashRandom(int wait, uint8_t howmany) { for(uint16_t i=0; i<howmany; i++) { // pick a random favorite color! int c = random(FAVCOLORS); int red = myFavoriteColors[c][0]; int green = myFavoriteColors[c][1]; int blue = myFavoriteColors[c][2]; // get a random pixel from the list int j = random(strip.numPixels()); //Serial.print("Lighting up "); Serial.println(j); // now we will 'fade' it in 5 steps for (int x=0; x < 5; x++) { int r = red * (x+1); r /= 5; int g = green * (x+1); g /= 5; int b = blue * (x+1); b /= 5; strip.setPixelColor(j, strip.Color(r, g, b)); strip.show(); delay(wait); } // & fade out in 5 steps for (int x=5; x >= 0; x--) { int r = red * x; r /= 5; int g = green * x; g /= 5; int b = blue * x; b /= 5; strip.setPixelColor(j, strip.Color(r, g, b)); strip.show(); delay(wait); } } // LEDs will be off when done (they are faded to 0) }
Si vous n’êtes pas satisfait de la configuration par la suite, vous pourrez modifier le code et l’affiner jusqu’à ce que vous trouviez la configuration qui vous convient.
La batterie
Une fois la configuration effectuée, la batterie doit être installée. Vous avez le choix de coudre un petit sac de batterie ou de coudre un sac en tissu sur le collier du chien, à attacher de telle manière qu’il n’occasionne pas de bruit lorsque le chien se déplacera. Assurez-vous que la batterie soit proche de la carte Adafruit Flora pour que la connexion soit courte et stable. Une fois le boîtier de batterie fixé, vous pouvez procéder à connecter la batterie et la carte mère.
Première sortie !
Une fois que la fréquence de la lumière et les couleurs ont été réglées pour correspondre à votre goût, il ne vous reste plus qu’à inaugurer votre accessoire pour chien tendance !