Commander une led stripe 12v avec un TTP223

Bonjour tout le monde !

Je suis très novice dans cette sphère donc je m'excuse d'avance pour les questions, surement stupide, que je vais poser.

Donc voilà je voudrais monter un petit projet avec des led et le TTP223.
En gros je voudrais que quand j'approche mon doigts du TTP223 mes leds s'allume, progressivement et s’éteigne si j’éloigne mon doigt tout aussi progressivement.

J'ai en ma possession un arduino UNO R3, des TTP223 et une petite bande led WS281, une alimentation externe de 12v ainsi que différents composant électroniques (Condo, resistance, mosfet,...)

En gros j'aimerais savoir comment brancher le tout correctement et comment programmer ça ?

Merci de votre aide !

Bonne soirée

Bonjour,
Le TTP223 fourni une sortie logique, soit 0 soit 1 . Donc impossible de mesurer la distance du doigt et le répercuter sur l'éclairage des leds.

Sinon coté alimentation, il faut un régulateur de tension 12V-->5V pour alimenter l'arduino et les Leds.

Salut Leptro,

Merci pour ta réponse.

C'est noté pour le TTP223 !

Mes LEDs sont alimentées par une alim externe de 12v et le Arduino par le port USB.
J'arrive à "jouer" avec les LEDs. C'est vraiment l'intégration du TTP223 qui me pose problème dans le code. Même si j'ai bien compris que je ne pourrai pas jouer sur l'intensité ai moins l'intégrer au code quoi.

Si c'est juste expérimental ok. mais si c'est destiné à être autonome, un abaissement du 12v vers 5V pour alimenter l'arduino serait plus approprié.
POur la mesur de distance il ya ce capteur:
VL53L0X

Oui pour le moment c'est du développement je vais étudier ce problème plus tard :slight_smile:

J'avais vu ce capteur mais il ne sera pas compatible avec mon projet. En gros je voudrais faire une table en bois/époxy et y ajouter des led à l'intérieur et quand tu passe la main au dessus de la table les LEDs s'allumeronts.

Sur le TTP223 il y a moyen de souder une antenne pour amplifier la détection et du coup ça va passer à travers l'epoxy :slight_smile:

Là j'ai réussi à intégrer le TTP223 dans mon code de LED (qui clignotent en rainbow) mais c'est pas 100% fonctionnelle car quand je ne touche pas le sensor les LEDs restent allumée avec une couleur fix et quand j'approche ma mains la le code qui fait clignoter les LEDs s'exécute.

Donc ma question c'est comment faire en sorte que les LEDs au départ restent éteinte ?

Merci.

Au début de votre code et cela dépendra de la bibliothèque que vous utilisez, téléchargez le code et nous le verrons.

Et voilà le code.
J'utilise des LEDs WS2811.
Un petit bandeau de 9 LEDs

#include <Adafruit_NeoPixel.h>
#define touchSw 4

class Strip
{
public:
  uint8_t   effect;
  uint8_t   effects;
  uint16_t  effStep;
  unsigned long effStart;
  Adafruit_NeoPixel strip;
  Strip(uint16_t leds, uint8_t pin, uint8_t toteffects, uint16_t striptype) : strip(leds, pin, striptype) {
    effect = -1;
    effects = toteffects;
    Reset();
  }
  void Reset(){
    effStep = 0;
    effect = (effect + 1) % effects;
    effStart = millis();
  }
};

struct Loop
{
  uint8_t currentChild;
  uint8_t childs;
  bool timeBased;
  uint16_t cycles;
  uint16_t currentTime;
  Loop(uint8_t totchilds, bool timebased, uint16_t tottime) {currentTime=0;currentChild=0;childs=totchilds;timeBased=timebased;cycles=tottime;}
};

Strip strip_0(9, 6, 9, NEO_GRB + NEO_KHZ800);
struct Loop strip0loop0(2, false, 1);
struct Loop strip0loop00(1, false, 1);

//[GLOBAL_VARIABLES]

void setup() {
  
  pinMode(touchSw,INPUT);
  Serial.begin(9600);
  strip_0.strip.begin();
}

void loop() {

  boolean touchState;
  touchState = digitalRead(touchSw);

  if(touchState == HIGH)
  {
    strips_loop(); 
  }
  else
  {
    //write statements to execute when the sw is low
  }

}
 

void strips_loop() {
  if(strip0_loop0() & 0x01)
    strip_0.strip.show();
}

uint8_t strip0_loop0() {
  uint8_t ret = 0x00;
  switch(strip0loop0.currentChild) {
    case 0: 
           ret = strip0_loop0_eff0();break;
    case 1: 
           ret = strip0_loop00();break;
  }
  if(ret & 0x02) {
    ret &= 0xfd;
    if(strip0loop0.currentChild + 1 >= strip0loop0.childs) {
      strip0loop0.currentChild = 0;
      if(++strip0loop0.currentTime >= strip0loop0.cycles) {strip0loop0.currentTime = 0; ret |= 0x02;}
    }
    else {
      strip0loop0.currentChild++;
    }
  };
  return ret;
}

uint8_t strip0_loop0_eff0() {
    // Strip ID: 0 - Effect: Move - LEDS: 9
    // Steps: 9 - Delay: 59
    // Colors: 0 ()
    // Options: toLeft=true, rotate=true, 
  if(millis() - strip_0.effStart < 59 * (strip_0.effStep)) return 0x00;
  uint32_t c = strip_0.strip.getPixelColor(0);
  for(uint16_t j=0;j<8;j++) 
    strip_0.strip.setPixelColor(j, strip_0.strip.getPixelColor(j+1)); 
  strip_0.strip.setPixelColor(8, c); 
  if(strip_0.effStep >= 9) {strip_0.Reset(); return 0x03; }
  else strip_0.effStep++;
  return 0x01;
}

uint8_t strip0_loop00() {
  uint8_t ret = 0x00;
  switch(strip0loop00.currentChild) {
    case 0: 
           ret = strip0_loop00_eff0();break;
  }
  if(ret & 0x02) {
    ret &= 0xfd;
    if(strip0loop00.currentChild + 1 >= strip0loop00.childs) {
      strip0loop00.currentChild = 0;
      if(++strip0loop00.currentTime >= strip0loop00.cycles) {strip0loop00.currentTime = 0; ret |= 0x02;}
    }
    else {
      strip0loop00.currentChild++;
    }
  };
  return ret;
}

uint8_t strip0_loop00_eff0() {
    // Strip ID: 0 - Effect: Rainbow - LEDS: 9
    // Steps: 9 - Delay: 20
    // Colors: 3 (255.0.0, 0.255.0, 0.0.255)
    // Options: rainbowlen=9, toLeft=true, 
  if(millis() - strip_0.effStart < 20 * (strip_0.effStep)) return 0x00;
  float factor1, factor2;
  uint16_t ind;
  for(uint16_t j=0;j<9;j++) {
    ind = strip_0.effStep + j * 1;
    switch((int)((ind % 9) / 3)) {
      case 0: factor1 = 1.0 - ((float)(ind % 9 - 0 * 3) / 3);
              factor2 = (float)((int)(ind - 0) % 9) / 3;
              strip_0.strip.setPixelColor(j, 255 * factor1 + 0 * factor2, 0 * factor1 + 255 * factor2, 0 * factor1 + 0 * factor2);
              break;
      case 1: factor1 = 1.0 - ((float)(ind % 9 - 1 * 3) / 3);
              factor2 = (float)((int)(ind - 3) % 9) / 3;
              strip_0.strip.setPixelColor(j, 0 * factor1 + 0 * factor2, 255 * factor1 + 0 * factor2, 0 * factor1 + 255 * factor2);
              break;
      case 2: factor1 = 1.0 - ((float)(ind % 9 - 2 * 3) / 3);
              factor2 = (float)((int)(ind - 6) % 9) / 3;
              strip_0.strip.setPixelColor(j, 0 * factor1 + 255 * factor2, 0 * factor1 + 0 * factor2, 255 * factor1 + 0 * factor2);
              break;
    }
  }
  if(strip_0.effStep >= 9) {strip_0.Reset(); return 0x03; }
  else strip_0.effStep++;
  return 0x01;
}


Changez votre "loop" comme suit.

void loop() { 
  boolean touchState;
  touchState = digitalRead(touchSw);
  if(touchState == HIGH)
  {
    strips_loop(); 
  }
  else
  {
  //write statements to execute when the sw is low
  strip_0.strip.clear();
  strip_0.strip.show();
  }
}

ou mettre les lignes:

  strip_0.strip.clear();
  strip_0.strip.show();

Où vous convient le mieux.
Salutations.

Ça ne fonctionne pas comme ça devrait.
La LEDs clignote une fois puis s'éteint.
Et quand j'active le TTP223 il se met à clignoter (la led sur le capteur) comme la LEDs principal le devrait le faire.

Je suis désolé alors je ne peux pas t'aider, je n'ai pas de TTP223, j'ai fait le test avec un simple bouton poussoir et ça a fonctionné correctement. Mettez un anti-rebond sur la lecture du capteur pour voir si cela fonctionne mieux.
Salutations.

Le TTP223 a 2 modes de fonctionnement différents:

  1. comme un poussoir
  2. comme un interrupteur à bascule

On sélectionne le mode par l'état de la broche 5

  • 0 sur la broche = mode poussoir
  • 1 sur la broche = mode interrupteur à bascule

On peut aussi choisir si la sortie est active à 0 ou à 1 et le temps pendant lequel la sortie est active.

La doc est ici:

Donc il faudrait déjà savoir comment est configuré le TTP223 de @venexman

Bien entendu, utilisez le bouton enfoncé en permanence. Cela n'a pas de sens, (selon le code), une courte pression et cela a fonctionné correctement pour moi.

