Aller au contenu


Top Posters

Newest Members

  • mossePhoto
    1. mosse

    Joined: hier, 17:34

  • hubertalPhoto
    2. hubertal

    Joined: sept. 22 2017 01:21

  • mesbaaPhoto
    3. mesbaa

    Joined: sept. 19 2017 10:35

  • HugobigborisPhoto
    4. Hugobigboris

    Joined: sept. 19 2017 04:00

  • AngélaPhoto
    5. Angéla

    Joined: sept. 18 2017 06:20

Recently Added Posts

 Photo

Mode automatique - Expoloration robot chenille

hier, 11:56

Posted by bypbop in Programmation

Bonjour à tous,

 

Après une longue absence je reprends mon projet de robot à chenille.

Je viens de terminer la lecture des capteurs ultrasonic à intervalle régulier et j'aimerais commencer le mode automatique ( robot qui se déplace tout seul et dès qu'il rencontre un obstacle change de direction )

 

Pour l'instant j'ai fait un test avec mon code actuel c'est le mode 1.

 

 

Pourriez vous me montrer des exemples de code pour que je puisse m'en inspirer et  paramétrer la distance et par exemple le temps de pause entre les changements de direction ?

#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Ultrasonic.h>

LiquidCrystal lcd(52, 50, 48, 46, 44, 42);


#define ONE_WIRE_BUS 22
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature ds18b20(&oneWire);

#define T1  24
#define E1  26
#define T2  23
#define E2  25
#define T4  30
#define E4  31


Ultrasonic ultrasonic1(T1, E1);
Ultrasonic ultrasonic2(T2, E2);
Ultrasonic ultrasonic4(T4, E4);


int Sequence[][3] = {
{255, 0  ,    0 },
{0,   255  ,  0 , },
{0,   0  ,    255 },
{255, 255  ,    0 },
{0,   255  ,  255 , },
{255,   0  ,    255 },
{255,   255  ,    255 },
};



// Moteur A
int dir1PinA = 13;
int dir2PinA = 12;

// Moteur B
int dir1PinB = 11;
int dir2PinB = 8;

// Vitesse Moteur
int speedPinA = 10;
int speedPinB = 9;

int duree = 0;


char incomingByte;
int mode;

long timerefreshUltrason = 200;
long previousMillisUltrason = 0;

long timedatasend = 1000;
long previousMillis = 0;

long timerefreshLCD = 1000;
long previousMillisLCD = 0;

long timerefreshPIR = 250;
long previousMillisPIR = 0;

long timerefreshRGB = 1000;
long previousMillisRGB = 0;

long previousMillisBuzzer = 0;
int buzzerPin = 2;

int beepdone = 0;

long timerefreshLED = 250;
long previousMillisLED = 0;

int ledcamerablink = 0;
int ledCameraState = LOW;
int ledCameraPin = 28;
int capteurIrPin = 27;
int laserPin = 29;
int laserState = LOW;
int capteurIr = 0;

int BluePin = 3;
int GreenPin = 4;
int RedPin = 5;

int pwmred= 0;
int pwmblue = 0;
int pwmgreen = 0;

String motorA = "";
String motorB = "";
int speedA = 0;
int speedB = 0;

float U1 = 0;
float U2 = 0;
float U3 = 0;
float U4 = 0;


int i=0;
int distanceU2 = 10;

