(Une révision intermédiaire par le même utilisateur non affichée) | |||
Ligne 68 : | Ligne 68 : | ||
{{Tuto Step | {{Tuto Step | ||
|Step_Title=<translate>Codage</translate> | |Step_Title=<translate>Codage</translate> | ||
− | |Step_Content=<translate>Le codage du 3ème étage doit permettre de lier le potentiomètre à la luminosité de la LED et la vitesse de rotation du moteur. Pour cela les bibliothèques à importer sont : FastLED, BME280I2C, Wire et | + | |Step_Content=<translate>Le codage du 3ème étage doit permettre de lier le potentiomètre à la luminosité de la LED et la vitesse de rotation du moteur. Pour cela les bibliothèques à importer sont : FastLED, BME280I2C, Wire, SSD1306, Stepper et AccelStepper. |
Le code n'est pas très compliqué mais utilise plusieurs fonctions jamais vues auparavant. | Le code n'est pas très compliqué mais utilise plusieurs fonctions jamais vues auparavant. | ||
Ligne 77 : | Ligne 77 : | ||
|Notes=<translate>Vous trouverez dans les fichiers le lien du site pour obtenir le modèle 3D du NekiNeko. Vous y trouverez également le lien de mon profil Tinkercad où figurent le modèle 3D de mon 3ème étage et de l'hélice utilisée. | |Notes=<translate>Vous trouverez dans les fichiers le lien du site pour obtenir le modèle 3D du NekiNeko. Vous y trouverez également le lien de mon profil Tinkercad où figurent le modèle 3D de mon 3ème étage et de l'hélice utilisée. | ||
− | Voici maintenant le code permettant de faire fonctionner l'ensemble de la partie électronique du bento (les modules FastLED, BME280I2C, Wire et | + | Voici maintenant le code permettant de faire fonctionner l'ensemble de la partie électronique du bento (les modules FastLED, BME280I2C, Wire , SSD1306, Stepper et AccelStepper doivent bien entendu êtres installés) : |
+ | |||
+ | // librairie fastled | ||
+ | |||
+ | <nowiki>#</nowiki>include "FastLED.h" | ||
+ | |||
+ | //ici le nombre total de leds | ||
+ | |||
+ | <nowiki>#</nowiki>define NUM_LEDS 12 | ||
+ | |||
+ | // ici la pin pour les leds | ||
+ | |||
+ | <nowiki>#</nowiki>define DATA_PIN 6 | ||
+ | |||
+ | // déclaration d'un tableau pour les leds | ||
+ | |||
+ | CRGB leds[NUM_LEDS]; | ||
+ | |||
+ | // librairies pour le BME | ||
+ | |||
+ | <nowiki>#</nowiki>include <BME280I2C.h> | ||
+ | |||
+ | <nowiki>#</nowiki>include <Wire.h> | ||
+ | |||
+ | <nowiki>#</nowiki>include "ssd1306.h" | ||
+ | |||
+ | BME280I2C::Settings settings( | ||
+ | |||
+ | BME280::OSR_X1, | ||
+ | |||
+ | BME280::OSR_X1, | ||
+ | |||
+ | BME280::OSR_X1, | ||
+ | |||
+ | BME280::Mode_Forced, | ||
+ | |||
+ | BME280::StandbyTime_1000ms, | ||
+ | |||
+ | BME280::Filter_Off, | ||
+ | |||
+ | BME280::SpiEnable_False, | ||
+ | |||
+ | 0x77 // I2C address. I2C specific. | ||
+ | |||
+ | ); | ||
+ | |||
+ | BME280I2C bme(settings); | ||
+ | |||
+ | /* Ces tableaux de caractères serviront UNIQUEMENT pour l'affichage à l'écran. | ||
+ | |||
+ | <nowiki>*</nowiki> Il faudra afficher ces variables et non les "floats" déclarées pour le capteur, | ||
+ | |||
+ | <nowiki>*</nowiki> l'écran ne reconnaissant que des chaînes de caractère | ||
+ | |||
+ | <nowiki>*</nowiki>/ | ||
+ | |||
+ | char tempC[9]; | ||
+ | |||
+ | char humC[10]; | ||
+ | |||
+ | char presC[11]; | ||
+ | |||
+ | /* Example sketch to control a 28BYJ-48 stepper motor with ULN2003 driver board and Arduino UNO. More info: <nowiki>https://www.makerguides.com</nowiki> */ | ||
+ | |||
+ | // Include the Arduino Stepper.h library: | ||
+ | |||
+ | <nowiki>#</nowiki>include <Stepper.h> | ||
+ | |||
+ | <nowiki>#</nowiki>include <AccelStepper.h> | ||
+ | |||
+ | // Define number of steps per rotation: | ||
+ | |||
+ | const int stepsPerRevolution = 2048; | ||
+ | |||
+ | // Wiring: | ||
+ | |||
+ | // Pin 8 to IN1 on the ULN2003 driver | ||
+ | |||
+ | // Pin 9 to IN2 on the ULN2003 driver | ||
+ | |||
+ | // Pin 10 to IN3 on the ULN2003 driver | ||
+ | |||
+ | // Pin 11 to IN4 on the ULN2003 driver | ||
+ | |||
+ | // Create stepper object called 'myStepper', note the pin order: | ||
+ | |||
+ | Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11); | ||
+ | |||
+ | int led = 5; // on déclare que la LED est branchée sur la pin 9 | ||
+ | |||
+ | int sensorValue; // on déclare une variable pour notre capteur | ||
+ | |||
+ | void setup() { | ||
+ | |||
+ | // Set the speed to 5 rpm: | ||
+ | |||
+ | myStepper.setSpeed(5); | ||
+ | |||
+ | |||
+ | // Begin Serial communication at a baud rate of 9600: | ||
+ | |||
+ | pinMode (led,OUTPUT); // on déclare la led en tant que sortie | ||
+ | |||
+ | Serial.begin (9600); // on lance la communication avec l'ordinateur | ||
+ | |||
+ | // put your setup code here, to run once: | ||
+ | |||
+ | // on lance l'écran et on le colore de noir | ||
+ | |||
+ | ssd1306_128x64_i2c_init(); | ||
+ | |||
+ | ssd1306_fillScreen(0x00); | ||
+ | |||
+ | // on lance la typo | ||
+ | |||
+ | ssd1306_setFixedFont(ssd1306xled_font6x8); | ||
+ | |||
+ | |||
+ | // tout ce blabla sert uniquement à vérifier si un capteur est présent et bien branché | ||
+ | |||
+ | while(!Serial) {} // Wait | ||
+ | |||
+ | Wire.begin(); | ||
+ | |||
+ | while(!bme.begin()) | ||
+ | |||
+ | { | ||
+ | |||
+ | Serial.println("Could not find BME280 sensor!"); | ||
+ | |||
+ | delay(1000); | ||
+ | |||
+ | } | ||
+ | |||
+ | // bme.chipID(); // Deprecated. See chipModel(). | ||
+ | |||
+ | switch(bme.chipModel()) | ||
+ | |||
+ | { | ||
+ | |||
+ | case BME280::ChipModel_BME280: | ||
+ | |||
+ | Serial.println("Found BME280 sensor! Success."); | ||
+ | |||
+ | break; | ||
+ | |||
+ | case BME280::ChipModel_BMP280: | ||
+ | |||
+ | Serial.println("Found BMP280 sensor! No Humidity available."); | ||
+ | |||
+ | break; | ||
+ | |||
+ | default: | ||
+ | |||
+ | Serial.println("Found UNKNOWN sensor! Error!"); | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | // on démarre les leds avec le bon modèle | ||
+ | |||
+ | FastLED.addLeds<WS2811, DATA_PIN, GRB>(leds, NUM_LEDS); | ||
+ | |||
+ | // on peut régler ici la luminosité : 0-255 | ||
+ | |||
+ | LEDS.setBrightness(25); | ||
+ | |||
+ | |||
+ | delay(1000); | ||
+ | |||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | |||
+ | int sensorValue = analogRead (A0); // on déclare que la variable sensorValue correspond à la lecture de valeurs sur le port A0 | ||
+ | |||
+ | int sensorValue1 = map (sensorValue, 0, 1023, 0, 15)+1; | ||
+ | |||
+ | int sensorValue2 = map (sensorValue, 0, 1023, 0, 255)+1; | ||
+ | |||
+ | Serial.print("V1="); | ||
+ | |||
+ | Serial.print(sensorValue1); | ||
+ | |||
+ | Serial.print("V2="); | ||
+ | |||
+ | Serial.print(sensorValue2); | ||
+ | |||
+ | analogWrite (led, sensorValue2); // on inscrit cette valeur sur la led | ||
+ | |||
+ | myStepper.setSpeed(sensorValue1); | ||
+ | |||
+ | // Step one revolution in one direction: | ||
+ | |||
+ | Serial.println("clockwise"); | ||
+ | |||
+ | myStepper.step(stepsPerRevolution); | ||
+ | |||
+ | delay(50); | ||
+ | |||
+ | // stepper.runSpeed(); | ||
+ | |||
+ | |||
+ | // Step one revolution in the other direction: | ||
+ | |||
+ | Serial.println("counterclockwise"); | ||
+ | |||
+ | //myStepper.step(-stepsPerRevolution); | ||
+ | |||
+ | //delay(500); | ||
+ | |||
+ | // put your main code here, to run repeatedly: | ||
+ | |||
+ | |||
+ | |||
+ | // On déclare 3 variables : température, humidité, pression | ||
+ | |||
+ | float temp(NAN), hum(NAN), pres(NAN); | ||
+ | |||
+ | // Déclenchement du capteur | ||
+ | |||
+ | BME280::TempUnit tempUnit(BME280::TempUnit_Celsius); | ||
+ | |||
+ | BME280::PresUnit presUnit(BME280::PresUnit_hPa); | ||
+ | |||
+ | bme.read(pres, temp, hum, tempUnit, presUnit); | ||
+ | |||
+ | //pres = pres/100; | ||
+ | |||
+ | // ces lignes servent à convertir les valeurs "float" du capteur en "char" destinées à l'écran | ||
+ | |||
+ | // (utile uniquement pour votre code final) | ||
+ | |||
+ | dtostrf (temp,5,1,tempC); | ||
+ | |||
+ | dtostrf (hum,5,0,humC); | ||
+ | |||
+ | dtostrf (pres,5,0,presC); | ||
+ | |||
+ | // on imprime les valeurs sur le moniteur série | ||
+ | |||
+ | Serial.print("Temp: "); | ||
+ | |||
+ | Serial.print(temp , 1); | ||
+ | |||
+ | Serial.print("°"+ String(tempUnit == BME280::TempUnit_Celsius ? 'C' :'F')); | ||
+ | |||
+ | Serial.print("\t\tHumidity: "); | ||
+ | |||
+ | Serial.print(hum , 0); | ||
+ | |||
+ | Serial.print("% RH"); | ||
+ | |||
+ | Serial.print("\t\tPressure: "); | ||
+ | |||
+ | Serial.print(pres , 0); | ||
+ | |||
+ | Serial.println("hPa"); | ||
+ | |||
+ | |||
+ | ssd1306_printFixed (0, 16, "Temperature :" , STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed (75, 16, tempC , STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed (110, 16, "°C" , STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed (0, 32, "Humidite :" , STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed (55, 32, humC , STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed (100, 32, "% RH" , STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed (0, 48, "Pression :" , STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed (55, 48, presC , STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed (100, 48, "hPa" , STYLE_NORMAL); | ||
+ | |||
+ | //delay(500); | ||
+ | |||
+ | // tout allumer | ||
+ | |||
+ | /* for( int i = 0; i < 4; i++){ | ||
+ | |||
+ | leds[i] = CRGB::Yellow; | ||
+ | |||
+ | } | ||
+ | |||
+ | for( int i = 4; i < 8; i++){ | ||
+ | |||
+ | leds[i] = CRGB::Orange; | ||
+ | |||
+ | } | ||
+ | |||
+ | for( int i = 8; i < 12; i++){ | ||
+ | |||
+ | leds[i] = CRGB::Purple; | ||
+ | |||
+ | }*/ | ||
+ | |||
+ | /*for ( int i = 0 ; i<=5 ; i++){ | ||
+ | |||
+ | leds[2*i] = CRGB::Green; | ||
+ | |||
+ | leds[2*i+1] = CRGB::Red; | ||
+ | |||
+ | } | ||
+ | |||
+ | FastLED.show(); | ||
+ | |||
+ | delay(1000); | ||
+ | |||
+ | for ( int i = 0 ; i<=5 ; i++){ | ||
+ | |||
+ | leds[2*i] = CRGB::Red; | ||
+ | |||
+ | leds[2*i+1] = CRGB::Green; | ||
+ | |||
+ | } | ||
+ | |||
+ | FastLED.show(); | ||
+ | |||
+ | delay(1000); | ||
+ | |||
+ | // FastLED.show();*/ | ||
+ | |||
+ | if (hum>50 && temp<30) { | ||
+ | |||
+ | for(int i = 0 ; i<=11 ; i++){ | ||
+ | |||
+ | leds[i] = CRGB::Blue; | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | else if (hum>50 && temp>=30){ | ||
+ | |||
+ | for(int i = 0 ; i<=11 ; i++){ | ||
+ | |||
+ | leds[i] = CRGB::Red; | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | else { | ||
+ | |||
+ | for (int i = 0 ; i<=11 ; i++){ | ||
+ | |||
+ | int r = random(256); | ||
+ | |||
+ | int g = random(256); | ||
+ | |||
+ | int b = random(256); | ||
+ | |||
+ | delay(100); | ||
+ | |||
+ | leds[i] = CRGB(r , g , b); | ||
+ | |||
+ | FastLED.show(); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | FastLED.show(); | ||
+ | |||
+ | } | ||
+ | |||
+ | <br /></translate> | ||
}} | }} | ||
{{PageLang | {{PageLang |
Auteur Jonas Marc Hugo Balandraux | Dernière modification 16/06/2022 par Jonas
découpe laser et impression 3D, Arduino, code Jona_LaD_s_bento_Bento90.jpg Création
La face du dessus repose sur les 4 faces latérales.
Leurs dimensions sont :
2 faces 8x12cm (faces devant et derrière)
l'une des deux doit être trouée en sont centre d'un disque de rayon 6mm pour laisser passer l'axe du moteur.
Les 2 face latérales sont de dimension 8x11.4cm.
Les faces ont été découpées à la découpeuse à jet d'eau sur un support de 3mm d'épaisseur.
La face supérieure est constituée d'un pavé 3mmx12cmx12cm sur laquelle j'ai placé un Nékinéko (modèle importé en pièce jointe) et d'un cône troué créé dans le but d'y placer un pot de fleur ou autre plante.
Filaments utilisés : ultimaker grey ABS et ultimaker natural PVA
Niveau de détail : 0,2 mm et
Remplissage : 20%
L'hélice doit se placer sur l'arbre moteur. On adapte donc les dimension de l'arbre de 6mm de diamètre. On fait donc un trou de 7mm de diamètre au centre de l'hélice (1mm de marge).
Filaments utilisés : ultimaker grey ABS et ultimaker natural PVA
Niveau de détail : 0,06 mm et
Remplissage : 40%
Pour décorer la face supérieure, on utilise plusieurs stickers. Il est facile de les imprimer, il suffit d'une image en noir et blanc (il faut que le niveau de détail soit assez faible) pour pouvoir créer son sticker. Voici ci-contre les images utilisées pour mes différents stickers.
Le codage du 3ème étage doit permettre de lier le potentiomètre à la luminosité de la LED et la vitesse de rotation du moteur. Pour cela les bibliothèques à importer sont : FastLED, BME280I2C, Wire, SSD1306, Stepper et AccelStepper.
Le code n'est pas très compliqué mais utilise plusieurs fonctions jamais vues auparavant.
Vous pourrez trouver ci-contre les images du code et le code écrit en "Notes et références".
fr none 0 Draft
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #