Go Down

Topic: contrôle arduino uno wifi/bluetooth (Read 2 times) previous topic - next topic

IBreakmosphere

Bonjour à tous,
Voilà, nous sommes en terminale S en spécialité ISN (informatique et sciences du numérique) et nous avons monté un projet avec deux de mes camarades.

Notre projet consiste à contrôler une sorte de voiture (2 moteurs qui actionnent deux chenilles) par ordinateur. Pour cela nous avons une plaquette arduino uno. Le montage électrique de cette voiture a été entièrement réalisé par nous même. Je vous décris simplement notre montage : nous avons 2 moteurs contrôlés indépendamment par 2 transistors ( le choix de celui ci nous a d'ailleurs posé pas mal de problèmes ).
On se sert de ces transistors comme interrupteurs controllés par les pins arduino.
Nous avons donc fini notre "voiture" qui ressemble a une sorte de char, ensuite nous avons téléverser notre code arduino sur la plaquette arduino, et pour finir nous avons créé une interface graphique sous processing.

voici le code arduino :
==>

const int moteur1 = 13;
const int moteur2 = 8;

void setup()
{
  // initialize the serial communication:
  Serial.begin(9600);
  // initialize the ledPin as an output:
  pinMode(moteur1, OUTPUT);
  pinMode(moteur2, OUTPUT);
}

void loop() {
  byte brightness;

// pour avancer : moteur1 on/ moteur2 on   
  if (Serial.read() == 200) {
    analogWrite(moteur1, 200);
    analogWrite(moteur2, 200);
  }
   
//pour tourner a droite (moteur1 off/ moteur2 on)
  if (Serial.read() == 190){
    analogWrite(moteur1, 0);
    analogWrite(moteur2,200);
  }

//pour tourner a gauche (moteur1 on/ moteur2 off) 
  if (Serial.read() == 180){
    analogWrite(moteur1, 200);
    analogWrite(moteur2, 0);
  }
   
// pour tout stopper (moteur1 off/ moteur2 off)   
  if (Serial.read() == 100){
    analogWrite(moteur1, 0);
    analogWrite(moteur2, 0);
  } }


Et la partie intéressante de processing :
==>
port.write(x);


Cette interface graphique représente à la fois une "modélisation" du robot et les différentes touches qui interagissent avec la plaquette arduino. Concrètement quand nous appuyons sur la touche pour faire tourner le robot vers la droite par exemple, le robot en lui même tourne à droite (chenille de gauche fonctionne de celle de droite non) et la "modélisation" aussi.

Notre projet principal qui était de contrôler un robot par ordinateur est fini. Seul inconvénient, nous sommes obligés de suivre le robot puisque la connexion se fait via le câble Usb.
Nous avons donc décidé de l'améliorer.
Notre prochaine étape serait donc de le contrôler via wifi ou Bluetooth.
C'est ici que nous avons besoin d'aide.
Jusqu'ici nous avons fouillé dans les exemples pour réussir notre projet. Mais pour la partie wifi ( de préférence ) ça se complique. Nous ne savons pas comment faire interagir les touches (sur processing) et l'arduino tout ça sans fil...

Quelqu'un serait-il nous expliquer la démarche à suivre pour pouvoir, par wifi contrôler nos pins d'arduino ?
Quel est le code correspondant pour cette "communication" ? ( arduino/processing )
Nous avons prévu d'acheter un shield wifi pour notre arduino uno, quels conseils pouvez vous nous apporter sur le choix du matériel?

En vous remerciant d'avance.
Cordialement toute l'équipe.

B@tto

Le bluetooth sera plus simple : un simple dongle USB côté PC, et sur votre char un HR-06 (- de 10euros sur ebay). Ca ne changera rien à votre prog, le tout passant aussi par liaison série.

IBreakmosphere

D'accord je te remercie.
Mais sera-t-il possible de le contrôler par la suite sur un smartphone ?

Outre le fait que nous voulons avoir un robot fonctionnel, nous avons envie d'apprendre.
Se simplifier la vie pour ne pas avoir a changer son code, n'est surement pas ce que l'on recherche. Ce que nous cherchons avant tout, c'est apprendre. On gère plutôt bien processing, mais la partie " réseau " nous est encore inconnu.

IBreakmosphere

Si quelqu'un peut nous aider aussi pour le choix du transistor...
Nous en avons essayé pas mal et à chaque fois, soit ils chauffent, soit ils claquent, soit ils ne laissent pas passer assez de courant ... Bref on a passé pas mal de temps dessus, sans trouver pour autant le transistor adéquat.
Je vous donne les caractéristiques pour déterminer le gain et donc le transistor adapté pour notre situation:
coté arduino, les pins délivrent du 5V / 40 mA  ( c'est ce qui sera brancher sur la base du transistor ).
coté moteurs, tension nominale 7.2V / 90 mA.
accu de 7.2V.

B@tto

Y'a une diode roue libre au moins ?

skywodd

Bonjour,

Si vous utiliser un module bluetooth en mode série vous pourrez contrôler votre robot depuis un ordi, un smartphone voir même d'un autre arduino avec un module bluetooth.

Sur android par exemple il y a tout une documentation et même un exemple complet pour l'utilisation du bluetooth :
http://developer.android.com/guide/topics/connectivity/bluetooth.html

Concernant le transistor il faut plusieurs informations :
- le courant requis par le moteur
- la tension requise par le moteur
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

fdufnews

Quote
coté moteurs, tension nominale 7.2V / 90 mA.

90mA c'est vraiment le courant max absorbé par le moteur (arbre bloqué).
Le plus simple c'est de donner la résistance du bobinage. Ce qui permet de calculer le courant vu au démarrage.

IBreakmosphere

Nous avions effectivement oublié de mettre une diode roue libre. Ce qui expliquerait ces nombreux transistors grillés.
Nous avons aussi rajouter une résistance entre la sortie pin d'arduino et la base du transistor ( qui après avoir cherché sur le net, semblerait fonctionné avec du 0.6V tandis que la sortie pin délivre du 5V ).
Les transistors ne semblent plus griller ( ne crions pas victoire trop tôt ... ), et la partie électronique est donc finie.

pour la partie "sans fils" nous avons commandé un kit wifi :
http://snootlab.com/arduino/178-wireless-shield-proto.html
http://snootlab.com/composants/248-module-wifi-rnxv-pour-arduino.html

Nous avons trouvé quelques topics sur internet qui utilisent le port serial en wifi et qui semblent être accessible à notre niveau.
Nous attendons donc de recevoir tout ça, et nous vous tenons au courant.

Nous vous remercions encore :)

B@tto

Faut pas câbler au pif aussi ... Et puis 0.7V c'est la tension résiduelle entre le collecteur et l'emetteur. Un transistor se commande en courant, tu peux lui envoyer du 60V si tu veux du moment que la résistance est bien choisie.

IBreakmosphere

On câble pas au pif comme tu dis. Mais il me semble normal de faire des erreurs. Nous avons aucune connaissance en électronique, on apprend sur le tas... On cherche des infos sur internet pour pouvoir apprendre.
Ne dit-on pas " on ne fait pas d'omelette sans casser des oeufs ? " ou bien " c'est en forgeant qu'on devient forgeron" ?
Peut être que nos montages sont loin d'être parfait, mais c'est en faisant des erreurs que l'on apprend. En tout cas c'est comme ça que je le vois moi.

B@tto

On est bien d'accord, tout le monde fait des erreurs, moi le premier. Maintenant "moteur cc + Arduino" sur google : les 10 premiers montages à transistor trouvés ont tous une diode de roue libre ...

IBreakmosphere

Je n'aurais jamais su à quoi servait cette diode roule libre si je n'avais pas claqué tout ces transistors.
Recopier bêtement un schéma, je pense que c'est à la portée de tous. Maintenant comprendre tout ce qui se passe au niveau des transistors, du bobinage des moteurs... ce pas écrit sur un simple schéma. Non, je maintiens, la partie intéressante c'est bien les raisonnements qu'il y a derrière. 
Plus on fait d'erreurs, plus on cherche à comprendre, plus on apprend des choses.

B@tto

Le transistor t'y comprenais rien et pourtant tu t'en ai bien servi ? On peut recopier intelligemment aussi. Heureusement qu'à chaque fois que j'ai repris des montages j'ai pas omis les composants parce que je savais pas ce que c'était ...

Et on est pas obligé de faire des erreurs pour apprendre des choses ...

skywodd


Et on est pas obligé de faire des erreurs pour apprendre des choses ...

On ne fait jamais deux fois la même erreur (en général) ;)
On est pas "obliger" de ce planter pour apprendre mais c'est une façon comme une autre d'avancer.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

