Bento Rock : Différence entre versions

 
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=Bento_Rock_IMG_20220616_123914.jpg
+
|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

Version actuelle datée du 16 juin 2022 à 12:15

Auteur avatararnaud villeneuve | Dernière modification 16/06/2022 par Arnaud-Villeneuve

L'étage de la Bento Rock comporte une main E-Nable imprimée en 3D actionnée par cinq servomoteurs, un pour chaque doigts. deux boutons poussoirs sont disponibles pour que la main puisse faire deux mouvements. Si vous aimez le rock, appuyer sur bouton de droite. La main fera les cornes du diable en signe d'accord avec votre choix. Dans le cas contraire, si vous n'aimez pas le rock, lorsque vous appuyez sur le bouton de gauche. La main lèvera le majeur en signe de désaccord.
Difficulté
Facile
Durée
2 jour(s)
Catégories
Électronique, Robotique
Coût
70 EUR (€)

Introduction

Étape 1 - Téléchargement Main E-Nable

Télécharger et imprimer la main E-Nable ici : https://www.thingiverse.com/thing:1453190/files




Étape 2 -

Commentaires

Draft