Ligne 12 : | Ligne 12 : | ||
}} | }} | ||
{{Introduction | {{Introduction | ||
− | |Introduction=<translate></translate> | + | |Introduction=<translate>// librairies pour le BME |
+ | |||
+ | <nowiki>#</nowiki>include <Servo.h> // permet de faire appel à la bibliothèque Servo | ||
+ | |||
+ | <nowiki>#</nowiki>include <BME280I2C.h> // BME280 by Tyler Glenn | ||
+ | |||
+ | <nowiki>#</nowiki>include <Wire.h> | ||
+ | |||
+ | <nowiki>#</nowiki>include "ssd1306.h" // SSD1306 by Alexey Dynda | ||
+ | |||
+ | <nowiki>#</nowiki>include "FastLED.h"//FastLED by Daniel Garcia | ||
+ | |||
+ | //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]; | ||
+ | |||
+ | const int POTAR = A0; // broche du potar | ||
+ | |||
+ | const int LED = 9; // broche de la LED | ||
+ | |||
+ | int valPOTAR = 0; //RAZ valeur | ||
+ | |||
+ | 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]; | ||
+ | |||
+ | Servo monservo12; // crée une constante appelée « monservo12 » utilisable par la bibliothèque Servo. | ||
+ | |||
+ | Servo monservo11; // crée une constante appelée « monservo11 » utilisable par la bibliothèque Servo. | ||
+ | |||
+ | Servo monservo10; // crée une constante appelée « monservo10 » utilisable par la bibliothèque Servo. | ||
+ | |||
+ | Servo monservo9; // crée une constante appelée « monservo11 » utilisable par la bibliothèque Servo. | ||
+ | |||
+ | Servo monservo8; // crée une constante appelée « monservo10 » utilisable par la bibliothèque Servo. | ||
+ | |||
+ | |||
+ | int bouton1 = 7; // déclare le bouton poussoir 1 sur la PIN 7. | ||
+ | |||
+ | int etatbouton1 = 0; // variable représentant le bouton, soit ouvert ou fermé, ici au départ à 0 donc fermé. | ||
+ | |||
+ | |||
+ | int bouton2 = 4; // déclare le bouton poussoir 2 sur la PIN 4. | ||
+ | |||
+ | int etatbouton2 = 0; // variable représentant le bouton, soit ouvert ou fermé, ici au départ à 0 donc fermé. | ||
+ | |||
+ | void setup(){ | ||
+ | |||
+ | { | ||
+ | |||
+ | Serial.begin(9600); | ||
+ | |||
+ | // déclaration entrée et sortie de Potar et LED. Lecture en enregistrement dans la variable valPOTAR de la valeur analog du Potar | ||
+ | |||
+ | pinMode(POTAR, INPUT); | ||
+ | |||
+ | pinMode (LED, OUTPUT); | ||
+ | |||
+ | valPOTAR = analogRead (POTAR); | ||
+ | |||
+ | // sert à 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 lance l'écran et on le colore de noir | ||
+ | |||
+ | |||
+ | ssd1306_128x64_i2c_init(); | ||
+ | |||
+ | ssd1306_fillScreen(0x00); | ||
+ | |||
+ | // on lance la typo | ||
+ | |||
+ | ssd1306_setFixedFont(ssd1306xled_font6x8); | ||
+ | |||
+ | FastLED.addLeds<WS2811, DATA_PIN, GRB>(leds, NUM_LEDS); | ||
+ | |||
+ | // on peut régler ici la luminosité : 0-255 | ||
+ | |||
+ | LEDS.setBrightness(50); | ||
+ | |||
+ | } | ||
+ | |||
+ | { | ||
+ | |||
+ | pinMode (bouton1, INPUT) ; // on indique que le bouton 1 est une entrée. | ||
+ | |||
+ | pinMode (bouton1, INPUT) ; // on indique que le bouton est une entrée. | ||
+ | |||
+ | monservo11.attach(10); // commande de la bibliothèque Servo, qui consiste à « attacher » le servomoteur à la PIN 10 | ||
+ | |||
+ | monservo8.attach(3); // commande de la bibliothèque Servo, qui consiste à « attacher » le servomoteur à la PIN 3 | ||
+ | |||
+ | monservo9.attach(5); // commande de la bibliothèque Servo, qui consiste à « attacher » le servomoteur à la PIN 5 | ||
+ | |||
+ | monservo10.attach(9); // commande de la bibliothèque Servo, qui consiste à « attacher » le servomoteur 10 à la PIN 9 | ||
+ | |||
+ | monservo12.attach(11); // commande de la bibliothèque Servo, qui consiste à « attacher » le servomoteur 12 à la PIN 11 | ||
+ | |||
+ | |||
+ | monservo12.write (0); // alors le servomoteur 12 prend un angle de 180° | ||
+ | |||
+ | monservo11.write (0); // alors le servomoteur 11 prend un angle de 180°. | ||
+ | |||
+ | monservo10.write (0); // alors le servomoteur 10 prend un angle de 180°. | ||
+ | |||
+ | monservo9.write (0); // alors le servomoteur 9 prend un angle de 180°. | ||
+ | |||
+ | monservo8.write (0); // alors le servomoteur 8 prend un angle de 180°. | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | |||
+ | { | ||
+ | |||
+ | etatbouton1 = digitalRead (bouton1); // On lit l’état du bouton 1 pour savoir s’il est ouvert ou fermé | ||
+ | |||
+ | etatbouton2 = digitalRead (bouton2); // On lit l’état du bouton 1 pour savoir s’il est ouvert ou fermé | ||
+ | |||
+ | |||
+ | if (etatbouton1 == HIGH) { // Si la variable “bouton1” est ouverte, à l’état haut, donc laisse passer le courant. | ||
+ | |||
+ | monservo11.write (180); // alors le servomoteur 11 prend un angle de 180°. | ||
+ | |||
+ | monservo10.write (180); // alors le servomoteur 10 prend un angle de 180°. | ||
+ | |||
+ | monservo8.write (180); // alors le servomoteur 8 prend un angle de 180°. | ||
+ | |||
+ | delay(1000) ; // on attend un délais de 5 secondes | ||
+ | |||
+ | monservo11.write (0); // le servomoteur 11 revient à l’angle 0, sa position de départ | ||
+ | |||
+ | monservo10.write (0); // le servomoteur 10 revient à l’angle 0, sa position de départ. | ||
+ | |||
+ | monservo8.write (0); // le servomoteur 8 revient à l’angle 0, sa position de départ | ||
+ | |||
+ | } | ||
+ | |||
+ | if (etatbouton2 == HIGH) { // Si la variable “bouton2” est ouverte, à l’état haut, donc laisse passer le courant. | ||
+ | |||
+ | monservo12.write (180); // alors le servomoteur12 prend un angle de 180°. | ||
+ | |||
+ | monservo11.write (180); // alors le servomoteur11 prend un angle de 180°. | ||
+ | |||
+ | monservo9.write (180); // alors le servomoteur9 prend un angle de 180°. | ||
+ | |||
+ | monservo8.write (180); // alors le servomoteur9 prend un angle de 180° | ||
+ | |||
+ | delay(1000) ; // on attend un délais de 5 secondes | ||
+ | |||
+ | monservo12.write (0); // le servomoteur 12 revient à l’angle 0, sa position de départ. | ||
+ | |||
+ | monservo11.write (0); // le servomoteur 11 revient à l’angle 0, sa position de départ | ||
+ | |||
+ | monservo9.write (0); // le servomoteur 9 revient à l’angle 0, sa position de départ | ||
+ | |||
+ | monservo8.write (0); // le servomoteur 8 revient à l’angle 0, sa position de départ | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | { | ||
+ | |||
+ | analogRead (A0); | ||
+ | |||
+ | valPOTAR = analogRead (POTAR); | ||
+ | |||
+ | analogWrite (9, valPOTAR/4); | ||
+ | |||
+ | // 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); | ||
+ | |||
+ | // 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,1,humC); | ||
+ | |||
+ | dtostrf (pres,5,2,presC); | ||
+ | |||
+ | // on imprime les valeurs sur le moniteur série | ||
+ | |||
+ | // Première ligne, normal | ||
+ | |||
+ | |||
+ | ssd1306_printFixed (0, 8, "Temp:", STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed(56, 8, tempC , STYLE_BOLD); | ||
+ | |||
+ | ssd1306_printFixed (96, 8, "C", STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed(0, 16,"RH: ", STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed(56, 16, humC , STYLE_BOLD); | ||
+ | |||
+ | ssd1306_printFixed(96, 16,"%", STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed(0, 24, "Pres: ", STYLE_NORMAL); | ||
+ | |||
+ | ssd1306_printFixed(56, 24, presC , STYLE_BOLD); | ||
+ | |||
+ | ssd1306_printFixed(96, 24, "hPa" , STYLE_NORMAL); | ||
+ | |||
+ | if (hum > 60 && hum <80) | ||
+ | |||
+ | { | ||
+ | |||
+ | //Allumage rotatif des Leds 0 à 5 en bleu suivant valeur de délais | ||
+ | |||
+ | |||
+ | for( int i = 0; i < 12; i++){ | ||
+ | |||
+ | leds[i] = CRGB::Blue; | ||
+ | |||
+ | FastLED.show(); | ||
+ | |||
+ | delay (60); | ||
+ | |||
+ | } | ||
+ | |||
+ | for( int i = 0; i < 12; i++){ | ||
+ | |||
+ | leds[i] = CRGB::Black; | ||
+ | |||
+ | FastLED.show(); | ||
+ | |||
+ | delay (20); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | else { | ||
+ | |||
+ | //Allumage rotatif des Leds 6 à 11 en rouge suivant valeur de délais | ||
+ | |||
+ | for( int i = 0; i < 12; i++){ | ||
+ | |||
+ | leds[i] = CRGB::Orange; | ||
+ | |||
+ | FastLED.show(); | ||
+ | |||
+ | delay (60); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | // Extinction rotative des 12 Led suivant valeur de délais | ||
+ | |||
+ | for( int i = 0; i < 12; i++){ | ||
+ | |||
+ | leds[i] = CRGB::Black; | ||
+ | |||
+ | FastLED.show(); | ||
+ | |||
+ | delay (20); | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | }</translate> | ||
}} | }} | ||
{{Materials | {{Materials | ||
+ | |Prerequisites={{Prerequisites}} | ||
|Tuto_Attachments={{Tuto Attachments | |Tuto_Attachments={{Tuto Attachments | ||
− | |Attachment= | + | |Attachment=Bento_Rock_IMG_20220616_123929.jpg |
+ | }}{{Tuto Attachments | ||
+ | |Attachment=Bento_Rock_images.jpg | ||
}}{{Tuto Attachments}} | }}{{Tuto Attachments}} | ||
+ | }} | ||
+ | {{Tuto Step | ||
+ | |Step_Title=<translate>Téléchargement Main E-Nable</translate> | ||
+ | |Step_Content=<translate>Télécharger et imprimer la main E-Nable ici : https://www.thingiverse.com/thing:1453190/files</translate> | ||
+ | |Step_Picture_00=Bento_Rock_images.jpg | ||
}} | }} | ||
{{Tuto Step | {{Tuto Step |
Auteur arnaud villeneuve | Dernière modification 16/06/2022 par Arnaud-Villeneuve
Bento_Rock_IMG_20220616_123914.jpg fabriquer une main électronique
Télécharger et imprimer la main E-Nable ici : https://www.thingiverse.com/thing:1453190/files
fr none 0 Draft
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #