Projet: Laser Time
Forum Multirotors et Drones
MikroKopter de phmir
Merci de vous connecter ou de vous inscrire.

Connexion avec identifiant, mot de passe et durée de la session

Auteur Sujet: Projet: Laser Time  (Lu 1328 fois)

GUIGUI59

  • Membre Complet
  • ****
  • Hors ligne Hors ligne
  • Messages: 436
Projet: Laser Time
« le: 26 octobre 2014 à 16:02:10 »

Salut tous le monde,

J'ai fabriqué un petit truc avec une carte arduino et sa s'appelle LaserTime sa un rapport avec les multicopteres.

Deviner se que sa pourrez être ?
IP archivée
Spektrum DX6i
2 lipo 1800 mah
Un quadriwiicoptere ( moteur keda 20-50s )
GOPRO  HD2
Ma chaine youtube : http://www.youtube.com/user/officialguigui59/videos

GUIGUI59

  • Membre Complet
  • ****
  • Hors ligne Hors ligne
  • Messages: 436
Projet: Laser Time
« Réponse #1 le: 26 octobre 2014 à 18:00:12 »

Bon vu qu'il y a pas de réponse je dis se que s'est.

C'est un système avec un laser et un capteur de luminosité et lorsque que quelque chose coupe le laser (par exemple: un quadricoptere) ba il dit le temps qu'on a mis pour faire un tour par exemple et il dit le meilleur temps.

IP archivée
Spektrum DX6i
2 lipo 1800 mah
Un quadriwiicoptere ( moteur keda 20-50s )
GOPRO  HD2
Ma chaine youtube : http://www.youtube.com/user/officialguigui59/videos

MeKam

  • Membre Héroïque
  • ******
  • En ligne En ligne
  • Messages: 4 757
  • En l'air c'est mieux que parterre !
    • PHISAPROD.NET
Projet: Laser Time
« Réponse #2 le: 26 octobre 2014 à 18:28:47 »

Ah ok, c'est comme un chronographe pour le tir !
IP archivée

En vol : Polyclub - Easystar II Multiplex - MikroKopter - MultiWii/Naze32 - MegaPirate & ArduCopter -  DJI Naza V1, V2
Radio : Graupner MX20 - Spektrum DX7 - Turnigy ER9X FrSky/Orx DSM2-X
Images : Mobius - GoPro HD2,3&4 - Sony Nex 6

GUIGUI59

  • Membre Complet
  • ****
  • Hors ligne Hors ligne
  • Messages: 436
Projet: Laser Time
« Réponse #3 le: 26 octobre 2014 à 19:46:14 »

Oui je pense, mais pour l'instant sa calcule pas la vitesse.
IP archivée
Spektrum DX6i
2 lipo 1800 mah
Un quadriwiicoptere ( moteur keda 20-50s )
GOPRO  HD2
Ma chaine youtube : http://www.youtube.com/user/officialguigui59/videos

jelabed

  • Membre Héroïque
  • ******
  • Hors ligne Hors ligne
  • Messages: 8 504
  • pitié pour les dronistes
Projet: Laser Time
« Réponse #4 le: 26 octobre 2014 à 19:48:42 »

bonsoir ,

bien ton application mais :

j’écris en connaissance de cause car j ai déjà fait de la détection de mouvement a partir de laser .

il faut impérativement que ton laser clignote : un bon 1000 hz (1khz)

au niveau de ta cellule (surtout pas une LDR mais une photo diode )  tu va récupérer ta porteuse a 1000 hz

ensuite en sortie de ta cellule tu pose un circuit raisonnant sur 1000hz et tu n amplifie que le signal utile .


grâce a ce dispositif tu peu capter le reflet du laser , ou alors tu peu placer une lentille divergente pour augmenter le champ de détection de ton laser .

ça va ? j ai été suffisamment clair ?
IP archivée

GUIGUI59

  • Membre Complet
  • ****
  • Hors ligne Hors ligne
  • Messages: 436
Projet: Laser Time
« Réponse #5 le: 26 octobre 2014 à 20:07:58 »

Merci pour les explications , je suis novice en arduino donc je vais poser quelque question

-Faire clignoté le laser ok mais pourquoi ?
-Après c'est raté car ma cellule est une LDR.
-Circuit raisonnant 1khz ?????? Amplifié le signal utile ?????? J'ai une arduino je sais pas du tout comment faire ?
Vous allez dire je connais rien mais arduino c'est pour apprendre
-Enfin pourquoi capter le reflet si on a directement la lumière du laser ?

Merci des infos

IP archivée
Spektrum DX6i
2 lipo 1800 mah
Un quadriwiicoptere ( moteur keda 20-50s )
GOPRO  HD2
Ma chaine youtube : http://www.youtube.com/user/officialguigui59/videos

MeKam

  • Membre Héroïque
  • ******
  • En ligne En ligne
  • Messages: 4 757
  • En l'air c'est mieux que parterre !
    • PHISAPROD.NET
Projet: Laser Time
« Réponse #6 le: 26 octobre 2014 à 20:16:19 »

Voici quelques éléments à te mettre sous la dent





IP archivée

En vol : Polyclub - Easystar II Multiplex - MikroKopter - MultiWii/Naze32 - MegaPirate & ArduCopter -  DJI Naza V1, V2
Radio : Graupner MX20 - Spektrum DX7 - Turnigy ER9X FrSky/Orx DSM2-X
Images : Mobius - GoPro HD2,3&4 - Sony Nex 6

jelabed

  • Membre Héroïque
  • ******
  • Hors ligne Hors ligne
  • Messages: 8 504
  • pitié pour les dronistes
Projet: Laser Time
« Réponse #7 le: 26 octobre 2014 à 20:16:51 »

donc je n ai pas été suffisamment clair  :oops1:

le but de tout ça ce de faire la différence entre la lumière ambiante et celle du laser

si tu captes le reflet du laser c est plus pratique car ton émission et ta réception se retrouvent du même cote de ta cible
donc tu n a pas de fil ou tu n as qu une source d énergie

pour le circuit , signal utile il te faut des connaissances en électronique .

il faut que je m absente mais ton projet est intéressant , je vais le garder dans un coin afin de participer plus tard 

IP archivée

GUIGUI59

  • Membre Complet
  • ****
  • Hors ligne Hors ligne
  • Messages: 436
Projet: Laser Time
« Réponse #8 le: 26 octobre 2014 à 20:55:41 »

Si vous voulez j'ai coder le programme sous processing ?
IP archivée
Spektrum DX6i
2 lipo 1800 mah
Un quadriwiicoptere ( moteur keda 20-50s )
GOPRO  HD2
Ma chaine youtube : http://www.youtube.com/user/officialguigui59/videos

djsyl

  • Modérateur Global
  • Membre Héroïque
  • ******
  • Hors ligne Hors ligne
  • Messages: 13 560
  • Sylvain - F8byc
    • Club-Aquilon
Projet: Laser Time
« Réponse #9 le: 27 octobre 2014 à 05:57:07 »

Arduino lazer je m'inscrit pour suive cela  :doublepouce:

GUIGUI59

  • Membre Complet
  • ****
  • Hors ligne Hors ligne
  • Messages: 436
Projet: Laser Time
« Réponse #10 le: 09 novembre 2014 à 15:43:55 »

Pour ce qui veulent je met le code arduino et processing.
import processing.serial.*;

Serial myPort;

int xAffichage = 30, xEspace = 250;
int yAffichage = 80, yEspace = 50;
int xAffichageText = xAffichage+(xEspace*2)+205;

int sizeX = 200;
int sizeY = 25;

int laser = -1;

int inByte=0;

int record=1000000;

int []tempsTour = new int [3];
int []tempsTourPasse = new int [3];
int []tempsTourRecord = new int [3];//<10min>/<5min>/<1min>//
int present10M = 0, present5M = 0, presentM = 0;
int present10RM = 0, present5RM = 0, presentRM = 0;
int present10PM = 0, present5PM = 0, presentPM = 0;
int deductionMillis = 0;
int secondPresent = 0, secondPasse = 0;
int nbSECONDErecord = 0;
int timeAp=0;

boolean StateLaser=false;
boolean onoff = false;


void setup()
{
  size(920, 250);
  affichageBase();
  affichagePresent(0, 0, 0);
  affichagePasse(0, 0, 0);
  affichageRecord(0, 0, 0);
  myPort = new Serial(this, Serial.list()[0], 9600);
}
void draw()
{
  onoff=button(onoff);
  buttonResetRecord();
  if (onoff==true)
  {
    inByte=myPort.read()-48;
    if (inByte>=0)
    {
      int stop=0;
      while (stop==0)
      {
        tempsTour[0]=millis()-deductionMillis;
        if (tempsTour[0]>0 && tempsTour[0]<1000)
        {
          stop=1;
        }
        else
        {
          deductionMillis+=1000;
        }
      }

      if (presentM==60) {
        presentM=0;
      }
      if (present5M==(60*5)) {
        present5M=0;
      }
      if (present10M==(60*10)) {
        present10M=0;
      }

      if (tempsTour[1]>=60)
      {
        tempsTour[1]=0;
        tempsTour[2]++;
      }
      laser=inByte;
      if (laser==0)
      {
        if (StateLaser==false)
        {
          secondPasse=secondPresent;
          tempsTourPasse[0]=tempsTour[0];
          tempsTourPasse[1]=tempsTour[1];
          tempsTourPasse[2]=tempsTour[2];

          presentPM = presentM;
          present5PM = present5M;
          present10PM = present10M;
          affichagePasse(presentPM, present5PM, present10PM);
          if (secondPresent<record)
          {
            record=secondPresent;
            tempsTourRecord[0]=tempsTour[0];
            tempsTourRecord[1]=tempsTour[1];
            tempsTourRecord[2]=tempsTour[2];//Text

            presentRM = presentM;
            present5RM = present5M;
            present10RM = present10M;
          }
          affichageRecord(presentRM, present5RM, present10RM);
          secondPresent=0;
          presentM=present5M=present10M=0;
          tempsTour[0]=tempsTour[1]=tempsTour[2]=0;
          StateLaser=true;
        }
      }
      if (laser==1)
      {
        StateLaser=false;
        if (time()==1)
        {
          secondPresent++;
          tempsTour[1]++;
          presentM++;
          present5M++;
          present10M++;
        }
      } 
      affichagePresent(presentM, present5M, present10M);
    }
  }
}
int time()
{
  int timeF=0, aa=0;
  boolean stop=false;
  while (stop==false)
  {
    if ((millis()-(aa*1000))>=0 && (millis()-(aa*1000))<1000) {
      stop=true;
    }
    else {
      aa++;
    }
  }
  timeF=aa-timeAp;
  timeAp=aa;
  if (timeF>=1) {
    return 1;
  }
  return 0;
}
void affichageRecord(int A, int B, int C)
{
  float [] xRecord = new float [3];
  /////////////////Affichage ligne passé ////////////////////
  fill(255);
  rect(xAffichage+(xEspace*0), yAffichage+(yEspace*2), 200, 25);
  rect(xAffichage+(xEspace*1), yAffichage+(yEspace*2), 200, 25);
  rect(xAffichage+(xEspace*2), yAffichage+(yEspace*2), 200, 25);
  ///////////////////////////////////////////////////////////


  ///////////////////////////////////////////////////////////


  ///////////Convertission Temps En Position X //////////////
  xRecord[0]=map(C, 0, (60*10), 0, sizeX);
  xRecord[1]=map(B, 0, (60*5), 0, sizeX);
  xRecord[2]=map(A, 0, (60*1), 0, sizeX);
  ///////////////////////////////////////////////////////////


  //////////////////////////////////////////////////////////


  /////////////////Affichage barre d'état //////////////////
  fill(0, 255, 0);
  rect(xAffichage+(xEspace*0), yAffichage+(yEspace*2), xRecord[0], 25);
  rect(xAffichage+(xEspace*1), yAffichage+(yEspace*2), xRecord[1], 25);
  rect(xAffichage+(xEspace*2), yAffichage+(yEspace*2), xRecord[2], 25);
  //////////////////////////////////////////////////////////


  //////////////////////////////////////////////////////////


  ///////////////////////////Text////////////////////////////
  fill(55);
  noStroke();
  rect(xAffichageText, yAffichage+(yEspace*2), 70, 25);
  fill(255);
  text(tempsTourRecord[2]+":"+tempsTourRecord[1]+":"+tempsTourRecord[0], xAffichageText, yAffichage+(yEspace*2)+18);
}
void affichagePasse(int A, int B, int C)
{
  float [] xPast = new float [3];
  /////////////////Affichage ligne passé ////////////////////
  fill(255);
  rect(xAffichage+(xEspace*0), yAffichage+(yEspace*1), 200, 25);
  rect(xAffichage+(xEspace*1), yAffichage+(yEspace*1), 200, 25);
  rect(xAffichage+(xEspace*2), yAffichage+(yEspace*1), 200, 25);
  ///////////////////////////////////////////////////////////


  ///////////////////////////////////////////////////////////


  ///////////Convertission Temps En Position X //////////////
  fill(0, 0, 255);
  xPast[0]=map(C, 0, (60*10), 0, sizeX);
  xPast[1]=map(B, 0, (60*5), 0, sizeX);
  xPast[2]=map(A, 0, (60*1), 0, sizeX);
  ///////////////////////////////////////////////////////////


  //////////////////////////////////////////////////////////


  /////////////////Affichage barre d'état //////////////////
  rect(xAffichage+(xEspace*0), yAffichage+(yEspace*1), xPast[0], 25);
  rect(xAffichage+(xEspace*1), yAffichage+(yEspace*1), xPast[1], 25);
  rect(xAffichage+(xEspace*2), yAffichage+(yEspace*1), xPast[2], 25);
  //////////////////////////////////////////////////////////


  //////////////////////////////////////////////////////////


  ///////////////////////////Text////////////////////////////
  fill(55);
  noStroke();
  rect(xAffichageText, yAffichage+(yEspace*1), 70, 25);
  fill(255);
  text(tempsTourPasse[2]+":"+tempsTourPasse[1]+":"+tempsTourPasse[0], xAffichageText, yAffichage+(yEspace*1)+18);
}
void affichagePresent(int presentM, int present5M, int present10M)
{
  float [] xPresent = new float [3];

  /////////////////Affichage ligne présent ////////////////////
  fill(255);
  rect(xAffichage+(xEspace*0), yAffichage+(yEspace*0), 200, 25);
  rect(xAffichage+(xEspace*1), yAffichage+(yEspace*0), 200, 25);
  rect(xAffichage+(xEspace*2), yAffichage+(yEspace*0), 200, 25);
  ///////////////////////////////////////////////////////////


  ///////////////////////////////////////////////////////////


  ///////////Convertission Temps En Position X //////////////
  xPresent[0]=map(present10M, 0, (60*10), 0, sizeX);
  xPresent[1]=map(present5M, 0, (60*5), 0, sizeX);
  xPresent[2]=map(presentM, 0, (60*1), 0, sizeX);
  ///////////////////////////////////////////////////////////


  //////////////////////////////////////////////////////////


  /////////////////Affichage barre d'état //////////////////
  fill(255, 0, 0);
  rect(xAffichage+(xEspace*0), yAffichage+(yEspace*0), xPresent[0], 25);
  rect(xAffichage+(xEspace*1), yAffichage+(yEspace*0), xPresent[1], 25);
  rect(xAffichage+(xEspace*2), yAffichage+(yEspace*0), xPresent[2], 25);
  //////////////////////////////////////////////////////////


  //////////////////////////////////////////////////////////


  ///////////////////////////Texte//////////////////////////
  fill(55);
  noStroke();
  rect(xAffichageText,yAffichage,70,25);
  fill(255);
  text(tempsTour[2]+":"+tempsTour[1]+":"+tempsTour[0], xAffichageText, yAffichage+18);
}
void affichageBase()
{
  background(55);
  noStroke();
  fill(255);
  rect(xAffichage+(xEspace*0), yAffichage+(yEspace*0), 200, 25);
  rect(xAffichage+(xEspace*1), yAffichage+(yEspace*0), 200, 25);
  rect(xAffichage+(xEspace*2), yAffichage+(yEspace*0), 200, 25);
  //////////////////////Button Reset Record/////////////////////
  fill(10);
  stroke(115, 115, 115);
  rect(950-150, 0, 150, 30);
  fill(255);
  text("Reset Time Record", 950-140, 18);
}
void buttonResetRecord()
{
  if (mousePressed == true)
  {
    if (mouseX<950 && mouseX>950-120 && mouseY<30 && mouseY>0)
    {
      affichageRecord(0, 0, 0);
      tempsTourRecord[0]=tempsTourRecord[1]=tempsTourRecord[2]=0;
    }
  }
}
boolean button(boolean state)
{
  if (mousePressed == true)
  {
    if (mouseX<700 && mouseX>50 && mouseY<30 && mouseY>10)
    {
      if (state==true) {
        state=false;
      }
      if (state==false) {
        state=true;
      }
    }
  }
  if (state==true)
  {
    fill(0, 255, 0);
    rect(30, 10, 700, 30);
    fill(0);
    text("ON", 380, 30);
  }
  if (state==false)
  {
    fill(255, 0, 0);
    rect(30, 10, 700, 30);
    fill(0);
    text("OFF", 380, 30);
  }
  return state;
}
Et le code arduino: Je pense que c'est celui la
void setup()
{
  Serial.begin(9600);
  pinMode(5,OUTPUT);
  digitalWrite(5,HIGH);
}

void loop()
{
  if(analogRead(A0)<4)
  {
    Serial.print("1");
  }
  else
  {
    Serial.print("0");
  }
  delay(30); 
}

La le code de processing et important et celui de l'arduino faible car je concidère l'ordinateur plus puissant que l'arduino mais après on peut imaginé une version avec un ecran 16*2 caractère.
IP archivée
Spektrum DX6i
2 lipo 1800 mah
Un quadriwiicoptere ( moteur keda 20-50s )
GOPRO  HD2
Ma chaine youtube : http://www.youtube.com/user/officialguigui59/videos