Matériel nécessaire :
<br/>
*1 Plaque MDF 3mm : 3€
*1 Arduino UNO : 25€
*1 Potentiomètre : 1€
*1 Interrupteur : 1€
*1 Breadboard + câbles prototypage : 10€
*Ecran OLED SSD1306 : 5€
*Capteur Température/Pression/Humidité BME280 : 6€
*Capteur sonore : 2€
*Led Ring 12 LEDs WS2812 : 5€
*Servo moteur : 3€
*Bouton poussoir + capteur capacitif TTP223B : 3€
*Lot de 3 détecteurs Micro-Ondes RCWL-0516 : 6€
*2 bornes de raccordement de type Wago : 2€
*Peinture, ruban adhésif (dont décoratif) , consommable imprimante 3D, petite visserie, colle, divers : 10€
Soit environ 70 à 80€ pour une seule unité ; pour plusieurs unités, avec achat de lots, les tarifs devraient être bien revus à la baisse.
Outils
* 1 découpeuse laser (pour découper les plaques de bois et personnalisation par gravure et logiciel adapté
* 1 imprimante 3D (pour imprimer le cache écran, la tourelle et le détonateur) et slicer 3D adapté
* 1 fer à souder + étain (pour souder tous les câbles sur les composants le nécessitant (LED Ring, bouton poussoir, ...)
* 1 perceuse
* éventuelle fraiseuse si on veut faire le trou pour le servo moteur par ce moyen
* pince coupante, cutter, scie
* colle à bois, colle plastique, ruban adhésif
Logiciels :
* Inkscape + plugin "J Tech Photonics Laser Tool" pour la découpe du bois et gravure
* Sketchup pour la modélisation 3D du cache écran (facultatif, fichier fourni)
* ThinkerCAD pour la modélisation 3D de la tourelle et du détonateur (facultatif, fichiers fournis)
* IDE Arduino pour l'écriture du code et téléversement vers l'Arduino
+<nowiki>/*<br /><br /> *Qualité de l’air avec arduino et capteur Grove v1.3<br /><br /> *Le capteur doit être branché quelques heures avant la première utilisation <br /><br /> *La calibration se fait par laisser le capteur a l’extérieur pendant au moins 20 min<br /><br /> */<br /><br />//----------------------------------------------------------------------------------------<br /><br />// Inclusion des librairies pour OLED <br /><br />//--------------------------------------<br /><br />#include <Wire.h><br /><br />#include <Adafruit_GFX.h><br /><br />#include <Adafruit_SSD1306.h><br /><br />//--------------------------------------<br /><br />//Declaration des variables<br /><br />//--------------------------------------<br /><br />#define redLed 13<br /><br />#define greenLed 8<br /><br />#define orangeLed 7<br /><br />#define capteur A0<br /><br />#define OLED_RESET 4<br /><br />int valeurCapteur = 0;<br /><br />String qualite = "";<br /><br />int volt;<br /><br />// on déclare notre LCD.<br /><br />Adafruit_SSD1306 display(OLED_RESET);<br /><br />void setup() {<br /><br /> Serial.begin(9600);// initialise la communication avec l'ordinateur<br /><br /> display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // // initialisation de l'ecran OLED<br /><br /> display.display(); <br /><br /> display.clearDisplay(); // Netoie l’ecran<br /><br /> pinMode(redLed, OUTPUT);// indique que la broche redLed est une sortie :<br /><br /> pinMode(greenLed, OUTPUT);// indique que la broche greenLed est une sortie :<br /><br /> pinMode(orangeLed, OUTPUT);// indique que la broche orangeLed est une sortie :<br /><br /> pinMode(capteur, INPUT);// indique que la broche du capteur de la qualité de l'air redLed est une entrée :<br /><br /> display.setCursor(0,0);// On place le curseur en 0,0<br /><br /> display.setTextSize(2);// On définie la taille du texte<br /><br /> display.setTextColor(WHITE);// On définie la couleur du texte<br /><br /> display.println("Heating");<br /><br /> //display.setCursor(0,1);<br /><br /> // display.println("ATTENDRE");<br /><br /> display.display();<br /><br /> delay(20000);<br /><br /> display.clearDisplay(); <br /><br />}<br /><br />void loop() {<br /><br /> // put your main code here, to run repeatedly:<br /><br />valeurCapteur = analogRead(capteur);<br /><br />//volt = (valeurCapteur*5)/1024;<br /><br />int grafX = 0;<br /><br />if (valeurCapteur<=45) {<br /><br /> //digitalWrite(greenLed, HIGH);<br /><br /> qualite = "Tout va bien";<br /><br /> Serial.println(qualite);<br /><br /> delay(1000);<br /><br /> display.setCursor(0,0);<br /><br /> display.setTextSize(1);<br /><br /> display.setTextColor(WHITE);<br /><br /> display.println("OK");<br /><br /> display.println(valeurCapteur);<br /><br /> grafX = map(valeurCapteur, 0, 135, 0, 127);<br /><br /> display.fillRect(0, 20,grafX, 5, WHITE);<br /><br /> display.display();<br /><br /> display.clearDisplay();<br /><br /> digitalWrite(13, LOW);<br /><br /> }<br /><br /> else if (valeurCapteur>45&& valeurCapteur<=70){<br /><br /> //digitalWrite(greenLed, HIGH);<br /><br /> qualite = "Situation tolerable ";<br /><br /> Serial.println(qualite);<br /><br /> delay(1000);<br /><br /> display.setCursor(0,0);<br /><br /> display.setTextSize(1);<br /><br /> display.setTextColor(WHITE);<br /><br /> display.println("AH AH");<br /><br /> display.println(valeurCapteur);<br /><br /> grafX = map(valeurCapteur, 0, 135, 0, 127);<br /><br /> display.fillRect(0, 20,grafX, 5, WHITE);<br /><br /> display.display();<br /><br /> display.clearDisplay();<br /><br /> digitalWrite(13, LOW);<br /><br /> }<br /><br /> else if (valeurCapteur>70&& valeurCapteur<=100){<br /><br /> //digitalWrite(orangeLed, HIGH);<br /><br /> qualite = "Etat mauvais";<br /><br /> Serial.println(qualite);<br /><br /> delay(1000);<br /><br /> display.setCursor(0,0);<br /><br /> display.setTextSize(1);<br /><br /> display.setTextColor(WHITE);<br /><br /> display.println("Ca chauffe");<br /><br /> display.println(valeurCapteur);<br /><br /> grafX = map(valeurCapteur, 0, 135, 0, 127);<br /><br /> display.fillRect(0, 20,grafX, 5, WHITE);<br /><br /> display.display();<br /><br /> display.clearDisplay();<br /><br /> digitalWrite(13, LOW);<br /><br /> }<br /><br /> else if (valeurCapteur>100&& valeurCapteur<=135){<br /><br /> //digitalWrite(redLed, HIGH);<br /><br /> qualite = "Ouvrir la fenetre";<br /><br /> Serial.println(qualite);<br /><br /> delay(1000);<br /><br /> display.setCursor(0,0);<br /><br /> display.setTextSize(1);<br /><br /> display.setTextColor(WHITE);<br /><br /> display.println("Ouvrez");<br /><br /> display.println(valeurCapteur);<br /><br /> grafX = map(valeurCapteur, 0, 135, 0, 127);<br /><br /> display.fillRect(0, 20,grafX, 5, WHITE);<br /><br /> display.display();<br /><br /> display.clearDisplay();<br /><br /> digitalWrite(13, LOW);<br /><br /> }<br /><br /> else if (valeurCapteur>135){<br /><br /> //digitalWrite(redLed, HIGH);<br /><br /> qualite = "Sortez";<br /><br /> Serial.println(qualite);<br /><br /> delay(1000);<br /><br /> display.setCursor(0,0);<br /><br /> display.setTextSize(1);<br /><br /> display.setTextColor(WHITE);<br /><br /> display.println("Sortez");<br /><br /> display.println(valeurCapteur);<br /><br /> grafX = map(valeurCapteur, 0, 135, 0, 127);<br /><br /> display.fillRect(0, 20,grafX, 5, WHITE);<br /><br /> display.display();<br /><br /> display.clearDisplay();<br /><br /> digitalWrite(13, HIGH);<br /><br /> }<br /><br />}</nowiki>