Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
projets:conception_d_un_robot_a_base_d_arduino [2017/06/11 03:42] doudoulolita |
projets:conception_d_un_robot_a_base_d_arduino [2018/02/18 15:45] (Version actuelle) thierry_dasse |
||
---|---|---|---|
Ligne 10: | Ligne 10: | ||
liens: | liens: | ||
tags: | tags: | ||
- | usager:thierry_dasse doudoulolita ivan emmanuel sarah | + | usager: "le contenu est le fruit du travail des participants" |
licence:cc-by-sa | licence:cc-by-sa | ||
}}} | }}} | ||
Ligne 21: | Ligne 21: | ||
<!-- Présentez ici la phase de réflexion et de conception de votre projet, vos choix, etc. ... --> | <!-- Présentez ici la phase de réflexion et de conception de votre projet, vos choix, etc. ... --> | ||
+ | |||
+ | ==== Séance du samedi 17 février 2018 ==== | ||
+ | |||
+ | Pour cette séance du samedi robots, nous nous attaquons à la programmation d'une petite librairie de gestion de la pince avec pricipalement deux commandes : ouvrir la pince et fermer la pince. Pour cette dernière commande, l'activation du bouton poussoir servira de fin de course et arrêtera la fermeture. | ||
+ | |||
+ | Schéma conceptuel de la pince | ||
+ | |||
+ | {{:projets:conception_d_un_robot_a_base_d_arduino:pince.png?200|Schéma conceptuel de la pince}} | ||
+ | |||
+ | |||
+ | Schéma de montage du prototype pour tester le programme | ||
+ | |||
+ | {{:projets:conception_d_un_robot_a_base_d_arduino:pince_robot_bb.png?200|Schéma de montage du prototype}} | ||
+ | |||
+ | |||
+ | |||
+ | Pour le programme, nous avons réalisé une librairie contenant une classe TactilServo fille de la classe Servo | ||
+ | |||
+ | Fichier tactilservo.h à insérer dans le répertoire Arduino/librairies/TactilServo | ||
+ | |||
+ | <code c++> | ||
+ | |||
+ | #ifndef tactilservo_h | ||
+ | #define tactilservo_h | ||
+ | |||
+ | #include "Arduino.h" | ||
+ | #include <Servo.h> | ||
+ | |||
+ | class TactilServo : public Servo { | ||
+ | public: | ||
+ | void init(int servoPin, int switchPin); | ||
+ | void setOpenPos(int pos); | ||
+ | void setClosePos(int pos); | ||
+ | void setAngleSpeed(int s); | ||
+ | void open(); | ||
+ | int close(); | ||
+ | |||
+ | private: | ||
+ | int servoPin, switchPin; | ||
+ | int openPos,closePos,angleDelay; | ||
+ | }; | ||
+ | |||
+ | #endif | ||
+ | |||
+ | </code> | ||
+ | |||
+ | |||
+ | Fichier tactilservo.cpp à insérer dans le répertoire Arduino/librairies/TactilServo | ||
+ | |||
+ | Pendant la séance du 17 février, nous n'avons pas eu le temps d'implémenter toutes les méthodes. Il nous faudra finir. | ||
+ | |||
+ | <code c++> | ||
+ | |||
+ | #include "tactilservo.h" | ||
+ | |||
+ | void TactilServo::init(int servoPin, int switchPin) { | ||
+ | this->servoPin = servoPin; | ||
+ | this->switchPin = switchPin; | ||
+ | this->openPos = 180; | ||
+ | this->closePos = 0; | ||
+ | this->angleDelay = 15; | ||
+ | this->attach(this->servoPin); | ||
+ | pinMode(this->switchPin,INPUT); | ||
+ | digitalWrite(this->switchPin,HIGH); | ||
+ | } | ||
+ | |||
+ | void TactilServo::setOpenPos(int pos) { | ||
+ | // A faire | ||
+ | } | ||
+ | |||
+ | void TactilServo::setClosePos(int pos) { | ||
+ | // A faire | ||
+ | } | ||
+ | |||
+ | void TactilServo::setAngleSpeed(int s) { | ||
+ | // A faire | ||
+ | } | ||
+ | |||
+ | void TactilServo::open() { | ||
+ | this->write(this->openPos); | ||
+ | } | ||
+ | |||
+ | int TactilServo::close() { | ||
+ | int pos = this->read(); | ||
+ | while ((digitalRead(this->switchPin) != 0) && (pos > this->closePos)) { | ||
+ | pos -= 1; | ||
+ | this->write(pos); | ||
+ | delay(this->angleDelay); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | Programme de test testpince.ino | ||
+ | |||
+ | <code c++> | ||
+ | #include "tactilservo.h" | ||
+ | |||
+ | TactilServo mapince; | ||
+ | |||
+ | void setup() { | ||
+ | mapince.init(3,2); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | mapince.open(); | ||
+ | delay(2000); | ||
+ | mapince.close(); //si on appuie sur le poussoir, la pince s'arrête | ||
+ | delay(5000); | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | |||
+ | ==== Séance du samedi 20 janvier 2018 ==== | ||
+ | |||
+ | Aujourd'hui, on a décidé de travailler sur la conception/ modélisation de la pince. Elle sera constitué d'un servo moteur, d'un capteur de pression/contact et de pièces d'assemblage que l'on réalisera en impression 3D. | ||
+ | |||
+ | Nous avons choisi le servo moteur Hitec HS 422 (couple de ~3.5Kg.cm) et un bouton poussoir comme capteur de contact. | ||
+ | |||
+ | La modélisation du moteur est disponible sur GrabCad ([[https://grabcad.com/]]). Il faut se créer un compte pour pouvoir télécharger(gratuit). | ||
+ | |||
+ | Nous avons récupéré un fichier .step qui peut s'ouvrir sur Freecad. | ||
+ | {{:projets:conception_d_un_robot_a_base_d_arduino:hs-422.step|Moteur Hitec Hs 422}} | ||
+ | |||
+ | Sources d'inspiration pour la pince : | ||
+ | |||
+ | {{:projets:conception_d_un_robot_a_base_d_arduino:pince_ecrevisse.jpg?100 |}} | ||
+ | {{:projets:conception_d_un_robot_a_base_d_arduino:pince_robot.jpg?100 |}} | ||
+ | |||
+ | |||
+ | ==== Séance du samedi 16 décembre 2017 ==== | ||
+ | |||
+ | Aujourd'hui on a testé fritzing, un logiciel qui permet de dessiner un circuit sur breadboard (idéal pour la documentation) et même d'aller jusqu'à | ||
+ | la conception du circuit imprimé. | ||
+ | |||
+ | === Circuit on off === | ||
+ | |||
+ | L'objectif est de faire un circuit contenant une led et un bouton relié à un arduino qui permettra de changer l'état d'un système entre on et off. | ||
+ | Au départ, l'état est off et à chaque pression du bouton poussoir on inverse l'état entre off(false) et on(true). L'état est rendu par la led. | ||
+ | |||
+ | === Le montage sur breadboard === | ||
+ | |||
+ | {{:projets:conception_d_un_robot_a_base_d_arduino:on_off_bb.png?100 |}} | ||
+ | |||
+ | === Le circuit imprimé === | ||
+ | |||
+ | {{:projets:conception_d_un_robot_a_base_d_arduino:on_off_circuit_imprime.png?100 |}} | ||
+ | {{:projets:conception_d_un_robot_a_base_d_arduino:on_off_pistes.svg|}} | ||
+ | |||
+ | === Le programme === | ||
+ | |||
+ | le fichier onofflib.h à placer dans le repertoire libraries du dossier Arduino | ||
+ | <code c++> | ||
+ | /* | ||
+ | onofflib.h - Library for button | ||
+ | Created by samedi robot, dec 16 2017 | ||
+ | Released into the public domain. | ||
+ | */ | ||
+ | #ifndef onofflib_h | ||
+ | #define onofflib_h | ||
+ | |||
+ | #include "Arduino.h" | ||
+ | |||
+ | class OnOffButton { | ||
+ | public: | ||
+ | OnOffButton(int buttonPin,int ledPin); | ||
+ | bool inspect(); | ||
+ | bool isOn(); | ||
+ | |||
+ | private: | ||
+ | int bpin,lpin; | ||
+ | bool on; | ||
+ | int previous; | ||
+ | }; | ||
+ | |||
+ | #endif | ||
+ | </code> | ||
+ | |||
+ | le fichier onofflib.cpp à placer dans le repertoire libraries du dossier Arduino | ||
+ | <code c++> | ||
+ | /* | ||
+ | onofflib.h - Library for button | ||
+ | Created by samedi robot, dec 16 2017 | ||
+ | Released into the public domain. | ||
+ | */ | ||
+ | |||
+ | #include "Arduino.h" | ||
+ | #include "onofflib.h" | ||
+ | |||
+ | OnOffButton::OnOffButton(int buttonPin,int ledPin) { | ||
+ | bpin = buttonPin; | ||
+ | lpin = ledPin; | ||
+ | pinMode(bpin,INPUT); | ||
+ | digitalWrite(bpin,HIGH); //active la resistance pullup | ||
+ | pinMode(lpin,OUTPUT); | ||
+ | on = false; | ||
+ | digitalWrite(lpin,LOW); | ||
+ | previous = digitalRead(bpin); // test bouton | ||
+ | } | ||
+ | |||
+ | bool OnOffButton::inspect() { | ||
+ | int result = digitalRead(bpin); | ||
+ | if (result == 0 && previous) { | ||
+ | on = !on; | ||
+ | digitalWrite(lpin,on); | ||
+ | } | ||
+ | previous = result; | ||
+ | return on; | ||
+ | } | ||
+ | |||
+ | bool OnOffButton::isOn() { | ||
+ | return on; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Le programme de test | ||
+ | |||
+ | <code c++> | ||
+ | /* | ||
+ | * Programme de test de la librairie de gestion de bouton on off | ||
+ | */ | ||
+ | |||
+ | #include <onofflib.h> | ||
+ | |||
+ | OnOffButton button(3,7); | ||
+ | |||
+ | |||
+ | void setup() { | ||
+ | // put your setup code here, to run once: | ||
+ | Serial.begin(115600); | ||
+ | Serial.println("onofflib !!!"); | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | void loop() { | ||
+ | // put your main code here, to run repeatedly: | ||
+ | bool state = button.inspect(); | ||
+ | Serial.println(state); | ||
+ | delay(20); | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | |||
+ | |||
==== Séance du samedi 17 décembre 2016 ==== | ==== Séance du samedi 17 décembre 2016 ==== | ||
Ligne 102: | Ligne 348: | ||
[[https://www.arduino.cc/en/Hacking/LibraryTutorial]] | [[https://www.arduino.cc/en/Hacking/LibraryTutorial]] | ||
+ | |||
+ | |||
+ | === Servomoteur commandé par bouton poussoir === | ||
+ | //Séance du samedi 18 novembre 2017// | ||
+ | |||
+ | {{:projets:conception_d_un_robot_a_base_d_arduino:20171118_160710.jpg?200|}} | ||
+ | |||
+ | <code C++> | ||
+ | |||
+ | /* | ||
+ | Controlling a servo position using a potentiometer (variable resistor) | ||
+ | by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> | ||
+ | |||
+ | modified on 8 Nov 2013 | ||
+ | by Scott Fitzgerald | ||
+ | http://www.arduino.cc/en/Tutorial/Knob | ||
+ | */ | ||
+ | |||
+ | #include <Servo.h> // librairie pour le servomoteur | ||
+ | |||
+ | Servo myservo; // crée l'objet myservo | ||
+ | const int pushbutton = 2; // numéro de la broche sur laquelle le bouton poussoir est connecté | ||
+ | char inputButtonState; | ||
+ | |||
+ | void setup() { | ||
+ | myservo.attach(3); // attache l'objet servomoteur à la pin 3 | ||
+ | myservo.write(0); // initialisation de la position du servo | ||
+ | pinMode(pushbutton,INPUT); // la bouton poussoir est une entrée | ||
+ | digitalWrite(pushbutton, HIGH); // envoie du courant dans le bouton poussoir | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | inputButtonState = digitalRead(pushbutton); // lit l'état du bouton poussoir | ||
+ | |||
+ | if (inputButtonState == HIGH) // si le bouton poussoir n'est pas pressé | ||
+ | { | ||
+ | myservo.write(0); | ||
+ | } | ||
+ | else // sinon (le bouton est appuyé) | ||
+ | { | ||
+ | myservo.write(90); // met le servomoteur à 90° | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </code> | ||
==== récepteur infrarouge ==== | ==== récepteur infrarouge ==== |