Voiture commandée avec Arduino et Processing

Fermé
Sèb3426 Messages postés 64 Date d'inscription vendredi 5 août 2011 Statut Membre Dernière intervention 29 octobre 2012 - Modifié par Sèb3426 le 29/06/2012 à 21:05
Sèb3426 Messages postés 64 Date d'inscription vendredi 5 août 2011 Statut Membre Dernière intervention 29 octobre 2012 - 3 juil. 2012 à 18:45
Bonjour,

J'essaye de faire une voiture commandée par ordinateur. En attendant d'avoir la carte Arduino, j'ai fait un plan du montage.
Voici le code du fichier Arduino :

int ComuD1 = 1; 
int ComuD2 = 2; 
int ComuG1 = 3; 
int ComuG2 = 4; 

int key = 0; 

void setup() 
{ 
  pinMode(ComuD1, OUTPUT); 
  pinMode(ComuD2, OUTPUT); 
  pinMode(ComuG1, OUTPUT); 
  pinMode(ComuG2, OUTPUT); 

  Serial.begin(9600); 
} 

void loop() 
{ 
  if (Serial.available()) 
  { 
    key = Serial.read(); 
    switch (key) 
    { 
    case 113: 
      digitalWrite(ComuD1, LOW); 
      digitalWrite(ComuG1, HIGH); 
      digitalWrite(ComuD2, LOW); 
      digitalWrite(ComuG2, LOW); 
      break; 
       
    case 100: 
      digitalWrite(ComuG1, LOW); 
      digitalWrite(ComuD1, HIGH); 
      digitalWrite(ComuD2, LOW); 
      digitalWrite(ComuG2, LOW); 
      break; 
       
    case 97: 
      digitalWrite(ComuD1, LOW); 
      digitalWrite(ComuG1, HIGH); 
      digitalWrite(ComuD2, HIGH); 
      digitalWrite(ComuG2, LOW); 
      break; 
       
    case 101: 
      digitalWrite(ComuD1, HIGH); 
      digitalWrite(ComuG1, LOW); 
      digitalWrite(ComuD2, LOW); 
      digitalWrite(ComuG2, HIGH); 
      break; 
       
    case 115: 
      digitalWrite(ComuD1, LOW); 
      digitalWrite(ComuG1, LOW); 
      digitalWrite(ComuD2, LOW); 
      digitalWrite(ComuG2, LOW); 
      break; 
       
    case 122: 
      digitalWrite(ComuD1, HIGH); 
      digitalWrite(ComuG1, HIGH); 
      digitalWrite(ComuD2, LOW); 
      digitalWrite(ComuG2, LOW); 
      break; 
       
    default: 
      Serial.print("commande ");   
      Serial.print(key);   
      Serial.println(" non reconnue."); 
      break; 
    } 
  } 
}



et le code du fichier Processing :

import processing.serial.*; 

int SendValue=0; 

Serial MySerialPort; 

void setup(){ 

  size(250,500); 
  println(Serial.list()); 
   
  MySerialPort = new Serial(this, Serial.list()[1], 9600); 
  delay (100);    

  background (255,255,255); 
  stroke(255,0,0); 
   
  MySerialPort.write(0); 
  delay (100); 
   
  PFont font; 
  textFont(loadFont("comicbd.ttf")); 
   
  text("appuyer sur z pour avancer", 15, 30); 
  text("appuyer sur s pour arrêter", 15, 60); 
  text("appuyer sur q pour tourner brusquement à gauche", 15, 90); 
  text("appuyer sur d pour tourner brusquement à droite", 15, 120); 
  text("appuyer sur a pour tourner lentement à gauche", 15, 150); 
  text("appuyer sur e pour tourner lentement à droite", 15, 180); 
   
} 

void  draw() { 

  if (keyPressed)  { 
    if (key == 'z' || key == 'Z')  { 
      SendValue = 122; 
    } 
    else if (key == 's' || key == 'S')  { 
      SendValue = 115; 
    } 
    else if (key == 'q' || key == 'Q')  { 
      SendValue = 113; 
    } 
    else if (key == 'd' || key == 'D')  { 
      SendValue = 100; 
    } 
    else if (key == 'a' || key == 'A')  { 
      SendValue = 97; 
    } 
    else if (key == 'e' || key == 'E')  { 
      SendValue = 115; 
    } 
  } 
   
  MySerialPort.write(SendValue); 
}



Est-ce que tout cela est correct ?

Merci d'avance
Sèb

2 réponses

p3t3r42 Messages postés 74 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 2 février 2014 28
29 juin 2012 à 22:44
Bonjour,

Tout d'abord, je ne pense pas que brancher les moteurs directement sur les sorties soit une bonne idée, en tout cas il faut faire attention à ce que le courant de sortie ne dépasse pas le maximum admissible (à voire le site en fonction de la carte que tu aura, arduino uno et mega: 40mA).

Une petite erreur dans le code processing:
les touches 's' et 'e' ont la même "SendValue", je ne crois pas que ça corresponde à ce que tu veux faire.

Là je me trompe peut-être, mais je ne crois pas que activer deux sorties pour un moteur le fasse tourner plus vite...
0
p3t3r42 Messages postés 74 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 2 février 2014 28
29 juin 2012 à 22:50
Par contre je n'ai pas compris ce qu'était exactement le code processing. Il s'execute sur l'ordinateur ? Il est compiler par quoi ? Il utilise quel interface (console/graphique/autre) ?
0
Sèb3426 Messages postés 64 Date d'inscription vendredi 5 août 2011 Statut Membre Dernière intervention 29 octobre 2012 8
30 juin 2012 à 12:16
Il y a bien une erreur dans le code processing. Par contre, si tu regardes bien, jamais 2 sorties du même moteur ne sont activées en même temps. En fait, cela permet de faire, soit un virage brusque (en arrêtant un des moteurs) soit un virage plus "souple" (en ne faisant que ralentir un des moteurs à l'aide d'une résistance). Quant à l'alimentation des moteurs, actuellement, c'est du 3V (2 piles LR06).
0
Sèb3426 Messages postés 64 Date d'inscription vendredi 5 août 2011 Statut Membre Dernière intervention 29 octobre 2012 8
30 juin 2012 à 12:18
Le code processing s'exécute bien sur l'ordinateur et utilise une fenêtre comme interface.
0
Sèb3426 Messages postés 64 Date d'inscription vendredi 5 août 2011 Statut Membre Dernière intervention 29 octobre 2012 8
1 juil. 2012 à 11:02
Comment la carte Arduino peut-elle contrôler les moteurs sans pour autant fournir leur alimentation ?
0
p3t3r42 Messages postés 74 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 2 février 2014 28
3 juil. 2012 à 09:53
Il faut utiliser des transistors...
0
Sèb3426 Messages postés 64 Date d'inscription vendredi 5 août 2011 Statut Membre Dernière intervention 29 octobre 2012 8
3 juil. 2012 à 18:45
Je crois que je vais opter pour le rotoshield de snootlab. Merci de ton aide :)
0