Pages: [1]   Go Down
Author Topic: Escalier interactif  (Read 1209 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

J'aimerais réaliser cela chez moi à l'aide d'un arduino : http://www.interactivefurniture.de/index.html

J'ai déja un arduino, ainsi que 2 capteurs SRF02 (http://www.robot-electronics.co.uk/htm/srf02tech.htm)

Pour le kit LED, je voulais utiliser quelque chose du genre  :

http://www.leroymerlin.fr/mpng2-front/pre?zone=zonecatalogue&ideilist=1271666676191&1271666676191.pos=9&01-comment-choisir-render=off&02-multicritere-render=off&03-zoom-produit-render=off&eipublicationtype=product&backurl=pre%3Fzone%3Dzonerecherche%26family%3Dspots-a-encastrer%26intuitiontodo%3Dsearchproductsfamily%26numberofitemperpage%3D20%26pageid%3D71%26presentationid%3D2

Mais voila, je suis programmeur de profession (et je connais processing) mais totalement newbie en électronique. Pourriez vous me guider un tout petit peu pour pouvoir connecter ses LED à mon arduino sachant que comme dans la video, il ne faut pas que toute les LED s'éclairent/s'éteignent au même moment....

Merci d'avance pour votre aide

Johnny B


Logged

Celtic Kingdom
Offline Offline
Sr. Member
****
Karma: 2
Posts: 455
hard oui no!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il faudrait savoir combien il y a de marches à éclairer car sur l'Arduino (de base) il y a une limite pour le nombre de voies commandables en PWM (afin que que cela s'allume et s'éteigne progressivement comme dans la vidéo que tu donnes).

S'il n'y a pas trop de marches, tu pourras les commander directement par l'Arduino via un circuit de puissance (à vue de pif' les LED vont demander plus que ce que l'Arduino peut fournir).

S'il y a trop de marche vis-à-vis des voies disponibles il faudra voir pour utiliser un circuit intermédiaire afin de multiplexer tout ça) -.^

Il existe certainement des modules "tout faits" qui pourront correspondre à tes attentes (pilotage de xx LED de puissance), si tu ne veux pas te lancer dans la fabrication.
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Avec la Mega il me semble qu'il y a plus de sortie PWM, quelle modèle de plaque Arduino as-tu ?
« Last Edit: April 19, 2010, 07:07:07 am by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Ales
Offline Offline
Faraday Member
**
Karma: 29
Posts: 3174
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En utilisant un circuit RC y'a pas moyen de faire l'effet ? (et du coup de se passer du PWM)
Logged


France - Pays de la Loire
Offline Offline
Full Member
***
Karma: 0
Posts: 176
Bidouilleur du dimanche ... et des autres jours de la semaine ...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Sympa comme truc, j'ai fais voir ça au boulot et ça a bien plu.

Ce qui me chiffonne un peu, c'est que l'éclairage semble suivre la montée et la descente de la personne aussi je pense que tes 2 capteurs ne sont pas adapatés : que va t-il se passer si arrivé au milieu, tu décides de faire marche arrière ? Le système ne va pas le détecter et inverser le processus d'allumage / extinction ...
Ne faudrait il pas mettre plusieurs capteurs ( 6, 8 ? ) ou ne serait il pas plus judicieux de mettre une diode IR et un récepteur par marche ( ou toutes le 2 marches ) ?

A+  
Logged

Celtic Kingdom
Offline Offline
Sr. Member
****
Karma: 2
Posts: 455
hard oui no!!!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
(...) ne serait il pas plus judicieux de mettre une diode IR et un récepteur par marche ( ou toutes le 2 marches ) ?
Je pensais la même chose.
Mais il y a peut-être moyen de savoir à quelle distance est "le mobile" qui monte les marches avec deux capteurs à ultrasons (triangulation || effet Doppler ?).
Cependant, il faudrait mieux que l'escalier soit rectiligne, sinon bonjour les calculs ^.^
« Last Edit: April 19, 2010, 04:14:37 pm by ekaki » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

En cherchant un peu, j'ai trouvé ce kit à 99$ : http://alan-parekh.vstore.ca/index.php/cPath/1_2

C'est pas à base d'arduino mais ca devrait le faire. Je sais pas encore si je vais craquer...

En tous les cas, merci pour vos réponses.

Johnny B
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 29
Posts: 3174
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
(...) ne serait il pas plus judicieux de mettre une diode IR et un récepteur par marche ( ou toutes le 2 marches ) ?
Je pensais la même chose.
Mais il y a peut-être moyen de savoir à quelle distance est "le mobile" qui monte les marches avec deux capteurs à ultrasons (triangulation || effet Doppler ?).
Cependant, il faudrait mieux que l'escalier soit rectiligne, sinon bonjour les calculs ^.^

Vous voulez tuer une mouche avec un char d'assaut vous ^^

Il suffit des deux barrières infrarouges sauf que la partie extinction ne se produit que lorsque la personne franchisse la seconde barrière (ou la première si jamais il a fait demi-tour). Au pire tu étoffes un peu le système en en ajoutant une au milieu.
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour
j'ai une solution avec une carte d'extension avec un où plusieurs tlc5490 et des drivers uln2803 pour augmenter le courant sur les leds (luxeon 350 ma) + deux detecteurs PIR parallax

/LUXEON_TLC.png

/*
 * commande d'eclairage dans un escalier de 2 à 16 leds
 *  par bgaswiss
 *  
 * avec la librairie tlc5490
 *
 */

#include "Tlc5940.h"

#include "tlc_progmem_utils.h"



#define light 4095 //luminiosité des leds 4095 = max 0 = min

uint8_t gsArray1[NUM_TLCS * 24] PROGMEM = {
  GS_DUO((light * 16)/16, (light * 16)/16), GS_DUO((light * 16)/16, (light * 16)/16),
  GS_DUO((light * 16)/16, (light * 16)/16), GS_DUO((light * 16)/16, (light * 16)/16),
  GS_DUO((light * 16)/16, (light * 16)/16), GS_DUO((light * 16)/16, (light * 16)/16),
  GS_DUO((light * 16)/16, (light * 16)/16), GS_DUO((light * 16)/16, (light * 16)/16),
};

uint8_t gsArray2[NUM_TLCS * 24] PROGMEM = {
  GS_DUO((0*16)/16, (0*16)/16), GS_DUO((0*16)/16, (0*16)/16),
  GS_DUO((0*16)/16, (0*16)/16), GS_DUO((0*16)/16, (0*16)/16),
  GS_DUO((0*16)/16, (0*16)/16), GS_DUO((0*16)/16, (0*16)/16),
  GS_DUO((0*16)/16, (0*16)/16), GS_DUO((0*16)/16, (0*16)/16),
};
int pir_down = 4; //detecteur descente
int pir_up = 5;// detecteur montée
int led_down = 6;// led descente detection
int led_up =7;// led montée detection
int ldr =0;// sonde de luminiosité
int calibration =10;// temps de mise en route pir
int speed_clr =15;// vitesse éteindre
int speed_set =30;// vitesse alumage
int canaux =16;// nombre de cannaux
int luminosite =512;// seuil de luminiosite
int temporis = 40;// temporisation étinction en secondes



void setup()
{
  Tlc.init();
  Tlc.clear();
  Tlc.update();
   pinMode(ldr,INPUT);
   pinMode(pir_down, INPUT);
   pinMode(pir_up, INPUT);
   pinMode(led_down, OUTPUT);
   pinMode(led_up, OUTPUT);
   digitalWrite(pir_down, LOW);
   digitalWrite(pir_up, LOW);
  
    for(int i = 0; i < calibration; i++){
       digitalWrite (led_down,HIGH );
      digitalWrite (led_up,HIGH);
      delay(1000);
      digitalWrite (led_down,LOW);
      digitalWrite (led_up,LOW);
      }

}

void loop(){
if (digitalRead(pir_up) == HIGH && analogRead(ldr) <=luminosite ){
    digitalWrite (led_up,HIGH);
  up_set();
 digitalWrite (led_up,LOW);
 delay(500);
  tempo_up();
}  
if (digitalRead(pir_down) == HIGH && analogRead(ldr) <=luminosite ){
   digitalWrite (led_down,HIGH);
  down_set();
   digitalWrite (led_down,LOW);
   delay(500);
  tempo_down();
}
}



void tempo_up(){
  for (int i=0 ; i< temporis; i++){
    if (digitalRead(pir_down) == HIGH)  {
       digitalWrite(led_down,HIGH);
      delay(500);
     goto suit ;
  }

    delay(1000);
  }
  suit:
   digitalWrite(led_down,LOW);
    digitalWrite(led_up,LOW);
up_clear();
}




void tempo_down(){
  for (int i=0 ; i< temporis; i++){
  
     if ( digitalRead(pir_up) == HIGH ) {
     digitalWrite(led_up,HIGH);
      delay(500);
     goto suit2 ;
  }
    delay(1000);
  }
  suit2:
   digitalWrite(led_down,LOW);
    digitalWrite(led_up,LOW);
  down_clear();
}




void up_set(){
   tlc_setGSfromProgmem(gsArray2);
  Tlc.update();

  // Fade each channel to zero
  for (TLC_CHANNEL_TYPE channel = 0; channel < NUM_TLCS * canaux; channel++) {
    int16_t initialValue = Tlc.get(channel);
    while (initialValue <light) {
      initialValue += speed_set;
      if (initialValue > light) {
        initialValue = light;
      }
      Tlc.set(channel, initialValue);
      
      // wait until the data has been sent to the TLCs before continuing
      while (Tlc.update());
    }
    }
  
}

void up_clear(){
    // Display the pattern (brightness ramp over the outputs)
  tlc_setGSfromProgmem(gsArray1);
  Tlc.update();

  // Fade each channel to zero
  for (TLC_CHANNEL_TYPE channel = 0; channel < NUM_TLCS * canaux; channel++) {
    int16_t initialValue = Tlc.get(channel);
    while (initialValue > 0) {
      initialValue -= speed_clr;
      if (initialValue < 0) {
        initialValue = 0;
      }
      Tlc.set(channel, initialValue);
      
      // wait until the data has been sent to the TLCs before continuing
      while (Tlc.update());
  
    }
  }
}

void down_set(){
    tlc_setGSfromProgmem(gsArray2);
  Tlc.update();

  // Fade each channel to zero
  for (TLC_CHANNEL_TYPE channel = canaux-1; channel < NUM_TLCS * canaux; channel--) {
    int16_t initialValue = Tlc.get(channel);
    while (initialValue <light) {
      initialValue += speed_set;
      if (initialValue > light) {
        initialValue = light;
      }
      Tlc.set(channel, initialValue);
      
      // wait until the data has been sent to the TLCs before continuing
      while (Tlc.update());
    }
    }
}

void down_clear(){
   // Display the pattern (brightness ramp over the outputs)
  tlc_setGSfromProgmem(gsArray1);
  Tlc.update();

  // Fade each channel to zero
  for (TLC_CHANNEL_TYPE channel = canaux-1; channel < NUM_TLCS * canaux; channel--) {
    int16_t initialValue = Tlc.get(channel);
    while (initialValue > 0) {
      initialValue -= speed_clr;
      if (initialValue < 0) {
        initialValue = 0;
      }
      Tlc.set(channel, initialValue);
      
      // wait until the data has been sent to the TLCs before continuing
      while (Tlc.update());
  
    }
  }
}
« Last Edit: May 02, 2010, 05:57:34 pm by bgaswiss » Logged

Pages: [1]   Go Up
Jump to: