Outils pour utilisateurs

Outils du site


robots:tondobot:tondobot

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
robots:tondobot:tondobot [09/2018] – [HW] fredrobots:tondobot:tondobot [02/2019] (Version actuelle) – [a vide] fred
Ligne 1: Ligne 1:
 +====== meca ======
 +{{:robots:tondobot:demontee.jpg?600|}}
 +{{:robots:tondobot:arriere0.jpg?600|}}
 +{{:robots:tondobot:arriere_monte.jpg?600|}}
 +{{:robots:tondobot:face_monte.jpg?600|}}
 +
 +===== moteur d"essuie glace =====
 +==== a vide ====
 +  * 13v      0,9 amp      58t/mn
 +  * 6v       0,6 amp      16t/mn 
 +
 +test sur table a vide avec moteur de laguna: 
 +  * petite vitesse 17 tours pour 30s
 +  * grande vitesse 32 tours pour 30s
 ====== HW ====== ====== HW ======
   * https://www.ebay.fr/itm/Nano-V3-0-ATmega328P-with-USB-Cable-Compatible-for-Arduino-CH340G-Deutsche-Post/232271829785?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649   * https://www.ebay.fr/itm/Nano-V3-0-ATmega328P-with-USB-Cable-Compatible-for-Arduino-CH340G-Deutsche-Post/232271829785?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2057872.m2749.l2649
Ligne 9: Ligne 23:
 ===== Pinout Arduino Nano-V3 ===== ===== Pinout Arduino Nano-V3 =====
  
-^** **^**PCINT**^**PWM Timer**^** **^**fnc**^** **^**fnc**^**fnc**^**PCINT**^** **^+^** **^  **PCINT**   **PWM Timer**   **fnc**   **fnc**  ^** **^  **fnc**   **fnc**   **PCINT**  ^** **^
 | |  PCINT2  |      TXD  |  1  ^** **|  VIN  |     | | | | |  PCINT2  |      TXD  |  1  ^** **|  VIN  |     | | |
 | |  PCINT2  |      RXD  |  0  ^** **|  GND  |         | | | |  PCINT2  |      RXD  |  0  ^** **|  GND  |         | |
Ligne 24: Ligne 38:
 |Mot_G_PWM|  PCINT0  |  PWM_T1  |  /SS  |  10  ^** **|  Aref  |         | | |Mot_G_PWM|  PCINT0  |  PWM_T1  |  /SS  |  10  ^** **|  Aref  |         | |
 |Mot_G_L_EN|  PCINT0  |  PWM_T2  |  MOSI  |  11  ^** **|  3v3  |         | | |Mot_G_L_EN|  PCINT0  |  PWM_T2  |  MOSI  |  11  ^** **|  3v3  |         | |
-|Mot_G_R_EN|  PCINT0  |      MISO  |  12  ^** **|  13  |  LED /SCK  |  PCINT0  LED_PCB  |+|Mot_G_R_EN|  PCINT0  |      MISO  |  12  ^** **|  13  |  LED /SCK  |  PCINT0  |LED_PCB  | 
 + 
 + 
 +==== Module BTS7960B ==== 
 +^  A. Nano  ^  FNC  ^  n  ^  n  ^  FNC  ^  A. Nano  | 
 +|  Mot_X_R_EN  |  RPWM  ^  1  ^  2  |  LPWM  |  Mot_X_L_EN 
 +|  Mot_X_PWM  |  R_EN  ^  3  ^  4  |  L_EN  |  Mot_X_PWM 
 +|  Mot_X_IS_R  |  R_IS  ^  5  ^  6  |  L_IS  |  Mot_X_IS_L 
 +|  VCC  |  VCC  ^  7  ^  8  |  GND  |  GND  | 
 + 
  
 ====== SW ====== ====== SW ======
Ligne 143: Ligne 167:
  
 ===== RC link ===== ===== RC link =====
 +  * https://www.arduino.cc/reference/en/#functions
 +  * https://create.arduino.cc/editor/
  
 <code C> <code C>
 /* /*
 +Version avec 1 PWM et 2 enable par moteur
 */ */
-#define PIN_SERVO_D +#define PIN_SERVO_GD 
-#define PIN_SERVO_G 3 +#define PIN_SERVO_AVAR 3
-#define PIN_MOT_D_R_PWM 5 +
-#define PIN_MOT_D_L_PWM 6 +
-#define PIN_MOT_G_R_PWM 9 +
-#define PIN_MOT_G_L_PWM 10 +
-#define PIN_MOT_D_R_IS A7 +
-#define PIN_MOT_D_L_IS A6 +
-#define PIN_MOT_G_R_IS A1 +
-#define PIN_MOT_G_L_IS A0+
  
 +#define PIN_MOT_D_PWM 9
 +#define PIN_MOT_D_L_EN 7    //sens arriere
 +#define PIN_MOT_D_R_EN 8    //sens avant
  
-volatile boolean SERVO_D_New_pulse_IT,SERVO_G_New_pulse_IT+#define PIN_MOT_G_PWM 10 
-volatile unsigned long SERVO_D_Pulse_micros_IT=0,SERVO_G_Pulse_micros_IT=0; +#define PIN_MOT_G_L_EN 11    //sens arriere 
-unsigned long SERVO_D_Pulse_micros=0,SERVO_G_Pulse_micros=0;+#define PIN_MOT_G_R_EN 12    //sens avant 
 + 
 +#define PIN_MOT_D_L_IS A7     //sens arriere 
 +#define PIN_MOT_G_L_IS A6     //sens arriere 
 +#define PIN_MOT_D_R_IS A2     //sens avant 
 +#define PIN_MOT_G_R_IS A3     //sens avant 
 + 
 + 
 +volatile boolean SERVO_GD_New_pulse_IT,SERVO_AVAR_New_pulse_IT
 +volatile unsigned long SERVO_GD_Pulse_micros_IT=0,SERVO_AVAR_Pulse_micros_IT=0; 
 +unsigned long SERVO_GD_Pulse_micros=0,SERVO_AVAR_Pulse_micros=0;
 unsigned long currentMillis; unsigned long currentMillis;
 unsigned long previousMillis = 0; unsigned long previousMillis = 0;
-byte LED_cnt_u8+unsigned int LED_cnt_u16
-int MOT_D_CMD_s16,MOT_G_CMD_s16;+int MOT_D_CMD_s16,MOT_G_CMD_s16,CMD_AVAR,CMD_GD;
  
 void update_MOT_D_PWMs(int cmd) void update_MOT_D_PWMs(int cmd)
 { {
-  if (cmd>0)+  if (cmd==0)
   {   {
-      analogWrite(PIN_MOT_D_R_PWMcmd); +     analogWrite(PIN_MOT_D_PWM0); 
-      analogWrite(PIN_MOT_D_L_PWM, 0);+     digitalWrite(PIN_MOT_D_L_ENLOW); 
 +     digitalWrite(PIN_MOT_D_R_EN, LOW); 
 +  } 
 +    else if (cmd>0
 +  { 
 +     analogWrite(PIN_MOT_D_PWM, cmd); 
 +     digitalWrite(PIN_MOT_D_L_EN, LOW); 
 +     digitalWrite(PIN_MOT_D_R_EN, HIGH);
   }   }
   else   else
   {   {
-      cmd = abs(cmd); +     analogWrite(PIN_MOT_D_PWM, abs(cmd)); 
-      analogWrite(PIN_MOT_D_R_PWM0); +     digitalWrite(PIN_MOT_D_R_ENLOW); 
-      analogWrite(PIN_MOT_D_L_PWMcmd);+     digitalWrite(PIN_MOT_D_L_ENHIGH);
   }   }
 } }
  
 void update_MOT_G_PWMs(int cmd) void update_MOT_G_PWMs(int cmd)
-+{  
-  if (cmd>0)+  if (cmd==0) 
 +  { 
 +     analogWrite(PIN_MOT_G_PWM, 0); 
 +     digitalWrite(PIN_MOT_G_L_EN, LOW); 
 +     digitalWrite(PIN_MOT_G_R_EN, LOW); 
 +  } 
 +    else if (cmd>0)
   {   {
-      analogWrite(PIN_MOT_G_R_PWM, cmd); +     analogWrite(PIN_MOT_G_PWM, cmd); 
-      analogWrite(PIN_MOT_G_L_PWM0);+     digitalWrite(PIN_MOT_G_L_EN, LOW); 
 +     digitalWrite(PIN_MOT_G_R_ENHIGH);
   }   }
   else   else
   {   {
-      cmd = abs(cmd); +     analogWrite(PIN_MOT_G_PWM, abs(cmd)); 
-      analogWrite(PIN_MOT_G_R_PWM0); +     digitalWrite(PIN_MOT_G_R_ENLOW); 
-      analogWrite(PIN_MOT_G_L_PWMcmd);+     digitalWrite(PIN_MOT_G_L_ENHIGH);
   }   }
 } }
