Ce projet amusant combine le capteur de couleur TCS3200D/TCS230 avec un personnage Minion basé sur le web. L'Arduino UNO R4 WiFi lit les couleurs du capteur et envoie la couleur détectée à un navigateur web via WebSocket. Le Minion sur la page web change la couleur de sa peau en temps réel pour correspondre à la couleur que vous placez devant le capteur ! Pour faciliter la création de l'interface web et gérer la communication en temps réel, nous utiliserons la Exemple d'application Web personnalisée Arduino - Tutoriel d'une interface Web simple pour les débutants..
L'Arduino UNO R4 lit les valeurs RGB du capteur de couleur TCS3200D/TCS230
L'Arduino convertit les valeurs RGB en code couleur hexadécimal
Le code couleur est envoyé à un navigateur web via WebSocket en temps réel
La page web affiche un Minion animé amusant dont le corps, les bras et les paupières changent de couleur
Nous fournissons également des instructions vidéo étape par étape en bas de ce tutoriel.
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.
À propos du capteur de couleur TCS3200D/TCS230 et DIYables WebApps
Découvrez le capteur de couleur TCS3200D/TCS230, la bibliothèque DIYables WebApps, et comment créer des applications web personnalisées dans les tutoriels ci-dessous :
L'Arduino lit le capteur de couleur toutes les 1 seconde.
Pour chaque lecture, il sélectionne les filtres rouge, vert et bleu un par un en utilisant les broches S2/S3, puis mesure la largeur d'impulsion sur la broche OUT.
Les valeurs RGB sont converties en chaîne de couleur hexadécimale (par exemple, #FF8000).
La chaîne de couleur hexadécimale est envoyée au navigateur web via WebSocket en utilisant la bibliothèque DIYables WebApps.
La page web reçoit la couleur et met à jour le corps, les bras et les paupières du Minion avec cette couleur en temps réel.
Code Arduino UNO R4 - Application web Minion capteur de couleur
Le code comprend 4 fichiers :
ColorSensor.ino - Sketch Arduino principal : lit le capteur de couleur et envoie la couleur à la page web
CustomWebApp.h - Fichier d'en-tête : définit la classe de page d'application web personnalisée
CustomWebApp.cpp - Fichier d'implémentation : gère la communication WebSocket avec l'identifiant "Color Sensor:"
custom_page_html.h - Page web : contient le HTML/CSS/JavaScript du Minion animé qui reçoit les couleurs et met à jour la peau du Minion
ColorSensor.ino
/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-r4/arduino-uno-r4-color-sensor-via-web*/#include <DIYablesWebApps.h>#include"CustomWebApp.h"// CHANGE THESE TO YOUR WIFI DETAILSconstchar WIFI_SSID[] = "YOUR_WIFI_SSID";constchar WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD";intstatus = WL_IDLE_STATUS;// TCS3200 Pinsconstint S0 = 4, S1 = 3, S2 = 6, S3 = 5, sensorOut = 7;UnoR4ServerFactory serverFactory;DIYablesWebAppServerwebAppsServer(serverFactory, 80, 81);DIYablesHomePage homePage;CustomWebAppPage customPage;unsignedlong lastColorRead = 0;voidsetup() {Serial.begin(9600);// Initialize TCS3200 pinspinMode(S0, OUTPUT);pinMode(S1, OUTPUT);pinMode(S2, OUTPUT);pinMode(S3, OUTPUT);pinMode(sensorOut, INPUT);digitalWrite(S0, HIGH);digitalWrite(S1, LOW); // 20% frequency scalingwebAppsServer.addApp(&homePage);webAppsServer.addApp(&customPage);// Check for the WiFi moduleif (WiFi.status() == WL_NO_MODULE) {Serial.println("Communication with WiFi module failed!");// Stop program executionwhile (true); }String fv = WiFi.firmwareVersion();if (fv < WIFI_FIRMWARE_LATEST_VERSION) {Serial.println("Please upgrade the firmware"); }// Attempt to connect to WiFi networkwhile (status != WL_CONNECTED) {// Connect to WPA/WPA2 network (change if using open or WEP)status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD);// Wait 10 seconds for connectiondelay(10000); }webAppsServer.begin();Serial.println("Color Web Server Ready!");}voidloop() {webAppsServer.loop();// Read color every 1 secondif (millis() - lastColorRead > 1000) {// Read Red colordigitalWrite(S2, LOW);digitalWrite(S3, LOW);int r = map(pulseIn(sensorOut, LOW), 31, 150, 255, 0);// Read Green colordigitalWrite(S2, HIGH);digitalWrite(S3, HIGH);int g = map(pulseIn(sensorOut, LOW), 35, 180, 255, 0);// Read Blue colordigitalWrite(S2, LOW);digitalWrite(S3, HIGH);int b = map(pulseIn(sensorOut, LOW), 30, 150, 255, 0);// Convert to HEX and send to Webchar hexColor[8]; sprintf(hexColor, "#%02X%02X%02X", constrain(r, 0, 255), constrain(g, 0, 255), constrain(b, 0, 255)); customPage.sendToWeb(String(hexColor));Serial.println("Sent to Minion: " + String(hexColor)); lastColorRead = millis(); }}
CustomWebApp.h
/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-r4/arduino-uno-r4-color-sensor-via-web*/#ifndef CUSTOM_WEBAPP_H#define CUSTOM_WEBAPP_H#include <DIYablesWebApps.h>/** * Simple Custom WebApp Page * * This is a template for creating your own custom web applications. * It provides basic controls like buttons and sliders that communicate * with your Arduino in real-time. */class CustomWebAppPage : public DIYablesWebAppPageBase {private:// WebSocket message identifier for this custom appstaticconstString APP_IDENTIFIER;public: CustomWebAppPage();// ========================================// REQUIRED METHODS - USED BY LIBRARY - DON'T CHANGE THESE!// ========================================void handleHTTPRequest(IWebClient& client) override;void handleWebSocketMessage(IWebSocket& ws, const char* message, uint16_tlength) override;const char* getPageInfo() constoverride;String getNavigationInfo() constoverride;// ========================================// YOUR METHODS - USE THESE IN YOUR CODE!// ========================================void onCustomMessageReceived(void (*callback)(const String& payload));void sendToWeb(const String& message);};#endif
CustomWebApp.cpp
/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-uno-r4/arduino-uno-r4-color-sensor-via-web*/#include"CustomWebApp.h"#include"custom_page_html.h"// Define the static member - WebSocket message identifier for this custom appconstString CustomWebAppPage::APP_IDENTIFIER = "Color Sensor:";// Callback function for handling messages from web browservoid (*customMessageCallback)(const String& payload) = nullptr;CustomWebAppPage::CustomWebAppPage() : DIYablesWebAppPageBase("/custom") {}void CustomWebAppPage::handleHTTPRequest(IWebClient& client) {// Send the HTML page to web browser sendHTTPHeader(client); client.print(CUSTOM_PAGE_HTML);}void CustomWebAppPage::handleWebSocketMessage(IWebSocket& ws, const char* message, uint16_tlength) {String messageStr = String(message, length);Serial.print("Color Sensor WebApp received: ");Serial.println(messageStr);// Only handle messages that start with our app identifierif (messageStr.startsWith(APP_IDENTIFIER)) {String payload = messageStr.substring(APP_IDENTIFIER.length()); // Remove identifier// Call your callback function with the payloadif (customMessageCallback) { customMessageCallback(payload); } }}void CustomWebAppPage::onCustomMessageReceived(void (*callback)(const String& payload)) { customMessageCallback = callback;}void CustomWebAppPage::sendToWeb(const String& message) {// Send message to web browser with app identifierString fullMessage = APP_IDENTIFIER + message; broadcastToAllClients(fullMessage.c_str());}const char* CustomWebAppPage::getPageInfo() const {return"🔧 Color Sensor WebApp";}String CustomWebAppPage::getNavigationInfo() const {String result = "<a href=\""; result += getPagePath(); result += "\" class=\"app-card custom\" style=\"background: linear-gradient(135deg, #007bff 0%, #0056b3 100%);\">"; result += "<h3>🔧 Color Sensor WebApp</h3>"; result += "<p>Simple template for your own apps</p>"; result += "</a>";return result;}
Mettez à jour les valeurs de calibration dans les appels map() à l'intérieur de loop() avec vos propres valeurs de calibration de l'étape de calibration. Par exemple, si votre calibration vous a donné redMin = 42, redMax = 210, greenMin = 55, greenMax = 185, blueMin = 60, blueMax = 172, changez les lignes en :
int r = map(pulseIn(sensorOut, LOW), 42, 210, 255, 0);int g = map(pulseIn(sensorOut, LOW), 55, 185, 255, 0);int b = map(pulseIn(sensorOut, LOW), 60, 172, 255, 0);
Cliquez sur le bouton Upload dans l'IDE Arduino pour télécharger le code vers l'Arduino UNO R4.
Ouvrez le moniteur série. Vous verrez une sortie comme celle-ci :
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Color Web Server Ready!
INFO: Added app /
INFO: Added app /custom
DIYables WebApp Library
Platform: Arduino Uno R4 WiFi
Network connected!
IP address: 192.168.0.2
HTTP server started on port 80
WebSocket server started on port 81
==========================================
DIYables WebApp Ready!
==========================================
📱 Web Interface: http://192.168.0.2
🔗 WebSocket: ws://192.168.0.2:81
📋 Available Applications:
🏠 Home Page: http://192.168.0.2/
🔧 Color Sensor WebApp: http://192.168.0.2/custom
==========================================
Sent to Minion: #FFD200
Sent to Minion: #00C832
Sent to Minion: #0028FF
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
Si vous ne voyez rien, redémarrez la carte Arduino.
Notez l'adresse IP affichée, et entrez cette adresse dans la barre d'adresse d'un navigateur web sur votre smartphone ou PC.
Exemple : http://192.168.0.2
Vous verrez la page d'accueil. Cliquez sur le lien Color Sensor WebApp.
Ou vous pouvez accéder directement à la page Minion par l'adresse IP suivie de /custom. Par exemple : http://192.168.0.2/custom
Vous verrez le personnage Minion animé sur la page web.
Placez un objet coloré devant le capteur TCS3200 — la couleur de peau du Minion changera en temps réel pour correspondre à la couleur détectée !
Vous pouvez voir les instructions étape par étape dans la vidéo ci-dessous.
Fonctionnement du code
Côté Arduino (ColorSensor.ino)
Le sketch principal fait ce qui suit :
Initialise les broches du capteur TCS3200 : S0, S1 sont configurées pour une mise à l'échelle de fréquence de 20%. S2, S3 sont utilisées pour sélectionner les filtres de couleur.
Lit la couleur toutes les 1 seconde : Dans la loop(), l'Arduino sélectionne les filtres rouge, vert et bleu un par un, lit la largeur d'impulsion en utilisant pulseIn(), et mappe les valeurs brutes vers des valeurs RGB 0-255 en utilisant vos nombres de calibration.
Convertit en hexadécimal : Les valeurs RGB sont formatées en chaîne de couleur hexadécimale comme #FF8000 en utilisant sprintf().
Envoie au navigateur web : La chaîne hexadécimale est envoyée à tous les clients web connectés via customPage.sendToWeb().
Côté page web (custom_page_html.h)
La page HTML contient :
Un personnage Minion animé construit entièrement avec CSS — incluant des yeux qui clignent, une bouche qui rit, et des pupilles qui bougent aléatoirement.
Connexion WebSocket : Le JavaScript se connecte au serveur WebSocket de l'Arduino (port 81) et écoute les messages de couleur entrants.
Mise à jour des couleurs : Quand un message comme #FF8000 est reçu, le corps, les bras et les paupières du Minion font une transition fluide vers la nouvelle couleur en utilisant la transition CSS.
Reconnexion automatique : Si la connexion WebSocket se perd, la page essaie automatiquement de se reconnecter toutes les 2 secondes.
Design responsive : Le Minion s'adapte automatiquement pour s'ajuster aux différentes tailles d'écran (téléphones, tablettes, ordinateurs de bureau).
Protocole de communication
Ce projet utilise le framework d'application web personnalisée DIYables WebApps avec l'identifiant "Color Sensor:" :
L'Arduino envoie : Color Sensor:#FF8000 (identifiant + couleur hexadécimale)
La page web reçoit : Supprime l'identifiant et applique la couleur hexadécimale restante #FF8000 au Minion
N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !