Lunettes connectées « Smart Match-Making » avec Arduino 101 et tinyTILE BLE
Composants nécessaires
- 2 × Intel tinyTILE (ou autres modules BLE compatibles)
- 2 × Arduino 101 (optionnel, pour développement)
- 2 × Panneau LCD à cristal liquide contrôlable (Adafruit Liquid Crystal Light Valve)
- 2 × Batterie Li-Ion 100 mAh
- 4 × Connecteur JST-PH 2 broches SMT angle droit (Adafruit)
- 2 × Câble d'extension batterie JST-PH (Adafruit)
- 2 × Interrupteur à glissière
- 3 × Résistance 10 kΩ
- 1 × Bouton poussoir 12 mm (SparkFun)
- 2 × LED génériques (pour phase de développement uniquement)
- 1 × Plaque d'essai (développement uniquement)
- Fils de connexion (développement uniquement)
Outils nécessaires
- Imprimante 3D
- Fer à souder
Applications et services en ligne
- Arduino IDE
- Arduino Web Editor
À propos du projet
Au lieu d'utiliser une application, et si vous pouviez envoyer un signal pour établir un contact visuel avec quelqu'un qui vous intéresse, dans un cadre social, même de loin ? Je ne propose pas une nouvelle façon de draguer, j'explore une nouvelle utilisation du Bluetooth dans le domaine des interactions humaines.
Quand j'ai découvert que les modules Intel Curie peuvent agir comme dispositifs BLE central et périphérique, j'ai immédiatement voulu créer ces lunettes. Grâce à un tutoriel Adafruit, le cadre de référence d'une lunette LCD imprimée en 3D est disponible. J'ai ajouté le contrôle BLE (au lieu d'un interrupteur) de deux paires de lunettes simultanément, l'une étant le maître (central) et l'autre l'esclave (périphérique), et j'ai redessiné les montures 3D.
Ce projet a été développé d'abord sur Arduino 101 puis prototypé sur tinyTILE, tous deux équipés de modules Intel Curie. Même si ces modules ne sont plus disponibles, la méthodologie reste applicable. J'imagine de nombreuses façons d'utiliser les capacités central/périphérique du Bluetooth et j'attends vos discussions sur ce sujet.
Étape 1 : Développement
Deux Arduino 101 et deux LED ont servi à développer le circuit et tester le code. Commencer sur plaque d'essai est essentiel vu la complexité du circuit final.
Pour le périphérique, utilisez l'exemple CurieBLE → Peripheral → LED en inversant HIGH/LOW (voir raison à l'étape finale). Le code pour le central est fourni à la fin du projet ; il est presque identique à CurieBLE → Central → LEDcontrol avec quelques lignes ajoutées pour les LCD.
Le tinyTILE est quasi identique à l'Arduino 101 mais en format miniature. Le rectangle central est le module Intel Curie. Ils acceptent le même code. L'Arduino 101 est plus facile pour le prototypage, le tinyTILE plus adapté aux wearables. Je développe sur Arduino 101 puis transfère sur tinyTILE.
Étape 2 : Impression 3D
J'ai redessiné les montures avec SolidWorks en partant du design Adafruit. Vous pouvez télécharger leur design de base et le modifier. Mes designs (forme cœur et univers) sont en pièces jointes. Le design peut être adapté à votre visage ; certaines entreprises proposent désormais un scan 3D du visage pour des lunettes sur mesure.
Étape 3 : Assemblage
Suivez les conseils d'Adafruit pour le câblage, la soudure et le montage. J'ai juste ajouté les tinyTILE et le bouton. Attention à couper les fils aux bonnes longueurs.
Étape 4 : C'est fini, amusez-vous !
Au démarrage, une tension est appliquée aux LCD, les rendant opaques (lunettes de soleil). Quand on appuie sur le bouton du maître, la tension est coupée sur le maître, ce qui signale via Bluetooth au esclave de couper sa tension aussi → les deux lunettes deviennent transparentes.
Les deux lunettes fonctionnent à plusieurs mètres de distance (portée BLE). Testé à la maison : le « Cœur » attire l'attention de l' « Univers » à au moins 15 pas.
Imaginez remplacer le bouton par un geste, un hochement de tête ou la synchronisation des battements cardiaques !
Cœur (maître=central) : "J'aime ton esprit sophistiqué <3"
Univers (esclave=périphérique) : "Je te vois. Discutons."
Code : Contrôle bouton pour le central
Quasi identique à l'exemple CurieBLE.
/* Copyright (c) 2016 Intel Corporation. All rights reserved. */
#include
const int buttonPin = 3;
int oldButtonState = LOW;
const int ledPin = 5; // Broche pour le LCD (remplace LED)
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
BLE.begin();
Serial.println("BLE Central - LED control");
BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}
void loop() {
BLEDevice peripheral = BLE.available();
if (peripheral) {
Serial.print("Found ");
Serial.print(peripheral.address());
Serial.print(" '");
Serial.print(peripheral.localName());
Serial.print("' ");
Serial.print(peripheral.advertisedServiceUuid());
Serial.println();
BLE.stopScan();
controlLed(peripheral);
BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}
}
void controlLed(BLEDevice peripheral) {
Serial.println("Connecting ...");
if (!peripheral.connect()) { Serial.println("Failed to connect!"); return; }
Serial.println("Connected");
Serial.println("Discovering attributes ...");
if (!peripheral.discoverAttributes()) { Serial.println("Attribute discovery failed!"); peripheral.disconnect(); return; }
Serial.println("Attributes discovered");
BLECharacteristic ledCharacteristic = peripheral.characteristic("19b10001-e8f2-537e-4f6c-d104768a1214");
if (!ledCharacteristic) { Serial.println("Peripheral does not have LED characteristic!"); peripheral.disconnect(); return; }
else if (!ledCharacteristic.canWrite()) { Serial.println("Peripheral does not have a writable LED characteristic!"); peripheral.disconnect(); return; }
while (peripheral.connected()) {
int buttonState = digitalRead(buttonPin);
if (oldButtonState != buttonState) {
oldButtonState = buttonState;
if (buttonState) {
Serial.println("button pressed");
ledCharacteristic.writeByte(0x01);
digitalWrite(ledPin, LOW); // LCD ON (transparent)
} else {
Serial.println("button released");
ledCharacteristic.writeByte(0x00);
digitalWrite(ledPin, HIGH); // LCD OFF (opaque)
}
}
}
Serial.println("Peripheral disconnected");
}
Schéma de câblage
Central : broche 3 pour bouton, broche 5 pour LCD. Périphérique : broche 6 pour LCD.
Processus de fabrication
- Lunettes de soleil : design, matériaux et normes de protection oculaire
- Piles : de la pile de Volta aux cellules lithium modernes
- UnifiedWater v1 – Kit complet de capteur de qualité d'eau Arduino
- Solutions d'alimentation optimisées pour projets Arduino
- Fabriquez votre casque Iron Man et réacteur Arc avec Arduino - Guide complet
- Système de vote portable avec connectivité GSM
- Batterie automobile : rôle, types, entretien et spécifications
- Comment tester votre alternateur : Méthodes expertes pour résultats fiables
- 7 signes clairs que votre alternateur est en panne