Distributeur de Bonbons DIY avec Arduino : Construisez une Machine à Snacks Intelligente
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino UNO | 1 |
| Servomoteur 180° | 1 |
| Écran LCD 16x2 (I2C, blanc sur bleu) | 1 |
| Bouton poussoir 12mm | 1 |
| Shield PHPoC pour Arduino | 1 |
| Capteur de distance IR | 1 |
| Interrupteur d'alimentation (bouton) | 1 |
| Plaque d'essai (breadboard) | 1 |
Outils nécessaires
- Fer à souder
Applications et services en ligne
- Arduino IDE
À propos du projet
Le projet
Ce distributeur de bonbons automatique utilise seulement trois composants principaux : un capteur IR, un servomoteur et un bouton poussoir. Le projet se décompose en cinq étapes :
- Montage de l'Arduino Uno R3
- Programmation et configuration
- Fabrication du boîtier et des pièces mécaniques
- Installation de l'électronique
- Tests et mise en service
Le développement du code a été la partie la plus chronophage, nécessitant de nombreux essais-erreurs et recherches en ligne. Ce projet est une version simplifiée inspirée du distributeur avec Google Assistant de gatoninja236.
Fabrication du boîtier et des pièces mécaniques
La construction mécanique a pris une journée complète, avec plusieurs ajustements.
Étape 1 : Disposition des composants
Tous les composants sont d'abord câblés sur une plaque de carton pour valider le fonctionnement. Des fils de couleurs différentes facilitent le repérage.
Étape 2 : Conception du boîtier
Le boîtier est réalisé principalement en carton, avec une face arrière en acrylique transparent.
- Face avant & arrière : 20 cm × 16 cm (arrière en acrylique)
- Côtés : 12 cm × 16 cm
- Dessus & dessous : 20 cm × 12 cm
Étape 3 : Assemblage et découpes
Assemblage provisoire au ruban adhésif, puis découpes pour les composants :
- Écran LCD : 7,2 cm × 2,5 cm
- Boutons : 1,2 cm × 1,2 cm
- Gobelet récepteur : 9 cm × 12 cm (hauteur × largeur), profondeur 9 cm
- Emplacements pour capteur IR et servomoteur
Le distributeur intègre un système à étages pour que les bonbons ne tombent pas tous d'un coup.
Étape 4 : Intégration de l'électronique
La breadboard et l'Arduino sont superposés et fixés sur support acrylique pour gagner de la place.
Étape 5 : Câblage et fixation des composants
Installation de l'écran LCD, des boutons, puis du servomoteur. Un interrupteur d'alimentation sur batterie est ajouté à l'arrière.
Étape 6 : Résultat final
Code complet (Candy Dispenser.ino)
//------ BIBLIOTHÈQUES ------
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
//------ CONFIGURATION ------
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse I2C 0x27, 16 colonnes, 2 lignes
Servo myservo;
int pos = 90; // Position initiale du servo (90°)
const int buttonCLK = 7; // Bouton "Peu de bonbons" (horaire)
const int buttonAntiCLK = 6; // Bouton "Beaucoup de bonbons" (anti-horaire)
const int avoidPin = 5; // Capteur IR (détection gobelet)
int set = 0; // État de sélection (0=rien, 1=peu, 2=beaucoup)
void setup() {
lcd.begin();
lcd.clear();
myservo.attach(9); // Servo sur broche 9
pinMode(buttonCLK, INPUT);
pinMode(buttonAntiCLK, INPUT);
pinMode(avoidPin, INPUT);
Serial.begin(9600);
lcd.backlight();
// Écran de bienvenue
lcd.setCursor(3, 0); lcd.print("Bienvenue au");
lcd.setCursor(3, 1); lcd.print("Candy Land");
delay(2000);
lcd.clear();
// Choix de la quantité
lcd.setCursor(0, 0); lcd.print("Combien de");
lcd.setCursor(0, 1); lcd.print("bonbons ?");
lcd.setCursor(0, 0); lcd.print("Peu Beaucoup");
delay(5000);
}
void loop() {
// --- GESTION DES BOUTONS ---
if (digitalRead(buttonCLK) == HIGH) { // Bouton "Peu"
lcd.clear(); lcd.print("Placez le gobelet");
delay(2000); lcd.clear();
set = 1;
}
if (digitalRead(buttonAntiCLK) == HIGH) { // Bouton "Beaucoup"
lcd.clear(); lcd.print("Placez le gobelet");
delay(2000); lcd.clear();
set = 2;
}
// --- EXÉCUTION SELON CHOIX ---
if (set == 1) IRCLK(); // Mode "Peu"
if (set == 2) IRAntiCLK(); // Mode "Beaucoup"
}
// --- FONCTIONS SERVO ---
void TurnClockwise() {
Serial.println("Bonbon type 1 distribué");
CandyText1();
for (pos = 90; pos < 180; pos += 1) {
myservo.write(pos);
delay(15);
}
if (pos == 180) {
delay(2000);
ThankYouText();
}
}
void TurnAntiClockwise() {
Serial.println("Bonbon type 2 distribué");
CandyText2();
for (pos = 90; pos < 180; pos += 1) {
myservo.write(pos);
delay(20);
}
if (pos == 180) {
delay(3000);
ThankYouText();
}
}
// --- DÉTECTION GOBELET (CAPTEUR IR) ---
void IRCLK() {
delay(1000);
bool avoidVal = digitalRead(avoidPin);
lcd.setCursor(0, 0); lcd.print("Detection gobelet");
lcd.setCursor(0, 14); lcd.print("...");
if (avoidVal == LOW) { // Gobelet détecté (niveau bas)
lcd.clear(); lcd.print("Gobelet place");
delay(2000);
TurnClockwise();
}
}
void IRAntiCLK() {
delay(1000);
bool avoidVal = digitalRead(avoidPin);
lcd.setCursor(0, 0); lcd.print("Detection gobelet");
lcd.setCursor(0, 14); lcd.print("...");
if (avoidVal == LOW) {
lcd.clear(); lcd.print("Gobelet place");
delay(2000);
TurnAntiClockwise();
}
}
// --- AFFICHAGES LCD ---
void CandyText1() {
lcd.clear();
lcd.setCursor(4, 0); lcd.print("Service");
lcd.setCursor(1, 1); lcd.print("Peu bonbons");
}
void CandyText2() {
lcd.clear();
lcd.setCursor(4, 0); lcd.print("Service");
lcd.setCursor(3, 1); lcd.print("Beaucoup");
}
void ThankYouText() {
lcd.clear();
lcd.setCursor(5, 0); lcd.print("Merci");
lcd.setCursor(6, 1); lcd.print("!");
delay(15);
software_Reset(); // Redémarrage logiciel
}
void software_Reset() {
asm volatile ("jmp 0");
}
Schéma de câblage
Suivez le code couleur des fils sur le schéma ci-dessous :
Processus de fabrication
- Le bâton de sucre d'orge : histoire, production et science de cette friandise de Noël
- Le Candy Corn : De la Tradition à la Production Moderne
- Jawbreaker : histoire, ingrédients et fabrication d'un bonbon dur classique
- Barbe à papa : du classique forain à la technologie de production moderne
- La Science Douce des Bonbons Gélifiés : De l'Histoire à la Production Moderne
- M&M's® : de l'invention à la production moderne
- Panneau commutateurs et LED pour Microsoft Flight Simulator 2020 basé sur Arduino
- Construire un Spybot Arduino piloté par Bluetooth
- FlickMote : Télécommande IR à gestes pour maison connectée