Ligne 201: Ligne 246:
   pinMode(LED_BUILTIN, OUTPUT);   pinMode(LED_BUILTIN, OUTPUT);
      
-  pinMode(PIN_SERVO_D, INPUT_PULLUP); +  pinMode(PIN_SERVO_GD, INPUT_PULLUP); 
-  attachInterrupt(digitalPinToInterrupt(PIN_SERVO_D), SERVO_D_change_CB, CHANGE);+  attachInterrupt(digitalPinToInterrupt(PIN_SERVO_GD), SERVO_GD_change_CB, CHANGE);
      
-  pinMode(PIN_SERVO_G, INPUT_PULLUP); +  pinMode(PIN_SERVO_AVAR, INPUT_PULLUP); 
-  attachInterrupt(digitalPinToInterrupt(PIN_SERVO_G), SERVO_G_change_CB, CHANGE); +  attachInterrupt(digitalPinToInterrupt(PIN_SERVO_AVAR), SERVO_AVAR_change_CB, CHANGE); 
-   + 
-  pinMode(PIN_MOT_D_R_PWM, OUTPUT); +  pinMode(PIN_MOT_D_PWM, OUTPUT); 
-  pinMode(PIN_MOT_D_L_PWM, OUTPUT); +  pinMode(PIN_MOT_D_L_EN, OUTPUT); 
-  pinMode(PIN_MOT_G_R_PWM, OUTPUT); +  pinMode(PIN_MOT_D_R_EN, OUTPUT); 
-  pinMode(PIN_MOT_G_L_PWM, OUTPUT);+  pinMode(PIN_MOT_G_PWM, OUTPUT); 
 +  pinMode(PIN_MOT_G_L_EN, OUTPUT); 
 +  pinMode(PIN_MOT_G_R_EN, OUTPUT);
   update_MOT_D_PWMs(0);   update_MOT_D_PWMs(0);
   update_MOT_G_PWMs(0);   update_MOT_G_PWMs(0);
Ligne 222: Ligne 269:
 } }
  
-void SERVO_D_change_CB() { +void SERVO_GD_change_CB() { 
-  static volatile unsigned long D_rise_micros_IT = 0; +  static volatile unsigned long GD_rise_micros_IT = 0; 
-    if (digitalRead(PIN_SERVO_D) == HIGH) { +    if (digitalRead(PIN_SERVO_GD) == HIGH) { 
-      D_rise_micros_IT = micros();+      GD_rise_micros_IT = micros();
     }     }
     else {     else {
-      SERVO_D_Pulse_micros_IT = micros(); +      SERVO_GD_Pulse_micros_IT = micros(); 
-      if (SERVO_D_Pulse_micros_IT D_rise_micros_ITSERVO_D_Pulse_micros_IT -=D_rise_micros_IT+      if (SERVO_GD_Pulse_micros_IT GD_rise_micros_ITSERVO_GD_Pulse_micros_IT -=GD_rise_micros_IT
-      else SERVO_D_Pulse_micros_IT += (0xffffffff-D_rise_micros_IT);//overflow of timer +      else SERVO_GD_Pulse_micros_IT += (0xffffffff-GD_rise_micros_IT);//overflow of timer 
-      SERVO_D_New_pulse_IT = true;+      SERVO_GD_New_pulse_IT = true;
     }     }
 } }
  
-void SERVO_G_change_CB() { +void SERVO_AVAR_change_CB() { 
-  static volatile unsigned long G_rise_micros_IT = 0; +  static volatile unsigned long AVAR_rise_micros_IT = 0; 
-    if (digitalRead(PIN_SERVO_G) == HIGH) { +    if (digitalRead(PIN_SERVO_AVAR) == HIGH) { 
-      G_rise_micros_IT = micros();+      AVAR_rise_micros_IT = micros();
     }     }
     else {     else {
-      SERVO_G_Pulse_micros_IT = micros(); +      SERVO_AVAR_Pulse_micros_IT = micros(); 
-      if (SERVO_G_Pulse_micros_IT G_rise_micros_ITSERVO_G_Pulse_micros_IT -=G_rise_micros_IT+      if (SERVO_AVAR_Pulse_micros_IT AVAR_rise_micros_ITSERVO_AVAR_Pulse_micros_IT -=AVAR_rise_micros_IT
-      else SERVO_G_Pulse_micros_IT += (0xffffffff-G_rise_micros_IT);//overflow of timer +      else SERVO_AVAR_Pulse_micros_IT += (0xffffffff-AVAR_rise_micros_IT);//overflow of timer 
-      SERVO_G_New_pulse_IT = true;+      SERVO_AVAR_New_pulse_IT = true;
     }     }
 } }
Ligne 252: Ligne 299:
   currentMillis = millis();   currentMillis = millis();
      
-  if (currentMillis - previousMillis >= 100)  +  if (currentMillis - previousMillis >= 20)  
-  { // 100ms task+  { // 20ms task
     previousMillis = currentMillis;     previousMillis = currentMillis;
          
-    LED_cnt_u8++; +    LED_cnt_u16++; 
-    if (LED_cnt_u8 10) digitalWrite(LED_BUILTIN, LOW);+    if (LED_cnt_u16 100) digitalWrite(LED_BUILTIN, LOW);
     else digitalWrite(LED_BUILTIN, HIGH);     else digitalWrite(LED_BUILTIN, HIGH);
          
     //recuperation des dernieres commande servo     //recuperation des dernieres commande servo
     noInterrupts();     noInterrupts();
-      SERVO_D_Pulse_micros=SERVO_D_Pulse_micros_IT+      SERVO_GD_Pulse_micros=SERVO_GD_Pulse_micros_IT
-      SERVO_G_Pulse_micros=SERVO_G_Pulse_micros_IT;+      SERVO_AVAR_Pulse_micros=SERVO_AVAR_Pulse_micros_IT;
     interrupts();     interrupts();
     //mise en borne et conversion des commande versos     //mise en borne et conversion des commande versos
-    if (SERVO_D_Pulse_micros 500SERVO_D_Pulse_micros = 1500;  // pour traiter le cas ou on a pas de servo connecté +    if (SERVO_GD_Pulse_micros 850SERVO_GD_Pulse_micros = 1500;  // pour traiter le cas ou on a pas de servo connecté 
-    SERVO_D_Pulse_micros=constrain(SERVO_D_Pulse_micros, 1000, 2000); +    if (SERVO_GD_Pulse_micros > 2200) SERVO_GD_Pulse_micros = 1500;  // pour traiter le cas ou on a pas de servo connecté 
-    MOT_D_CMD_s16 = map(SERVO_D_Pulse_micros,1000,2000,-255,255); +    if ((SERVO_GD_Pulse_micros > 1480) &&  (SERVO_GD_Pulse_micros < 1520))SERVO_GD_Pulse_micros = 1500; // pour avoir une zone neutre  
-    update_MOT_D_PWMs(MOT_D_CMD_s16);+    SERVO_GD_Pulse_micros=constrain(SERVO_GD_Pulse_micros, 1000, 2000); 
 +    CMD_GD = map(SERVO_GD_Pulse_micros,1000,2000,-255,255); 
          
-    if (SERVO_G_Pulse_micros 500SERVO_G_Pulse_micros = 1500;  // pour traiter le cas ou on a pas de servo connecté +    if (SERVO_AVAR_Pulse_micros 850SERVO_AVAR_Pulse_micros = 1500;  // pour traiter le cas ou on a pas de servo connecté 
-    SERVO_G_Pulse_micros=constrain(SERVO_G_Pulse_micros, 1000, 2000); +    if (SERVO_AVAR_Pulse_micros > 2200) SERVO_AVAR_Pulse_micros = 1500;  // pour traiter le cas ou on a pas de servo connecté 
-    MOT_G_CMD_s16 = map(SERVO_G_Pulse_micros,1000,2000,-255,255);+    if ((SERVO_AVAR_Pulse_micros > 1480) &&  (SERVO_AVAR_Pulse_micros < 1520))SERVO_AVAR_Pulse_micros = 1500; // pour avoir une zone neutre  
 +    SERVO_AVAR_Pulse_micros=constrain(SERVO_AVAR_Pulse_micros, 1000, 2000); 
 +    CMD_AVAR = map(SERVO_AVAR_Pulse_micros,1000,2000,-255,255); 
 +     
 +    MOT_D_CMD_s16 = constrain(CMD_AVAR - CMD_GD,-255,255); 
 +    MOT_G_CMD_s16 = constrain(CMD_AVAR + CMD_GD,-255,255); 
 +     
 +    update_MOT_D_PWMs(MOT_D_CMD_s16);
     update_MOT_G_PWMs(MOT_G_CMD_s16);     update_MOT_G_PWMs(MOT_G_CMD_s16);
          
-    Serial.print("G"); +    Serial.print("AVAR"); 
-    Serial.print(SERVO_G_Pulse_micros,DEC); +    Serial.print(SERVO_AVAR_Pulse_micros,DEC); 
-    Serial.print("\t");+    Serial.print("\tGD"); 
 +    Serial.print(SERVO_GD_Pulse_micros,DEC); 
 +    Serial.print("\tM_G");
     Serial.print(MOT_G_CMD_s16,DEC);     Serial.print(MOT_G_CMD_s16,DEC);
     Serial.print("\t");     Serial.print("\t");
Ligne 284: Ligne 342:
     Serial.print("\t");     Serial.print("\t");
     Serial.print(analogRead(PIN_MOT_G_R_IS));     Serial.print(analogRead(PIN_MOT_G_R_IS));
-    Serial.print("\t\t\t\tD"); +    Serial.print("\tM_D");
-    Serial.print(SERVO_D_Pulse_micros,DEC); +
-    Serial.print("\t");+
     Serial.print(MOT_D_CMD_s16,DEC);     Serial.print(MOT_D_CMD_s16,DEC);
     Serial.print("\t");     Serial.print("\t");
     Serial.print(analogRead(PIN_MOT_D_L_IS));     Serial.print(analogRead(PIN_MOT_D_L_IS));
     Serial.print("\t");     Serial.print("\t");
-    //Serial.println(analogRead(PIN_MOT_D_R_IS)); +    Serial.println(analogRead(PIN_MOT_D_R_IS)); 
-    Serial.print(analogRead(PIN_MOT_D_R_IS)); +    //Serial.print(analogRead(PIN_MOT_D_R_IS)); 
-    Serial.print("\r");+    //Serial.print("\r"); 
 + 
 +    
   } // end of task   } // end of task
      
 } }
  
-}+</code>
  
 +====== idées ======
 +  * https://github.com/nasa-jpl/open-source-rover
 +    * https://www.pololu.com/product/2591 optical encoder
 +    * https://www.pololu.com/product/3081 magnetic encoder
 +  * http://www.robot-maker.com/forum/topic/6355-cede-robot-tondeuse-pour-somme-modique/
 +  * http://bennurre2.blogspot.com/
 +  * http://bennurre4.blogspot.com/
  
- 
-</code> 
robots/tondobot/tondobot.1536933271.txt.gz · Dernière modification : 09/2018 de fred