Aller au contenu


bypbop

Inscrit(e) (le) 16 juil. 2009
Déconnecté Dernière activité janv. 02 2020 09:01
-----

#87870 Mode automatique - Expoloration robot chenille

Posté par bypbop - 24 septembre 2017 - 11:56

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




#65416 Raspberry Pi et streaming vidéo avec le module camera

Posté par bypbop - 04 octobre 2015 - 11:58

Merci bcp oui j avais trouvé ces solutions aussi !
Mais apparement elles sont assez gourmande en ressource sur la rasp

Tiens moi au jus de ton avancement '

Cdlt,
Bypbop


#35894 Port serie c++

Posté par bypbop - 10 novembre 2011 - 10:02

Bonjour à tous, voila je continue mon petit projet robotique je m'ocuppe de la partie informatique maintenant

Voila je but sur une chose le port serie en c++ sous (microsoft visual studio 2005) j'essaye de trouver des exemples simples pour envoyer et recevoir des infos ...

Est ce que quelqu'un aurait il deja fait cela ?

pour l'instant je detecte les fleches du clavier et j'aimerais envoyer A,Q,D,G en texte via le port serie ...

Mon code C++

// testclavier.cpp : Defines the entry point for the console application.
//
#include <stdafx.h>
#include <stdio.h>
#include <conio.h>

void main(void)
{
    int ch, scan;

    do {
        ch = getch();    /* 1st getch() gets ASCII code */ 
        printf("Character is %d\n", ch);
           if (ch == 0x00 || ch == 0XE0)  { /* if extended key */ 
            scan = getch();  /* 2nd getch() gets "scan code" */ 
			if (scan==72)
			{
			printf("haut\n");
			}
		    if (scan==80)
			{
			printf("bas\n");
			}
			if (scan==75)
			{
			printf("gauche\n");
			}
			if (scan==77)
			{
			printf("droite\n");
			}
			else
			{
			
			}

			printf("\tExtended character:  scan is %d\n", scan);
        
		   
		   }
    }  while (ch != 27);    /* exit loop on ESC */ 
}

Cordialement,
bypbop