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/12/16 16:07] thierry_dasse |
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 22: | Ligne 22: | ||
<!-- 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 ==== | ||
- | ==== Séance du samedi 15 décembre 2017 ==== | + | 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'à | 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é. | 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> | ||