Go Down

Topic: barrière infrarouge (Read 1 time) previous topic - next topic

dalanx

Bonjours,

codant chez moi pour des projets de lycée, je voudrai savoir si un code fonctionnerait pour faire barrière infrarouge. j'ai essayé de faire au plus court mais en fonction de ce que j'ai vue sur des tuto, j'ai l'impression que c'est un peu "trop" court :D.

voici le code :

Code: [Select]


int ledPin = 13;                // broche de la led
int inputPin = 2;               // choisir la broche d'entré (du capteur)
int pirState = LOW;             // variable pirstate (etat PIR = 0)
int val = 0;                    // variable lecture état broche
 
void setup() {
  pinMode(ledPin, OUTPUT);     
  pinMode(inputPin, INPUT);     
 
  Serial.begin(9600);
}
 
void loop(){
  val = digitalRead(inputPin); 
  if (val == HIGH) {           
    digitalWrite(ledPin, HIGH);     
    if (pirState == LOW) {       
     
                        // MISE ICI DU CODE QUAND UN OBJET EST DÉTECTER (pas encore fait)
     
      pirState = HIGH;
    } 
  }
  else {
    digitalWrite(ledPin, LOW); // éteindre la led
    if (pirState == HIGH){     // condition : valeur broche = haut
      pirState = LOW;
    }
  }
}


En faite dans ce code, au lieu de faire : si il y a de l'infrarouge, j'ai demande l'inverse, "si il n'y a pas d'infrarouge" avec la variable val. Et il n'y a pas de libraire IRremote



Un des codes que j'ai vue sur internet (même même après installation de la libraire IRremote.h, impossible de le faire fonctionner, mais sans modifier le programme, problème au niveau "IRsend irsend; )

Code: [Select]
/*
  Barrière infrarouge avec Arduino
  LED IR sur D3 (géré par librairie IRremote) + TSOP32138 -> D2
  La LED13 de l'Arduino s'allume en cas de coupure du faisceau lumineux
*/

#include <IRremote.h>

#define CAPTEUR 2 // récepteur IR -> D2
#define LED_STATUT 13 // LED -> D13

IRsend irsend; // déclaration de l'objet émetteur (pin D3 obligatoire)

void setup()
{
  pinMode(CAPTEUR, INPUT);
  pinMode(LED_STATUT, OUTPUT);
 
  irsend.enableIROut(38); // crée une sortie modulée à 38KHz
  Serial.begin(9600);
}

void loop()
{
  irsend.mark(0); // envoi du signal pour une durée illimitée
 
  boolean mesure1 = digitalRead(CAPTEUR); // première mesure
  delay(5);                               // délai
  boolean mesure2 = digitalRead(CAPTEUR); // seconde mesure
  boolean etat = mesure1 * mesure2;       // comparaison
 
  if (etat == HIGH) // si les deux lectures voient une coupure
  {
    digitalWrite(LED_STATUT, HIGH);
    Serial.println("Coupure !");
  }
  else              // sinon
  {
    digitalWrite(LED_STATUT, LOW);
    Serial.println("----------OK----------");
  }
  delay(5);
}



zoroastre

Bonjour,

Le hic est que les codes que nous proposent utilisent apparemment 2 technologies différentes.

Le premier code utilise un détecteur de mouvement PIR (suggéré par la variable pirState et la suite du code), alors que le second code renvoie à une barrière infrarouge utilisant un émetteur (diode Ir) et un récepteur (phototransistor TSOP).

La question manque du coup de cohérence ; Tu n'auras pas de meilleur réponse.

@+

Zoroastre.
Gné! ;)

dalanx

j'avais oublier que c'étais un détecteur de mouvement, j'ai donc refais un nouveau code qui n'utiliserai pas la library IRremote.h, pourrait-il fonctionner ?

Code: [Select]

int photodiode = 0; // broche photodiode : 0
int ledverification = 11; // broche voyant/led : 11

int photomesure = 0;  // valeur lue : de 0 à 1023 max
int nblect=5; // nombre de lectures faites, on va faire une moyenne
long somme=0; // valeur photodiode

int seuil = 50 ; // si la valeur analogique lue est inférieure à 50, on lance la code d'envoie SMS

void setup(void) {
  Serial.begin(19200);   
}

void loop(void) {   

  int i;
 somme=0; // on va faire la moyenne de plusieurs mesures 
  for (i=0 ; i < nblect ; i++) { // boucle avec i = +1 a chaque passage jusqu'a atteindre 5   
  somme = somme +  analogRead(photodiode);
  }
 photomesure = somme / nblect; // moyenne des 5 valeurs obtenue     

  if (photomesure < seuil) { // condition la veuleur moyenne des mesure est inferieur à 50 (donc laser coupé)
      digitalWrite(ledverification, HIGH); // la led s'allume
  } else {
       digitalWrite(ledverification, LOW); // la led s'éteint
  }   
                       }

Artouste

#3
Dec 16, 2014, 08:44 pm Last Edit: Dec 16, 2014, 10:45 pm by Artouste
j'avais oublier que c'étais un détecteur de mouvement, j'ai donc refais un nouveau code qui n'utiliserai pas la library IRremote.h, pourrait-il fonctionner ?
bonsoir
avant de partir dans tous les sens , indique déjà ce que tu utilise comme capteur et comme source d'emission IR,
parce que faire une barrière IR , ça ne nécessite pas à priori d'avoir à utiliser IRremote

Major29

Bonjour;

Je travaille pour le moment pour une petite société qui fabrique des machines d'étiquetage et de remplissage, j'ai remarqué que le principe de commande de ces machine est classique. J'ai décidé alors de changer le principe de commande par Arduino au lieu d'utiliser une carte de commande. La machine contient de capteur , un capteur fourche pour les étiquette et un autre capteur de présence. Ce que je veux faire c'est de commander mon servomoteur qui travaille après un signal donné en boucle "ET"(Par les deux capteurs), est ce que vous pouvez m'aider
Merci !!!!

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy