|
|
Ligne 47 : |
Ligne 47 : |
| | | |
| | | |
− | {
| + | <ref> |
− | | + | /* |
| NUAGE INTERACTIF | | NUAGE INTERACTIF |
| Projet Petits Debrouillard Intersemestre 3 2017 | | Projet Petits Debrouillard Intersemestre 3 2017 |
Ligne 57 : |
Ligne 57 : |
| | | |
| Date : 16 Janvier 2017 | | Date : 16 Janvier 2017 |
− | | + | */ |
| | | |
| | | |
Ligne 271 : |
Ligne 271 : |
| } | | } |
| | | |
− | }
| + | </ref> |
| | | |
| | | |
Version du 25 janvier 2017 à 20:01
Quoi de mieux que de créer un nuage interactif de ses propres mains!
Mais comment s'y prendre ?
Ce projet, simple à réaliser, permet d'obtenir un bon résultat au final et surtout d'utiliser arduino!
Les auteurs
- Baptiste Manach
- Abdelhafid Adid
- Sarah Solaiman
Outils et Matériaux
Électronique :
Arduino
LEDs : 3R 3V 3J
Plusieurs fils
9 résistances de 33kohm
Infrared sensor = Kit IR snootlab 5€
Led jaune
Récepteur infrarouge : TSOP32138
Battery or power source for arduino = cable usb / arduino
Breadboard or blank circuit board
Autres :
Une vieille télécommande
Un abat-jour de papier
Flocon air fibre : polyester
Colle forte
Une boule chinoise
Outils :
Station de soudure
Réalisation du projet
Première étape : Le codage
- Tout se fait sur Arduino (langage C)
- Pour comprendre cette étape il faut regarder le code. Nous avons rajouté des commentaires pour faciliter la compréhension.
[1]
Deuxième étape : L'assemblage des composants
Tout d'abord on soude la patte positive des leds avec les fils ainsi que le capteur infrarouge avec un fil. Sur la seconde patte des leds on soude les résistances. Ensuite on assemble le tout en suivant l'ordre du code sur la plaquette arduino. On peut rajouter du scotch pour que ca tienne mieux.
Troisième partie : Le Nuage
Après avoir fini l'assemblage des composants, on fait tout rentrer dans la boule chinoise.
On fait ressortir les leds pour qu'il y est plus de luminosité.
Enfin, on met de la colle forte sur la boule chinoise et on colle tout le polyester autour pour obtenir une forme de nuage.
Observation
Grâce au capteur infrarouge, on peut contrôler le nuage interactif facilement qui est connecté à l'ordinateur avec le câble USB. Il ne faut surtout pas oublier de televerser le code dans l'arduino. On peut utiliser le mode que l'on désire pour gérer les leds.
Explication
Pour comprendre toute cette manœuvre, il faut bien analyser le code.
Il existe 7 modes pour gérer les leds comme nous pouvons le voir dans le code...
Et dans la vie de tous les jours?
Ce si beau projet est une très belle décoration d'intérieur.
Il donne une ambiance "cosy" et ainsi on peut le placer n'importe où.
Vous aimerez aussi
Vous pouvez choisir la conception du nuage que vous voulez. On trouve beaucoup d'exemple de conception de nuage sur internet.
Sources et liens utiles
- ↑
/*
NUAGE INTERACTIF
Projet Petits Debrouillard Intersemestre 3 2017
Auteur : Manach Baptiste
Solaiman Sarah
Khalid Abdelhafid
Date : 16 Janvier 2017
- include <IRremote.h>
int RECV_PIN = 11; //Entree du capteur IR
int IRconf_PIN = 12; //confirme la reception du signal
IRrecv irrecv(RECV_PIN);
decode_results results;
int tricolor = 3; //Nombre de groupe de 3 led
int dOn = 200;//temps d'allumage
int dOff = 20;//temps de pause d'allumage
char key;//key correspond à la dernière touche pressee sur la telecomande
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Initialise le recepteur
pinMode(RECV_PIN, INPUT);
pinMode(IRconf_PIN, OUTPUT);//Sortie du temoin de reception de signal
for (int i = 0; i < tricolor * 3; i++) {
//Initialise le nombre de sortie necessaire pour le nombre de groupe de diodes cablees
pinMode(2 + i, OUTPUT);
}
}
//Remet a l'etat de base l'arduino
void resetLed() {
dOn = 200;
dOff = 20;
for (int i = 0; i < tricolor * 3; i++) {
digitalWrite(2 + i, LOW);
}
}
////////////////////////////////////
void loop() {
//Boucle infinie principale du programe
isInfra();
disp();
}
void disp() {
//Affiche l'animation en fonction de la dernière touche pressée
if (key == 1) diag();
if (key == 2) highToLow();
if (key == 'P') resetLed();
if (key == 3) lowToHigh();
if (key == 4) turn(0);
if (key == 5) turn(1);
if (key == 6) blink();
}
////////////////////////////////////
bool isInfra() {
//Test si un signal est reçu et gère en concéquence
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
digitalWrite(IRconf_PIN, HIGH); delay(10);//Allume le témoin de reception de signal
digitalWrite(IRconf_PIN, LOW);
getKey(&results);
irrecv.resume(); // Recoit la valeur suivante
return 1;
}
else return 0;
}
char getKey(decode_results * results) {
//Transforme la valeur du signal reçu en sa valeur écrite sur la télécomande
//results contient la valeur en hexadecimal du signal infra-rouge reçu
resetLed();
if (results->value == 0x8C2FB266 || results->value == 0x6604CFE0) key = 1;
if (results->value == 0x8E7CE7D0 || results->value == 0x6604CFD0) key = 2;
if (results->value == 0x8A4077AA || results->value == 0x6604CFE2) key = 'P';
if (results->value == 0x7B985D02 || results->value == 0x6604CFF0) key = 3;
if (results->value == 0x6604CFC8 || results->value == 0x2C5793EA) key = 4;
if (results->value == 0xCE408870 || results->value == 0x6604CFE8) key = 5;
if (results->value == 0xF003D14A || results->value == 0x6604CFFA) decreaseSpeed();
if (results->value == 0x6604CFC6 || results->value == 0xB9F72F4C) increaseSpeed();
if (results->value == 0x7BEDD20C || results->value == 0x6604CFD8) {
key = 6;
dOn = 500;
dOff = 500;
}
}
void increaseSpeed() {
//Augmente la vitesse des animations
if (dOn < 1500) {
dOn *= 1.1;
dOff *= 1.1;
}
}
void decreaseSpeed() {
//Diminue la vitesse des animations
if (dOn > 50) {
dOn *= 0.9;
dOff *= 0.9;
}
}
void turnOn(int groupe, int led) {
//Allume la diode "led" du groupe "groupe"
digitalWrite(2 + led + groupe * 3, HIGH);
}
void turnOff(int groupe, int led) {
//Eteint la diode "led" du groupe "groupe"
digitalWrite(2 + led + groupe * 3, LOW);
}
void offLine(int j) {
//Allume la diode "led" du groupe "groupe"
for (int i = 0; i < tricolor; i++) {
turnOff(i, j);
}
}
void onLine(int j) {
//allume une ligne composée de leds
for (int i = 0; i < tricolor; i++) {
turnOn(i, j);
}
}
void offColumn(int i) {
//éteind une colonne composée de leds
for (int j = 0; j < 3; j++) {
turnOff(i, j);
}
}
void onColumn(int i) {
//allume une colonne composée de leds
for (int j = 0; j < 3; j++) {
turnOn(i, j);
}
}
//////////////////////////////////////////////////////////////:
void highToLow() {
//allume les leds du haut vers le bas
for (int j = 0; j < 3; j++) {
onLine(j); delay(dOn);
offLine(j); delay(dOff);
}
}
void lowToHigh() {
//allume les leds du bas vers le haut
for (int j = 0; j < 3; j++) {
onLine(2 - j); delay(dOn);
offLine(2 - j); delay(dOff);
}
}
void turn(bool b) {
//Rotation des leds
if (b == 1) {
for (int i = 0 ; i < tricolor; i++)
{
onColumn(i); delay(dOn);
offColumn(i); delay(dOff);
}
}
else {
for (int i = 0 ; i < tricolor; i++) {
onColumn(tricolor - 1 - i); delay(dOn);
offColumn(tricolor - 1 - i); delay(dOff);
}
}
}
void diag() {
//balayage diagonale d'une led
char x = 0;
char y = 0;
char increment = 1;
while (isInfra() == 0) {
turnOn(x, y); delay(dOn);
turnOff(x, y); delay(dOff);
if (y == 2) increment = -1;
if (y == 0) increment = 1;
if (x == tricolor - 1) x = 0;
else x += 1;
y += increment;
}
}
void blink() {
// clignotement des leds
for (int i = 0 ; i < tricolor; i++)
{
onColumn(i);
} delay(dOn);
for (int i = 0 ; i < tricolor; i++)
{
offColumn(i);
} delay(dOff);
}