Robotique-Projet
Bonjour et bienvenu sur le forum ROBOTIQUE-PROJET

Merci de nous rejoindre, pour avoir accès aux forum en entier,

il suffis juste de s'inscrire sa prends 2 minutes, et bien sur de faire sa

présentation, au plaisir de se croisé sur le forum.
Robotique-Projet

Forum sur la Robotique & Informatique & Programmation


Vous n'êtes pas connecté. Connectez-vous ou enregistrez-vous

Voir le sujet précédent Voir le sujet suivant Aller en bas  Message [Page 1 sur 1]

Seb03000

avatar
Fondateur
Fondateur
Il faut donc une platine Arduino Uno, un capteur ultrason SRF05, un servomoteur et le programme processing (ici), qui ressemble à IDE d'Arduino.

On câble tout ça comme ça :



Ensuite le code pour Arduino :

Code:
#include            // include the standard servo library
Servo leftRightServo;        // set a variable to map the servo
int leftRightPos = 0;        // set a variable to store the servo position
const int numReadings = 10;  // set a variable for the number of readings to take
int index = 0;                // the index of the current reading
int total = 0;                // the total of all readings
int average = 0;              // the average
int echoPin = 2;              // the SRF05's echo pin
int initPin = 3;              // the SRF05's init pin
unsigned long pulseTime = 0;  // variable for reading the pulse
unsigned long distance = 0;  // variable for storing distance
 
/* setup the pins, servo and serial port */
void setup() {
  leftRightServo.attach(9);
  // make the init pin an output:
  pinMode(initPin, OUTPUT);
  // make the echo pin an input:
  pinMode(echoPin, INPUT);
  // initialize the serial port:
  Serial.begin(9600);
}
 
/* begin rotating the servo and getting sensor values */
void loop() {
  for(leftRightPos = 0; leftRightPos < 180; leftRightPos  ) {  // going left to right.
    leftRightServo.write(leftRightPos);
      for (index = 0; index<=numReadings;index  ) {            // take x number of readings from the sensor and average them
        digitalWrite(initPin, LOW);
        delayMicroseconds(50);
        digitalWrite(initPin, HIGH);                          // send signal
        delayMicroseconds(50);                                // wait 50 microseconds for it to return
        digitalWrite(initPin, LOW);                            // close signal
        pulseTime = pulseIn(echoPin, HIGH);                    // calculate time for signal to return
        distance = pulseTime/58;                              // convert to centimetres
        total = total  distance;                              // update total
        delay(10);
      }
    average = total/numReadings;                              // create average reading
 
    if (index >= numReadings)  {                              // reset the counts when at the last item of the array
      index = 0;
      total = 0;
    }
    Serial.print("X");                                        // print leading X to mark the following value as degrees
    Serial.print(leftRightPos);                                // current servo position
    Serial.print("V");                                        // preceeding character to separate values
    Serial.println(average);                                  // average of sensor readings
  }
  /*
  start going right to left after we got to 180 degrees
  same code as above
  */
  for(leftRightPos = 180; leftRightPos > 0; leftRightPos--) {  // going right to left
    leftRightServo.write(leftRightPos);
    for (index = 0; index<=numReadings;index  ) {
      digitalWrite(initPin, LOW);
      delayMicroseconds(50);
      digitalWrite(initPin, HIGH);
      delayMicroseconds(50);
      digitalWrite(initPin, LOW);
      pulseTime = pulseIn(echoPin, HIGH);
      distance = pulseTime/58;
      total = total  distance;
      delay(10);
    }
    average = total/numReadings;
    if (index >= numReadings)  {
      index = 0;
      total = 0;
    }
    Serial.print("X");
    Serial.print(leftRightPos);
    Serial.print("V");
    Serial.println(average);
  }
}

Et le code pour processing :

Code:
import processing.serial.*;    // import serial library
Serial myPort;                  // declare a serial port
float x, y;                    // variable to store x and y co-ordinates for vertices 
int radius = 350;              // set the radius of objects
int w = 300;                    // set an arbitary width value
int degree = 0;                // servo position in degrees
int value = 0;                  // value from sensor
int motion = 0;                // value to store which way the servo is panning
int[] newValue = new int[181];  // create an array to store each new sensor value for each servo position
int[] oldValue = new int[181];  // create an array to store the previous values.
PFont myFont;                  // setup fonts in Processing
int radarDist = 0;              // set value to configure Radar distance labels
int firstRun = 0;              // value to ignore triggering motion on the first 2 servo sweeps
 
/* create background and serial buffer */
void setup(){
  // setup the background size, colour and font.
  size(750, 450);
  background (0); // 0 = black
  myFont = createFont("verdana", 12);
  textFont(myFont);
  // setup the serial port and buffer
  myPort = new Serial(this, Serial.list()[1], 9600);
  myPort.bufferUntil('\n');
}
 
