Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 193

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 197

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338
[ Wikidébrouillard ] Détecteur capacitif

Détecteur capacitif

De Wikidebrouillard.

(Page créée avec « {{avertissement}} {{vidéo|numérovidéo = <videoflash type="mediaspip" num = 1>entrer ici l'URL de la vidéo en flash sur http://mediaspip.ptitdeb.infini.fr|400|300</videofl… »)
 
(27 versions intermédiaires masquées)
Ligne 1 : Ligne 1 :
{{avertissement}}
{{avertissement}}
-
{{vidéo|numérovidéo = <videoflash type="mediaspip" num = 1>entrer ici l'URL de la vidéo en flash sur http://mediaspip.ptitdeb.infini.fr|400|300</videoflash>}}
+
{{vidéo|numérovidéo = <videoflash type="mediaspip" num = 1>http://mediaspip.ptitdeb.infini.fr/IMG/flv/2013-01-11_12-11-30-encoded.flv|400|300</videoflash>}}
=='''Présentation de l'expérience'''==
=='''Présentation de l'expérience'''==
-
Présenter l'expérience sous forme de défi, d'énigme, de questionnements ou autres.
+
Un détecteur capacitif permet de détecter une pression sur une surface conductrice.
 +
Nous prendrons ici comme exemple une feuille de papier avec des touches dessinées au crayon gris.
== '''Matériel''' ==
== '''Matériel''' ==
-
* [[Image:resistance.jpg|50px]] resistance
+
* [[Image:resistance.jpg|50px]] Une [[résistance]] de 1 MOhm
-
* [[Image:Led.jpg|50px]] LED
+
* [[Image:DEL.png|50px]] Une [[LED]]
-
* [[Image:buzzer.jpg|50px]] Buzzer
+
* [[Image:buzzer.jpg|50px]] [[Buzzer]]
-
* [[Image:arduino.jpg|50px]] arduino
+
* [[Image:Ordinateur.jpg|50px]] Un [[Ordinateur]]
-
* [[Image:feuilledepapier.jpg|50px]] Feuille de papier
+
* [[Image:Arduino_Uno_logo.png|50px]] Le logiciel [[Arduino]]
-
 
+
* [[Image:ArduinoUno_R3_Front_450px.jpg|50px]] Une carte [[arduino]]
 +
* [[Image:Papier.jpg|50px]] Une feuille de [[papier]]
 +
* [[Image:Breadboard.jpg|50px]] Une [[breadboard]]
 +
* [[Image:Pencil.jpg|50px]] Un [[crayon]] gris
== '''L'expérience''' ==
== '''L'expérience''' ==
==='''La manipulation'''===
==='''La manipulation'''===
-
Je décris l'expérience
 
-
==='''Que voit-on ?===
+
* Réaliser le montage suivant :
-
Je note les points importants à observer !!!
+
[[Image:Arduino_Pencil_Drawing_Sensor_Sketch_bb.jpg|600px]]
-
== '''Explications''' ==
+
* Sur une feuille de papier, dessiner des touches au crayon gris en insistant bien afin, que le graphite se dépose convenablement. Ces traits doivent rejoindre l’extrémité de la feuille.
-
==='''De manière simple'''===
+
Exemple de la feuille de papier reliée au circuit :
-
Je propose une explication scientifique de manière simple, de la façon la plus imagée possible. Imaginez que vous expliquez l'expérience à un enfant ou à une personne non scientifique (éviter le tutoiement !
+
[[Image:20130111_120919_3181.jpg|600px]]
-
=== '''Questions sans réponses''' ===
+
* Entrer le code suivant dans le logiciel arduino :
-
Ici je mets les questions soulevées par l'expérience, qui n'ont pas trouvé de réponses !!
+
-
=== '''Allons plus loin dans l'explication''' ===
+
<pre>
-
Développons les concepts scientifiques associés.
+
-
Ne pas hésiter à faire des liens avec Wikipédia.
+
-
== '''Liens avec d'autres expériences''' ==
+
// Pin à connecter à la LED
 +
int LEDPin = 13;
 +
// Pin à connecter à la feuille de papier
 +
int capSensePin = 2;
 +
// Seuil de détection du capteur, à régler par essais
 +
int touchedCutoff = 60;
-
==='''Expériences sur Wikidébrouillard'''===
+
void setup(){
-
Indiquer ici les expériences de Wikidébrouillard.
+
  Serial.begin(9600);
 +
  // Mise en place de la LED
 +
  pinMode(LEDPin, OUTPUT);
 +
  digitalWrite(LEDPin, LOW);
 +
}
-
==='''Autres expériences'''===
 
-
Autres expériences avec le même concept, recherche sur internet (indiquer les liens).
 
-
== '''Applications : liens avec le quotidien''' ==
+
void buzz(int targetPin, long frequency, long length) {
-
C'est de la culture, ça aide à comprendre le monde !! N'hésitez pas à lancer la discussion de votre fiche (après l'avoir sauvegarder !) afin de trouver de l'aide pour la compléter
+
  long delayValue = 1000000/frequency/2;
 +
  long numCycles = frequency * length/ 1000;
 +
  for (long i=0; i < numCycles; i++)
 +
  {
 +
    digitalWrite(targetPin,HIGH);
 +
    delayMicroseconds(delayValue);
 +
    digitalWrite(targetPin,LOW);
 +
    delayMicroseconds(delayValue);
 +
  }
 +
}
 +
 
 +
 
 +
void loop(){
 +
 
 +
  // Si le capteur atteint un certain seuil de tension, la led s'allume
 +
 
 +
  if (readCapacitivePin(capSensePin) > touchedCutoff) {
 +
    digitalWrite(LEDPin, HIGH);
 +
    // utilisation
 +
    buzz(4, 2500, 1000); // buzz sur pin 4 à 2500Hz
 +
  }
 +
  else {
 +
    digitalWrite(LEDPin, LOW);
 +
  }
 +
 
 +
  // Affiche toutes les 500 millisecondes la valeur du capteur
 +
  if ( (millis() % 500) == 0){
 +
    Serial.print("Capacitive Sensor on Pin 2 reads: ");
 +
    Serial.println(readCapacitivePin(capSensePin));
 +
  }
 +
}
 +
 
 +
// readCapacitivePin
 +
//  Entrée: Arduino pin number
 +
//  Sortie: Un nombre, de 0 à 17, représentant la capacité.
 +
//  Lorsqu'on touche la sortie (ou quoi que ce soit attache), le nombre va augmenter
 +
uint8_t readCapacitivePin(int pinToMeasure){
 +
  // This is how you declare a variable which
 +
  //  will hold the PORT, PIN, and DDR registers
 +
  //  on an AVR
 +
  volatile uint8_t* port;
 +
  volatile uint8_t* ddr;
 +
  volatile uint8_t* pin;
 +
  // Here we translate the input pin number from
 +
  //  Arduino pin number to the AVR PORT, PIN, DDR,
 +
  //  and which bit of those registers we care about.
 +
  byte bitmask;
 +
  if ((pinToMeasure >= 0) && (pinToMeasure <= 7)){
 +
    port = &PORTD;
 +
    ddr = &DDRD;
 +
    bitmask = 1 << pinToMeasure;
 +
    pin = &PIND;
 +
  }
 +
  if ((pinToMeasure > 7) && (pinToMeasure <= 13)){
 +
    port = &PORTB;
 +
    ddr = &DDRB;
 +
    bitmask = 1 << (pinToMeasure - 8);
 +
    pin = &PINB;
 +
  }
 +
  if ((pinToMeasure > 13) && (pinToMeasure <= 19)){
 +
    port = &PORTC;
 +
    ddr = &DDRC;
 +
    bitmask = 1 << (pinToMeasure - 13);
 +
    pin = &PINC;
 +
  }
 +
  // Discharge the pin first by setting it low and output
 +
  *port &= ~(bitmask);
 +
  *ddr  |= bitmask;
 +
  delay(1);
 +
  // Make the pin an input WITHOUT the internal pull-up on
 +
  *ddr &= ~(bitmask);
 +
  // Now see how long the pin to get pulled up
 +
  int cycles = 16000;
 +
  for(int i = 0; i < cycles; i++){
 +
    if (*pin & bitmask){
 +
      cycles = i;
 +
      break;
 +
    }
 +
  }
 +
  // Discharge the pin again by setting it low and output
 +
  //  It's important to leave the pins low if you want to
 +
  //  be able to touch more than 1 sensor at a time - if
 +
  //  the sensor is left pulled high, when you touch
 +
  //  two sensors, your body will transfer the charge between
 +
  //  sensors.
 +
  *port &= ~(bitmask);
 +
  *ddr  |= bitmask;
 +
 
 +
  return cycles;
 +
}
 +
 
 +
</pre>
 +
 
 +
* Appuyer sur les touches.
 +
 
 +
=='''Que voit-on ?'''==
 +
 
 +
Lorsqu'on appuie sur la surface conductrice utilisée dans le montage, la LED s'allume et on entend un bruit de buzzer.
 +
 
 +
== '''Explications''' ==
 +
 
 +
==='''De manière simple'''===
 +
 
 +
La pression du doigt fait varier la tension dans la surface conductrice. Cette variation est détectée par l'arduino, qui allume alors la LED et déclenche le buzzer.
 +
 
 +
=== '''Allons plus loin dans l'explication''' ===
-
== '''Lieux propices à sa réalisation''' ==
+
En démarrant le montage, on charge électriquement la surface conductrice pour l'amener à un potentiel. Lorsqu'on touche la surface en question, le corps agit comme une capacité et décharge la plaque, ce qui réduit le potentiel sur la surface.
-
Indiquer ici des lieux où tout le matériel nécessaire pour réaliser cette expérience est disponible.
+
-
=='''Catégories'''==
+
=== '''Catégories''' ===
-
Penser à fixer les disciplines scientifiques qui correspondent à l'expérience. Remplacer "à classer" par la discipline correspondante.
+
-
[[Catégorie:à classer]]
+
[[Catégorie:arduino]]
-
[[Catégorie:Vidéo à réaliser]]
+
-
[[Catégorie:Orthographe et style à corriger]]
+
[[Catégorie:Contenus à développer]]
[[Catégorie:Contenus à développer]]
[[Catégorie:Fiche à Valider]]
[[Catégorie:Fiche à Valider]]
[[Catégorie:expérience]]
[[Catégorie:expérience]]
 +
[[Catégorie:électrokids]]

Version actuelle en date du 5 août 2013 à 18:02

Article incomplet en cours de rédaction
Modèle:Vidéo


Sommaire

Présentation de l'expérience

Un détecteur capacitif permet de détecter une pression sur une surface conductrice. Nous prendrons ici comme exemple une feuille de papier avec des touches dessinées au crayon gris.

Matériel

L'expérience

La manipulation

  • Réaliser le montage suivant :

  • Sur une feuille de papier, dessiner des touches au crayon gris en insistant bien afin, que le graphite se dépose convenablement. Ces traits doivent rejoindre l’extrémité de la feuille.

Exemple de la feuille de papier reliée au circuit :

  • Entrer le code suivant dans le logiciel arduino :

// Pin à connecter à la LED
int LEDPin = 13;
// Pin à connecter à la feuille de papier
int capSensePin = 2;
// Seuil de détection du capteur, à régler par essais
int touchedCutoff = 60;

void setup(){
  Serial.begin(9600);
  // Mise en place de la LED
  pinMode(LEDPin, OUTPUT);
  digitalWrite(LEDPin, LOW);
}


void buzz(int targetPin, long frequency, long length) {
  long delayValue = 1000000/frequency/2;
  long numCycles = frequency * length/ 1000;
  for (long i=0; i < numCycles; i++)
  {
    digitalWrite(targetPin,HIGH);
    delayMicroseconds(delayValue);
    digitalWrite(targetPin,LOW);
    delayMicroseconds(delayValue);
  }
}


void loop(){
  
  // Si le capteur atteint un certain seuil de tension, la led s'allume
  
  if (readCapacitivePin(capSensePin) > touchedCutoff) {
    digitalWrite(LEDPin, HIGH);
    // utilisation
    buzz(4, 2500, 1000); // buzz sur pin 4 à 2500Hz
  }
  else {
    digitalWrite(LEDPin, LOW);
  }
  
  // Affiche toutes les 500 millisecondes la valeur du capteur
  if ( (millis() % 500) == 0){
    Serial.print("Capacitive Sensor on Pin 2 reads: ");
    Serial.println(readCapacitivePin(capSensePin));
  }
}

// readCapacitivePin
//  Entrée: Arduino pin number
//  Sortie: Un nombre, de 0 à 17, représentant la capacité.
//  Lorsqu'on touche la sortie (ou quoi que ce soit attache), le nombre va augmenter
uint8_t readCapacitivePin(int pinToMeasure){
  // This is how you declare a variable which
  //  will hold the PORT, PIN, and DDR registers
  //  on an AVR
  volatile uint8_t* port;
  volatile uint8_t* ddr;
  volatile uint8_t* pin;
  // Here we translate the input pin number from
  //  Arduino pin number to the AVR PORT, PIN, DDR,
  //  and which bit of those registers we care about.
  byte bitmask;
  if ((pinToMeasure >= 0) && (pinToMeasure <= 7)){
    port = &PORTD;
    ddr = &DDRD;
    bitmask = 1 << pinToMeasure;
    pin = &PIND;
  }
  if ((pinToMeasure > 7) && (pinToMeasure <= 13)){
    port = &PORTB;
    ddr = &DDRB;
    bitmask = 1 << (pinToMeasure - 8);
    pin = &PINB;
  }
  if ((pinToMeasure > 13) && (pinToMeasure <= 19)){
    port = &PORTC;
    ddr = &DDRC;
    bitmask = 1 << (pinToMeasure - 13);
    pin = &PINC;
  }
  // Discharge the pin first by setting it low and output
  *port &= ~(bitmask);
  *ddr  |= bitmask;
  delay(1);
  // Make the pin an input WITHOUT the internal pull-up on
  *ddr &= ~(bitmask);
  // Now see how long the pin to get pulled up
  int cycles = 16000;
  for(int i = 0; i < cycles; i++){
    if (*pin & bitmask){
      cycles = i;
      break;
    }
  }
  // Discharge the pin again by setting it low and output
  //  It's important to leave the pins low if you want to 
  //  be able to touch more than 1 sensor at a time - if
  //  the sensor is left pulled high, when you touch
  //  two sensors, your body will transfer the charge between
  //  sensors.
  *port &= ~(bitmask);
  *ddr  |= bitmask;
  
  return cycles;
}

  • Appuyer sur les touches.

Que voit-on ?

Lorsqu'on appuie sur la surface conductrice utilisée dans le montage, la LED s'allume et on entend un bruit de buzzer.

Explications

De manière simple

La pression du doigt fait varier la tension dans la surface conductrice. Cette variation est détectée par l'arduino, qui allume alors la LED et déclenche le buzzer.

Allons plus loin dans l'explication

En démarrant le montage, on charge électriquement la surface conductrice pour l'amener à un potentiel. Lorsqu'on touche la surface en question, le corps agit comme une capacité et décharge la plaque, ce qui réduit le potentiel sur la surface.

Catégories

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraits
AR
CO

Détecteur capacitif

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique