ENIB 2022 - groupe B : Canard Suiveur de Ligne : Différence entre versions
(→Liste des composants) |
(→Code) |
||
Ligne 35 : | Ligne 35 : | ||
==Code== | ==Code== | ||
<pre> | <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; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | 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; | ||
+ | |||
+ | ... (39 lines left) | ||
+ | Collapse | ||
+ | sketch_jan13a.ino | ||
+ | 4 KB | ||
+ | | ||
+ | /*========================================================================== | ||
+ | // Author : Handson Technology | ||
+ | // Project : Arduino Uno | ||
+ | // Description : L298N Motor Driver | ||
+ | // Source-Code : L298N_Motor.ino | ||
+ | // Program: Control 2 DC motors using L298N H Bridge Driver | ||
+ | //========================================================================== | ||
+ | */ | ||
+ | #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; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | 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++; | ||
+ | |||
+ | } | ||
</pre> | </pre> | ||
Version du 14 janvier 2022 à 16:51
Sommaire
photo de l'équipe
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)
Code
#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; 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; ... (39 lines left) Collapse sketch_jan13a.ino 4 KB /*========================================================================== // Author : Handson Technology // Project : Arduino Uno // Description : L298N Motor Driver // Source-Code : L298N_Motor.ino // Program: Control 2 DC motors using L298N H Bridge Driver //========================================================================== */ #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; 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++; }