/* draw the screen */
void draw(){
  fill(0);                              // set the following shapes to be black
  noStroke();                          // set the following shapes to have no outline
  ellipse(radius, radius, 750, 750);    // draw a circle with a width/ height = 750 with its center position (x and y) set by the radius
  rectMode(CENTER);                    // set the following rectangle to be drawn around its center
  rect(350,402,800,100);                // draw rectangle (x, y, width, height)
  if (degree >= 179) {                  // if at the far right then set motion = 1/ true we're about to go right to left
    motion = 1;                        // this changes the animation to run right to left
  }
  if (degree <= 1) {                    // if servo at 0 degrees then we're about to go left to right
    motion = 0;                        // this sets the animation to run left to right
  }
  /* setup the radar sweep */
  /*
  We use trigonmetry to create points around a circle.
  So the radius plus the cosine of the servo position converted to radians
  Since radians 0 start at 90 degrees we add 180 to make it start from the left
  Adding  1 (i) each time through the loops to move 1 degree matching the one degree of servo movement
  cos is for the x left to right value and sin calculates the y value
  since its a circle we plot our lines and vertices around the start point for everything will always be the center.
  */
  strokeWeight(7);                      // set the thickness of the lines
  if (motion == 0) {                    // if going left to right
    for (int i = 0; i <= 20; i  ) {    // draw 20 lines with fading colour each 1 degree further round than the last
      stroke(0, (10*i), 0);            // set the stroke colour (Red, Green, Blue) base it on the the value of i
      line(radius, radius, radius  cos(radians(degree (180 i)))*w, radius  sin(radians(degree (180 i)))*w); // line(start x, start y, end x, end y)
    }
  } else {                              // if going right to left
    for (int i = 20; i >= 0; i--) {    // draw 20 lines with fading colour
      stroke(0,200-(10*i), 0);          // using standard RGB values, each between 0 and 255
      line(radius, radius, radius  cos(radians(degree (180 i)))*w, radius  sin(radians(degree (180 i)))*w);
    }
  }
  /* Setup the shapes made from the sensor values */
  noStroke();                          // no outline
  /* first sweep */
  fill(0,50,0);                        // set the fill colour of the shape (Red, Green, Blue)
  beginShape();                        // start drawing shape
    for (int i = 0; i < 180; i  ) {    // for each degree in the array
      x = radius  cos(radians((180 i)))*((oldValue[i]*2)); // create x coordinate
      y = radius  sin(radians((180 i)))*((oldValue[i]*2)); // create y coordinate
      vertex(x, y);                    // plot vertices
    }
  endShape();                          // end shape
  /* second sweep */
  fill(0,110,0);
  beginShape();
    for (int i = 0; i < 180; i  ) {
      x = radius  cos(radians((180 i)))*(newValue[i]*2);
      y = radius  sin(radians((180 i)))*(newValue[i]*2);
      vertex(x, y);
    }
  endShape();
  /* average */
  fill(0,170,0);
  beginShape();
    for (int i = 0; i < 180; i  ) {
      x = radius  cos(radians((180 i)))*(((newValue[i] oldValue[i])/2)*2); // create average
      y = radius  sin(radians((180 i)))*(((newValue[i] oldValue[i])/2)*2);
      vertex(x, y);
    }
  endShape();
  /* if after first 2 sweeps, highlight motion with red circle*/
  if (firstRun >= 360) {
    stroke(150,0,0);
    strokeWeight(1);
    noFill();
      for (int i = 0; i < 180; i  ) {
        if (oldValue[i] - newValue[i] > 35 || newValue[i] - oldValue[i] > 35) {
          x = radius  cos(radians((180 i)))*(newValue[i]*2);
          y = radius  sin(radians((180 i)))*(newValue[i]*2);
          ellipse(x, y, 10, 10);
        }
      }
  }
  /* set the radar distance rings and out put their values, 50, 100, 150 etc.. */
  for (int i = 0; i <=6; i  ){
    noFill();
    strokeWeight(1);
    stroke(0, 255-(30*i), 0);
    ellipse(radius, radius, (100*i), (100*i));
    fill(0, 100, 0);
    noStroke();
    text(Integer.toString(radarDist 25), 380, (305-(radarDist*2)), 50, 50); // change this to measure up to 150cm
    radarDist =25;
  }
  radarDist = 0;
  /* draw the grid lines on the radar every 30 degrees and write their values 180, 210, 240 etc.. */
  for (int i = 0; i <= 6; i  ) {
    strokeWeight(1);
    stroke(0, 55, 0);
    line(radius, radius, radius  cos(radians(180 (30*i)))*w, radius  sin(radians(180 (30*i)))*w);
    fill(0, 55, 0);
    noStroke();
    if (180 (30*i) >= 300) {
      text(Integer.toString(180 (30*i)), (radius 10)  cos(radians(180 (30*i)))*(w 10), (radius 10)  sin(radians(180 (30*i)))*(w 10), 25,50);
    } else {
      text(Integer.toString(180 (30*i)), radius  cos(radians(180 (30*i)))*w, radius  sin(radians(180 (30*i)))*w, 60,40);
    }
  }
  /* Write information text and values. */
  noStroke();
  fill(0);
  rect(350,402,800,100);
  fill(0, 100, 0);
  text("Degrees: " Integer.toString(degree), 100, 380, 100, 50);        // use Integet.toString to convert numeric to string as text() only outputs strings
  text("Distance: " Integer.toString(value), 100, 400, 100, 50);        // text(string, x, y, width, height)
  text("Radar screen code at luckylarry.co.uk", 540, 380, 250, 50);
  fill(0);
  rect(70,60,150,100);
  fill(0, 100, 0);
  text("Screen Key:", 100, 50, 150, 50);
  fill(0,50,0);
  rect(30,53,10,10);
  text("First sweep", 115, 70, 150, 50);
  fill(0,110,0);
  rect(30,73,10,10);
  text("Second sweep", 115, 90, 150, 50);
  fill(0,170,0);
  rect(30,93,10,10);
  text("Average", 115, 110, 150, 50);
  noFill();
  stroke(150,0,0);
  strokeWeight(1);
  ellipse(29, 113, 10, 10);
  fill(150,0,0);
  text("Motion", 115, 130, 150, 50);
}
 
