ENIB 2022 - groupe B : Canard Suiveur de Ligne : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Que fait ce projet ?)
(Problématiques)
 
(30 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
==photo de l'équipe==
+
==Photo du Projet==
[[Fichier:Photoenib2018.jpg|600px]]
+
[[Fichier:1642172278038.jpg|600px|vignette|centré|Photo Projet Canard]]
  
 
== Auteurs ==
 
== Auteurs ==
 
Ont participé à la rédaction de cette fiche :
 
Ont participé à la rédaction de cette fiche :
* [[Utilisateur:Estebanlascourreges|Moi]]
+
* [[Utilisateur:Estebanlascourreges|Esteban]]
* Et les autres
+
* [[Utilisateur:Antoineguillemaud|Antoine]]
 +
* [[Utilisateur:Ewenguillou|Ewen]]
  
 
==Que fait ce projet ? ==
 
==Que fait ce projet ? ==
C'est un canard qui suit un parcours a la minière des canards de la pèche au canard, cependant, c'est au sec et le parcours est représenté par une ligne noire.
+
C'est un canard qui suit un parcours a la manière des canards de la pèche au canard, cependant, c'est au sec et le parcours est représenté par une ligne noire.
  
 +
==Liste des composants==
  
 
* 2x Moteurs continus
 
* 2x Moteurs continus
Ligne 18 : Ligne 20 :
 
* 1x Wemos
 
* 1x Wemos
 
* 1x Bouton poussoir (+ rampe d'adaptation)
 
* 1x Bouton poussoir (+ rampe d'adaptation)
* 1x Porte pilles
+
* 2x Porte pilles 4 piles (ou équivalent) (4s2p)
* 3x Pilles
+
* 8x Piles
 
* Des Cables
 
* Des Cables
 
* Bandeau Led (20 LED)
 
* Bandeau Led (20 LED)
*
 
  
 +
[https://svgsilh.com/svg_v2/2804915.svg CANARD]
 +
 +
[https://cad.onshape.com/documents/6931a2868b7dc9f142607858/w/2ad9a2436c384d165ad912cf/e/47f31742a9db83110f26343b CAO - Base du CANARD]
 +
[[Fichier:Img CAO Base Canard.png|320px|thumb|gauche|Image de la CAO]]
 +
[[Fichier:CablageCANARD.png|320px|vignette|gauche|Cablage]]
 +
 +
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
 +
 +
==Code==
 +
ATTENTION:
 +
* Le code ne fonctionne pas très bien voir pas dans l'état actuel.
 +
* Nécessite de plus ample tests.
 +
 +
<pre>
 +
#include <Adafruit_NeoPixel.h>
 +
#ifdef __AVR__
 +
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
 +
#endif
 +
#define LED_PIN    D4
 +
#define LED_COUNT 20
 +
 +
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
 +
 +
// Definitions Arduino pins connected to input H Bridge
 +
int IN1 = 4;
 +
int IN2 = 5;
 +
int IN3 = 13;
 +
int IN4 = 15;
 +
 +
int led = 2;
 +
int buttonPin = 16;
 +
int analogInPin = A0;
 +
 +
int buttonState = 0;
 +
int buttonStateLast = 0;
 +
int analogValue = 0;
 +
 +
unsigned long winTime=0;
 +
unsigned long time_now=0;
 +
unsigned long time_last_operation=0;
 +
 +
unsigned long loop_count=0;
 +
 +
void setup()
 +
{
 +
  #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
 +
  clock_prescale_set(clock_div_1);
 +
  #endif
 +
 +
  Serial.begin(9600);
 +
  strip.begin();          // INITIALIZE NeoPixel strip object (REQUIRED)
 +
  strip.show();            // Turn OFF all pixels ASAP
 +
  strip.setBrightness(180);
 +
 
 +
  pinMode(led, OUTPUT);
 +
  pinMode(buttonPin, INPUT);
 +
  pinMode(IN1, OUTPUT);
 +
  pinMode(IN2, OUTPUT);
 +
  pinMode(IN3, OUTPUT);
 +
  pinMode(IN4, OUTPUT);
 +
}
  
 +
void loop()
 +
{
 +
//CODE DE L'ASSERV
 +
analogValue = analogValue*0.75+ analogRead(analogInPin)*0.25;
  
[[Fichier:Reward.wav|thumb|gauche|Musique lorsque l'on attrape le Canard|Musique lorsque l'on attrape le Canard]]
 
  
[[Fichier:Musique Norale.mp3|thumb|gauche|Musique d'ambiance normale|Musique d'ambiance normale]]
 
  
[[Fichier:Musique Cursed.wav|thumb|gauche|Musique ambiance Cursed|Musique ambiance Cursed]]
+
//detection ligne
[https://svgsilh.com/svg_v2/2804915.svg CANARD]
+
if ( analogValue>=0 && analogValue<400 ) {
 +
if(loop_count%200<60){ digitalWrite(IN1, HIGH);} else { digitalWrite(IN1, LOW);}
 +
digitalWrite(IN2, LOW);
 +
digitalWrite(IN3, LOW);
 +
digitalWrite(IN4, LOW);
 +
 
 +
}else if( analogValue>=400 && analogValue<=600 ) {
 +
if(loop_count%200<60){ digitalWrite(IN1, HIGH);} else { digitalWrite(IN1, LOW);}
 +
digitalWrite(IN2, LOW);
 +
digitalWrite(IN3, LOW);
 +
if(loop_count%100<60){ digitalWrite(IN4, HIGH);} else { digitalWrite(IN4, LOW);}
 +
 
 +
}else if( analogValue>=600 && analogValue<=1024 ) {
 +
digitalWrite(IN1, LOW);
 +
digitalWrite(IN2, LOW);
 +
digitalWrite(IN3, LOW);
 +
if(loop_count%200<60){ digitalWrite(IN4, HIGH);} else { digitalWrite(IN4, LOW);}
 +
 
 +
}
 +
 
 +
//CODE DU BOUTON
 +
buttonState = digitalRead(buttonPin);
 +
if (buttonState == HIGH) {
 +
    // turn LED on:
 +
    digitalWrite(led, LOW);
 +
  } else {
 +
    // turn LED off:
 +
    digitalWrite(led, HIGH);
 +
   
 +
    if(buttonStateLast==HIGH) { //si le bouton n'est pas appuyé mais l'était au cycle d'avant
 +
      //play reward sond
 +
      winTime=millis();
 +
    }
 +
  }
 +
buttonStateLast=buttonState;
 +
 
 +
//led band
 +
/*
 +
time_now=millis();
 +
if(time_now-winTime<2000 && time_now>2000) {
 +
    for(int i=0; i<strip.numPixels(); i++) {
 +
    if(i<15){
 +
    strip.setPixelColor(i, strip.Color(50,  255,  0));
 +
    } else {
 +
    strip.setPixelColor(i, strip.Color(255,  255,  255));
 +
    }
 +
  }
 +
} else {
 +
  for(int i=0; i<strip.numPixels(); i++) {
 +
  if(i<15){
 +
    if( (time_now%2000)<1000) {
 +
      if(i%2==0) {strip.setPixelColor(i, strip.Color(50,  0,  150));}
 +
      else {strip.setPixelColor(i, strip.Color(150,  0,  50)); }
 +
    }
 +
      else {
 +
        if(i%2==0) {strip.setPixelColor(i, strip.Color(150,  0,  50));}
 +
      else {strip.setPixelColor(i, strip.Color(50,  0,  150)); }}
 +
  } else {
 +
  strip.setPixelColor(i, strip.Color(255,  255,  255));
 +
  }
 +
  }
 +
}*/
  
[[Fichier:Img CAO Base Canard.png|200px|thumb|gauche|Image de la CAO]]
+
for(int i=0; i<strip.numPixels(); i++) {
 +
if(i<15){
 +
      strip.setPixelColor(i, strip.Color(0,  0,  0));
 +
  } else {
 +
  strip.setPixelColor(i, strip.Color(255,  255,  255));
 +
  }}
 +
  strip.show();
  
[https://cad.onshape.com/documents/6931a2868b7dc9f142607858/w/2ad9a2436c384d165ad912cf/e/47f31742a9db83110f26343b CAO - Base du CANARD]
+
loop_count++;
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
 
  
==Code==
+
}
<pre>
 
ici je pose mon code documenté !
 
 
</pre>
 
</pre>
 +
==Problématiques==
 +
D'après notre diagnostique
 +
* Les moteurs a courant continus allant trop vite (pour détecter la ligne), On aurait aimer puvoir régler la vitesse des moteurs mais comme nous n'avons qu'un pont en H (tout ou rien) nous devions passer via du PWM qui fait des appels de courant suffisamment important pour perturber le signal.
 +
* Un manque de temps pour implementer toutes nos idées.
 +
* ...
  
 
==Catégories==
 
==Catégories==
  
 
[[Catégorie:Enib2022]]
 
[[Catégorie:Enib2022]]

Version actuelle datée du 14 janvier 2022 à 17:13

Photo du Projet

Photo Projet Canard

Auteurs

Ont participé à la rédaction de cette fiche :

Que fait ce projet ?

C'est un canard qui suit un parcours a la manière des canards de la pèche au canard, cependant, c'est au sec et le parcours est représenté par une ligne noire.

Liste des composants

  • 2x Moteurs continus
  • 2x Roues
  • 1x Roue folle
  • 1x Pont en H
  • 1x Capteur de luminosité
  • 1x Wemos
  • 1x Bouton poussoir (+ rampe d'adaptation)
  • 2x Porte pilles 4 piles (ou équivalent) (4s2p)
  • 8x Piles
  • Des Cables
  • Bandeau Led (20 LED)

CANARD

CAO - Base du CANARD

Image de la CAO
Cablage





















Code

ATTENTION:

  • Le code ne fonctionne pas très bien voir pas dans l'état actuel.
  • Nécessite de plus ample tests.
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define LED_PIN    D4
#define LED_COUNT 20

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

// Definitions Arduino pins connected to input H Bridge
int IN1 = 4;
int IN2 = 5;
int IN3 = 13;
int IN4 = 15;

int led = 2;
int buttonPin = 16;
int analogInPin = A0;

int buttonState = 0; 
int buttonStateLast = 0;
int analogValue = 0;
 
unsigned long winTime=0;
unsigned long time_now=0;
unsigned long time_last_operation=0;

unsigned long loop_count=0;

void setup()
{
  #if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
  #endif

  Serial.begin(9600);
  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(180);
  
  pinMode(led, OUTPUT);
  pinMode(buttonPin, INPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop()
{
//CODE DE L'ASSERV
analogValue = analogValue*0.75+ analogRead(analogInPin)*0.25;



//detection ligne
if ( analogValue>=0 && analogValue<400 ) {
if(loop_count%200<60){ digitalWrite(IN1, HIGH);} else { digitalWrite(IN1, LOW);}
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);

}else if( analogValue>=400 && analogValue<=600 ) {
if(loop_count%200<60){ digitalWrite(IN1, HIGH);} else { digitalWrite(IN1, LOW);}
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
if(loop_count%100<60){ digitalWrite(IN4, HIGH);} else { digitalWrite(IN4, LOW);}
  
}else if( analogValue>=600 && analogValue<=1024 ) {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
if(loop_count%200<60){ digitalWrite(IN4, HIGH);} else { digitalWrite(IN4, LOW);}
  
}

//CODE DU BOUTON
buttonState = digitalRead(buttonPin);
 if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(led, LOW);
  } else {
    // turn LED off:
    digitalWrite(led, HIGH);
    
    if(buttonStateLast==HIGH) { //si le bouton n'est pas appuyé mais l'était au cycle d'avant
      //play reward sond
      winTime=millis();
    }
  }
buttonStateLast=buttonState;

//led band
/*
time_now=millis();
if(time_now-winTime<2000 && time_now>2000) {
    for(int i=0; i<strip.numPixels(); i++) {
    if(i<15){
    strip.setPixelColor(i, strip.Color(50,   255,   0));
    } else {
    strip.setPixelColor(i, strip.Color(255,   255,   255));
    }
  }
} else {
  for(int i=0; i<strip.numPixels(); i++) {
  if(i<15){
    if( (time_now%2000)<1000) {
      if(i%2==0) {strip.setPixelColor(i, strip.Color(50,   0,   150));}
      else {strip.setPixelColor(i, strip.Color(150,   0,   50)); }
    }
      else { 
        if(i%2==0) {strip.setPixelColor(i, strip.Color(150,   0,   50));}
      else {strip.setPixelColor(i, strip.Color(50,   0,   150)); }}
  } else {
  strip.setPixelColor(i, strip.Color(255,   255,   255));
  }
  }
}*/

for(int i=0; i<strip.numPixels(); i++) {
 if(i<15){
      strip.setPixelColor(i, strip.Color(0,   0,   0));
  } else {
  strip.setPixelColor(i, strip.Color(255,   255,   255));
  }}
  strip.show();

loop_count++;

}

Problématiques

D'après notre diagnostique

  • Les moteurs a courant continus allant trop vite (pour détecter la ligne), On aurait aimer puvoir régler la vitesse des moteurs mais comme nous n'avons qu'un pont en H (tout ou rien) nous devions passer via du PWM qui fait des appels de courant suffisamment important pour perturber le signal.
  • Un manque de temps pour implementer toutes nos idées.
  • ...

Catégories