void setup() {
  ds18b20.begin();
  lcd.begin(16, 2);
  Serial.begin(115200);
  lcd.print("KBOT");

  pinMode(dir1PinA, OUTPUT);
  pinMode(dir2PinA, OUTPUT);
  pinMode(dir1PinB, OUTPUT);
  pinMode(dir2PinB, OUTPUT);
  pinMode(speedPinB, OUTPUT);
  pinMode(speedPinA, OUTPUT);
  
  pinMode(ledCameraPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(laserPin, OUTPUT);
  pinMode(capteurIrPin, INPUT);

  pinMode(BluePin, OUTPUT);
  pinMode(GreenPin, OUTPUT);
  pinMode(RedPin, OUTPUT);

  
}

float temperature(){
ds18b20.requestTemperatures();
return ds18b20.getTempCByIndex(0);
}

float ultrason(){
long microsec0 = ultrasonic1.timing(); 
float cmMsec0 = ultrasonic1.convert(microsec0, Ultrasonic::CM); 
long microsec1 = ultrasonic2.timing(); 
float cmMsec1 = ultrasonic2.convert(microsec1, Ultrasonic::CM);
long microsec4 = ultrasonic4.timing(); 
float cmMsec4 = ultrasonic4.convert(microsec4, Ultrasonic::CM);
U1 = cmMsec0;
U2 = cmMsec1;
U4 = cmMsec4;
return U1,U2,U4;
}

//void stopbeep(int timebuzzerOn){
//long currentMillis = millis();
//
//    if(currentMillis - previousMillisBuzzer > timebuzzerOn) {
//        previousMillisBuzzer = currentMillis;
//        analogWrite(buzzerPin, 0);
//
//    }
//}

void beep (int buzzerpwm, int timebuzzerOn)
{
  if (beepdone == 1){
  analogWrite(buzzerPin, buzzerpwm);
  int duree = timebuzzerOn;
  long previousMillisBuzzer = millis();
  beepdone = 0;
  }
  
  }

void stopBeepAtEnd () {
long  currentMillis = millis();
if(currentMillis - previousMillisBuzzer > duree) {
    previousMillisBuzzer = currentMillis;
    analogWrite(buzzerPin, 0);
    beepdone = 1;
  }
}

void rgbled (int pwmred, int pwmgreen, int pwmblue)
{
analogWrite(RedPin,pwmred);
analogWrite(GreenPin,pwmgreen);
analogWrite(BluePin,pwmblue); 
  }

void motor (String motorA, int speedA, String motorB, int speedB)
{
      if (motorA == "forward"){
            analogWrite(speedPinA, speedA);
            digitalWrite(dir1PinA, HIGH);
            digitalWrite(dir2PinA, LOW);
              
      }
      else if (motorA == "backward"){
      analogWrite(speedPinA, speedA);
      digitalWrite(dir1PinA, LOW);
      digitalWrite(dir2PinA, HIGH);  
      }
      else{
        }
      if (motorB == "forward"){
            analogWrite(speedPinB, speedB);
            digitalWrite(dir1PinB, LOW);
            digitalWrite(dir2PinB, HIGH);    
      }
      else if (motorB == "backward"){
      
      analogWrite(speedPinB, speedB);
      digitalWrite(dir1PinB, HIGH);
      digitalWrite(dir2PinB, LOW); 
      }
      else{
        }
    }

void loop() 
{

  if (Serial.available() > 0) {
  lcd.setCursor(0, 0);
  lcd.print("KBOT CONNECTED"); 
  incomingByte = Serial.read();
  //Serial.println(incomingByte, DEC);

  switch (incomingByte)
    {
    case 'L':
      ledcamerablink = 1;
      break;
    case 'Z':
      ledcamerablink = 0;
      digitalWrite(ledCameraPin, LOW);
      previousMillisLED = 0;
      break;
    case 'T':
      ledcamerablink = 0;
      digitalWrite(ledCameraPin, HIGH);
      previousMillisLED = 0;
      break;
    case 'Q':
      digitalWrite(laserPin, HIGH);
      beep(255,500);
      break;
    case 'S':
      digitalWrite(laserPin, LOW);
      
      break;
    case 'A':
      motor("forward",60, "forward",60);
      //beep(255, 2000);
      break;
    case 'B':
      digitalWrite(dir1PinA, LOW);
      digitalWrite(dir2PinA, LOW);
      digitalWrite(dir1PinB, LOW);
      digitalWrite(dir2PinB, LOW);
      break;
    case 'C':
      motor("backward",80, "backward",80);
      break;
    case 'D':
      motor("backward",20, "forward",20);
      break;
    case 'G':
      motor("forward",20, "backward",20);
      break;

      case 'H':
      Serial.println("Mode automatique");
      mode = 1;
      break;
    default:
      Serial.print("commande : ");
      Serial.print(incomingByte);
      break;
    
      }
    
 
 }

if (mode == 1){
      if ( U2 > distanceU2)
      {
      rgbled(0,255,0);
      motor("forward",70, "forward",70);
        } 
      else{
      rgbled(255,0,0);
      motor("backward",70, "backward",70);
      }
}

// Fréquence de rafraichissement des capteurs ultrasons
long currentMillis = millis();
if(currentMillis - previousMillisUltrason > timerefreshUltrason) {
previousMillisUltrason = currentMillis;
ultrason();
}

 currentMillis = millis();
if(currentMillis - previousMillis > timedatasend) {
    previousMillis = currentMillis;  
    //float sondetemperature = temperature();
    float sondetemperature = 35;
    
    Serial.println(sondetemperature);
    Serial.print("U1 : ");
    Serial.println(U1);
    Serial.print("U2 : ");
    Serial.println(U2);
    Serial.print("U4 : ");
    Serial.println(U4);
    Serial.println(capteurIr);
    Serial.println(timerefreshLED);
    }


currentMillis = millis();
if(currentMillis - previousMillisLCD > timerefreshLCD) {
    previousMillisLCD = currentMillis;
    lcd.clear();
    lcd.print("U1 :");  
    lcd.print(U1);
    lcd.setCursor(0, 2) ;
    lcd.print("U2 :");  
    lcd.print(U2);
    lcd.print(" U4 :");
    lcd.print(U4);
    }

currentMillis = millis();
if (ledcamerablink == HIGH){
if(currentMillis - previousMillisLED > timerefreshLED) {
    previousMillisLED = currentMillis;
    if (ledCameraState == LOW) {
      ledCameraState = HIGH;
    } else {
      ledCameraState = LOW;
    }

    digitalWrite(ledCameraPin, ledCameraState);
}
}

//currentMillis = millis();
//if(currentMillis - previousMillisPIR > timerefreshPIR) {
//    previousMillisPIR = currentMillis;
//    capteurIr = digitalRead(capteurIrPin);
//    if (capteurIr==1){//rgbled(255,0,0);
//    
//    }
//    else {
//rgbled(0,255,0);
//      }
//    }

currentMillis = millis();
if(currentMillis - previousMillisRGB > timerefreshRGB) {
  previousMillisRGB = currentMillis;
  rgbled(Sequence[i][0],Sequence[i][1],Sequence[i][2]);
  i++;
  if (i> 6){i=0;}
}
  
stopBeepAtEnd ();
}

    
 


Bien à vous

Bypbop

  159 Views · 9 Replies ( Last reply by Mike118 )

 Photo

7 robots Raspi d'occasion

hier, 20:16

Le professeur Brice Canvel, du Collège Sainte Croix à Fribourg Suisse,
utilise des robots pour son enseignement depuis plusieurs années,
achetés à titre privé. Il s'est configuré 7 Xbot avec raspberry pi A.
Cette configuration fonctionne bien mais est un peu fragile pour des élèves (cable
facilement débranchés entre autre). Photo ce-dessous et début
de doc sous
https://docs.google...._Pyh4vIl2h9dQO8
Son école l'oblige à utiliser des robots Lego Minstorms EV3.
Il aimerait revendre à bas prix ses 7 robots (70 Euros piece plus port,
ou 400 Euros pour le lot, port compris (donc 59 Euros par robot avec
tout celà: Xbot, carte Raspberry, Hat, power pack, câbles). Prix à discuter pour le lot complet.
Contactez directement Brice Canvel <brice.canvel@gmail.com>

 

 

  52 Views · 1 Replies ( Last reply by levend )

 Photo

Toulouse Robot Race 2017

06 juin 2017

Posted by Thot in Annonces

Bonjour,

 

après la premiere édition de 2017, on remet ça pour le samedi 23 septembre 2017, 110 mètres robots.

La page d'inscription ainsi que le réglement sont ici :

http://www.toulouse-robot-race.org/ 

 

Cette année je vais tout faire pour y participer :-)

  2 241 Views · 62 Replies ( Last reply by Path )


Statistiques de la communauté

Total des messages
82 143
Total des membres
8 181
Dernier membre
mosse 
Record de connectés simultanés
784
22 mai 2015

242 utilisateur(s) actif(s) (durant les 30 dernières minutes)
1 membre(s), 241 invité(s), 0 utilisateur(s) anonyme(s) | Afficher par : dernier clic ou nom du membre

Mike118