IBreakmosphere

Bonjour, je suis un autre membre du groupe.
Mon ami a abandonné l'idée de poster sur le forum se faisant reprocher notre manière de travailler. Je ne develloperais pas plus le sujet.
Mais je tiens à rapeller que le forum est une plateforme d'entraide et de convivialité tout de même  :~.

Nous nous sommes beaucoup investis dans ce projet et nous sommes, à tous les participants réunis à plus d'une centaine d'heures de travail.
Si nous avons posté sur ce forum c'est que des recherches ont été effectuées, j'oserais même dire pas mal de recherches. Nous ne venons pas poster pour avoir une réponse toute cuite à travers votre aide. Nous cherchons à nous améliorer et combler nos lacunes en la matière.

Pour revenir au sujet, nous avons donc fait un circuit, avec des transistors, qui nous servent d'interrupteurs. Nous envoyons avec processing une valeur sur le port serial. La plaquette arduino le lit, si la valeur est égale à un certain nombre alors avec l'aide "analog.write" nous envoyons du courant sur nos pins. Les transistors s'ouvrent et les moteurs marchent.

1èrement le principe est-il bon pour faire communiquer arduino et processing ?
2èmement, si cette solution n'est pas la bonne ou s'il en existe donc serait-il possible de savoir laquelle pour pouvoir l'améliorer ?
3èmement, une refonte totale du programme sera t-elle nécessaire si nous passons à un module wifi (que nous avons en possession maintenant) ?
Pour finir, quelles fonctions sont disponibles pour faire communiquer arduino et processing en wifi


voilà j'ai posé toutes mes questions, on oublie pour les transo, on va continuer les recherches !
Merci d'avance à tout ceux qui liront ce post ! :)

Go Up