Je pense que @venexman veut faire une sorte de "Etherwave Theremin" mais avec de la lumière, Il sort dans un film de science-fiction dont je ne me souviens plus du nom.

Et cela ne peut pas se faire avec un TTP223, éventuellement avec un VL53L0X, comme le dit @Leptro, on obtiendra de meilleurs résultats. J'essaierais même un simple HC-SR04, on aurait plus de valeurs pour jouer avec l'éclairage.
Les salutations.

Une source d'inspiration

la présentation du projet avec une video

Le montage utilise un capteur infrarouge de chez Sharp. Il existe différents modèles à choisir en fonction de la distance d'activation que l'on désire. Personnellement, j'avais pris un GP2Y0A21YK0F

1 Like

En effet une bonne idée, je n'avais pas pensé à l'infrarouge, je pensais utiliser les ultrasons de la même manière. Il ne serait pas difficile avec eux de manipuler une bande WS281

L'avantage des capteurs Sharp c'est qu'ils ont un champs relativement étroit et qu'ils sont moins sensibles aux réflexions que les capteurs ultrason.
La distance de fonctionnement est aussi mieux adaptée au besoin avec le capteur proposé c'est de 10 à 80cm. Ce qui est assez raisonnable pour piloter une lampe.

Bonjour tout le monde,

Merci pour vos réponse sugestions c'est très apprécié.
@fdufnews mon TTP223 est reglé comme poussoir.

Alors voici le lien de la vidéo de laquelle je m'inspire. C'est une projet DIY mais inaccessible car c'est un Kickstarter et donc toutes les informations sont confidentiels... . J'ai juste réussi à confirmer que c'était bien un TTP223 qui est utilisé :

C'est un projet de grande envergure je n'ai conscience. Pour le moment je voudrais donc commencer par "juste" allumer et éteindre mes petites LEDs avec un seul capteur couplé au LEDs. Ensuite je vais essayer de faire la même chose avec 2, 3, etc.

Toute aide sera la bienvenue :slight_smile: !

Merci encore !

Eh bien, il semble que oui, que le TTP223 puisse être augmenté en portée comme indiqué dans la vidéo.
Donc ton problème c'est que :

̶V̶o̶u̶s̶ ̶d̶e̶v̶e̶z̶ ̶l̶e̶ ̶m̶e̶t̶t̶r̶e̶ ̶c̶o̶m̶m̶e̶ ̶u̶n̶ ̶i̶n̶t̶e̶r̶r̶u̶p̶t̶e̶u̶r̶, de cette façon les modifications que j'ai suggérées à votre code fonctionneront parfaitement. Le test que j'ai fait avec un bouton, l'arc-en-ciel a fonctionné tant que je l'ai maintenu enfoncé, s'éteignant lorsque j'ai relâché le bouton.

EDIT : Je ne sais pas comment vous l'avez configuré, mais c'est l'inverse. Ou ne retirez pas votre doigt du capteur

Alors juste pour être sur la même longeur d'onde. Le TTP223 à 4 façons de fonctionner :

Configuration 1 :

Pour obtenir la configuration 1, les deux bornes A et B doivent être en position ouverte.
L'état de sortie par défaut sera LOW
Change d'état (en HIGH) lorsqu'un contact est détecté et revient à l'état par défaut lorsque le contact est relâché.

Configuration 2 :

Pour obtenir la configuration 1, les deux bornes A doivent être ouvertes, et B doit être en position fermée.
L'état de sortie par défaut sera LOW
Change l'état lorsqu'une touche est détectée et reste dans cet état jusqu'à ce qu'une autre touche soit détectée.

Configuration 3 :

Pour obtenir la configuration 1, les deux A doivent être fermés et B doit être en position ouverte.
L'état de sortie par défaut sera HIGH
Change l'état (en LOW) lorsqu'une touche est détectée et revient à l'état par défaut lorsque la touche est relâchée.

Configuration 4 :

Pour obtenir la configuration 1, les bornes A et B doivent être en position fermée.
L'état de sortie par défaut sera HIGH
Change l'état lorsqu'une touche est détectée et reste dans cet état jusqu'à ce qu'une autre touche soit détectée.

Le mien est configuré par défaut à savoir la configuration 1. Ça répond à votre question @fdufnews en même temps :slight_smile:

@gonpezzi Je viens de réessayer et au moment de la detection de mon doigt l'effet arc en ciel s'arrete et les LEDs restent allumé, en fix, sur une couleurs aléatoire et repartent quand mon doigt est détécté à nouveau.

Vérifiez le code à l'aide d'un bouton-poussoir au lieu du TTP223

Bonjour,

Je suis nouveau et je me lance dans le Arduino sur la même volonté de projet.
Je voulais savoir si tu avais résolu tes problèmes et connaître ton retour d'expérience sur ton projet.

Merci et bonne journée à tous.