/* get values from serial port */
void serialEvent (Serial myPort) {
  String xString = myPort.readStringUntil('\n');  // read the serial port until a new line
    if (xString != null) {  // if theres data in between the new lines
       xString = trim(xString); // get rid of any whitespace just in case
       String getX = xString.substring(1, xString.indexOf("V")); // get the value of the servo position
       String getV = xString.substring(xString.indexOf("V") 1, xString.length()); // get the value of the sensor reading
       degree = Integer.parseInt(getX); // set the values to variables
       value = Integer.parseInt(getV);
        /*
        If our values are outside either end of the sensors range then convert them to the max/min for a better display without the spikes
        */
        if (value > 150) {
          value = 150;
        }
        if (value < 20) {
          value = 20;
        }
       oldValue[degree] = newValue[degree]; // store the values in the arrays.
       newValue[degree] = value; 
        /* sets a counter to allow for the first 2 sweeps of the servo */
       firstRun  ;
       if (firstRun > 360) {
         firstRun = 360; // keep the value at 360
       }
  }
}

http://jarvise.atspace.cc/

julkien

avatar
Membre
Membre
salut seb

je sais pas si c'est intentionnel mais quand je lis ton tuto
je vois:
Il faut donc une platine Arduino Uno, un capteur ultrason SRF05, un servomoteur et le programme processing ([Seuls les administrateurs ont le droit de voir ce lien]), qui ressemble à IDE d'Arduino.

On câble tout ça comme ça :

[Seuls les administrateurs ont le droit de voir cette image][Seuls les administrateurs ont le droit de voir cette image]

donc en gros on peut pas allez sur le lien
@+

Seb03000

avatar
Fondateur
Fondateur
A et bien je vais réglé ça , merci de me l'avoir signalé.


_________________
Voici ma chaîne YouTube: Drone-250-Time https://www.youtube.com/channel/UC3ArL72UR4AjpaF5r-pXpSg
Voici ma chaîne YouTube: Dark-Best https://www.youtube.com/channel/UCqHLYZ9IJyfguosa8_rz9Jg
Faite passé l'information les amies , merci a vous tous.
http://jarvise.atspace.cc/

Invité


Invité
C'est vrai qu'on ne peut pas accéder aux liens mais je pense que c'est l'accès au téléchargement du Logiciel Processing en 2ème à ce que j'ai compris c'est une image du branchement.

Seb03000

avatar
Fondateur
Fondateur
Les images est les liens son accessible pour tous dorai n'avans , donc résolut.


_________________
Voici ma chaîne YouTube: Drone-250-Time https://www.youtube.com/channel/UC3ArL72UR4AjpaF5r-pXpSg
Voici ma chaîne YouTube: Dark-Best https://www.youtube.com/channel/UCqHLYZ9IJyfguosa8_rz9Jg
Faite passé l'information les amies , merci a vous tous.
http://jarvise.atspace.cc/

Contenu sponsorisé


Voir le sujet précédent Voir le sujet suivant Revenir en haut  Message [Page 1 sur 1]

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum