Convertir une souris optique en caméra Web Arduino

  • HyperX Pulsefire FPS Pro Souris ergonomique optique 6 boutons filaire USB
    Electricité Domotique, automatismes et sécurité Alarme : kit et accessoires Commande pour alarme HYPERX, Pulsefire FPS Pro Souris ergonomique optique 6 boutons filaire USB HyperX Pulsefire FPS Pro - Souris - ergonomique - optique - 6 boutons - filaire - USB
  • BRICOOMARKET Sharkoon Skiller SGM1 souris USB Optique 10800 DPI Noir 4044951018963
    Outillage ... Divers BRICOOMARKET, Dispositif d'entrée Interface de l'appareil USB Utilité Jouer Type de boutons Boutons poussoirs Quantité de boutons 12 type Scroll Roue Technologie de détecteur de mouvement Optique Résolution en mouvement 10800 DPI Utilisation recommandée PC/ordinateur
  • HP X200 - Souris - optique - sans fil - 2.4 GHz - récepteur sans fil USB - noir
    - Offre exclusivement réservée aux professionnels
  • BRICOOMARKET Souris droitier Corsair Scimitar PRO USB Optique 16000DPI CH-9304111-EU (Noir)
    Outillage ... Divers BRICOOMARKET, Dispositif d'entrée Interface de l'appareil USB Utilité Jouer Type de boutons Boutons pressoirs Quantité de boutons 17 type Scroll Roue Technologie de détecteur de mouvement Optique Résolution en mouvement 16000 DPI Utilisation recommandée PC/ordinateur
  • BRICOOMARKET Souris ambidextre ASUS Cerberus USB Optique 2500DPI 90YH00Q1-BAUA00 (Noir
    Outillage ... Divers BRICOOMARKET, Dispositif d'entrée Interface de l'appareil USB Utilité Jouer Type de boutons Boutons pressoirs Quantité de boutons 6 type Scroll Roue Technologie de détecteur de mouvement Optique Résolution en mouvement 2500 DPI Utilisation recommandée PC/ordinateur portable
  • BRICOOMARKET Fujitsu WI910 souris RF sans fil Optique 2000 DPI Noir S26381-K465-L100
    Outillage ... Divers BRICOOMARKET, Dispositif d'entrée Interface de l'appareil RF sans fil Utilité Bureau Quantité de boutons 6 type Scroll Roue Technologie de détecteur de mouvement Optique Résolution en mouvement 2000 DPI Utilisation recommandée Ordinateur portable Molette de défilement Oui
  • BRICOOMARKET Kingston HyperX Pulsefire FPS Pro souris USB Optique 16000 DPI Ambidextre Noir
    Outillage ... Divers BRICOOMARKET, Dispositif d'entrée Interface de l'appareil USB Utilité Jouer Type de boutons Boutons poussoirs Quantité de boutons 6 type Scroll Roue Technologie de détecteur de mouvement Optique Résolution en mouvement 16000 DPI Vitesse du mouvement (max) 450 pouces/minute
  • BRICOOMARKET Souris ambidextre USB ASUS ROG Strix Evolve Optique 7200DPI 90MP00J0-B0UA00
    Outillage ... Divers BRICOOMARKET, Dispositif d'entrée Interface de l'appareil USB Utilité Jouer Quantité de boutons 8 type Scroll Roue Technologie de détecteur de mouvement Optique Résolution en mouvement 7200 DPI Utilisation recommandée PC/ordinateur portable Boutons de souris programmables
  • Microsoft Arc Mouse - Souris - optique - 2 boutons - sans fil - Bluetooth 5.0 LE - noir
    Sans fil 2,4 GHz - portée de 9 mètresPliable pour plus de mobilitéMolette de défilementIndicateur du niveau des pilesMicro-récepteur enfichable Sans fil 2,4 GHz - portée de 9 mètres La technologie sans fil 2,4 GHz permet une connexion fiable: quasiment aucune interférence.#br/#Pliable pour plus de mobilité La
  • Microsoft Arc Mouse - Souris - optique - 2 boutons - sans fil - Bluetooth 5.0 LE - rose doux
    Se plie à plat pour les déplacementsInteractions intuitivesConception mince et moderneActivation et mise en veille d'un seul mouvementConvient à n'importe quel espace de travail Se plie à plat pour les déplacements La souris Microsoft Arc Mouse vous accompagne partout sans le poids et l'encombrement d'une
  • HP X1500 - Souris - optique - 3 boutons - filaire - USB - gris métallisé, noir brillant - pour OMEN by HP 15, 17, HP 22, 24, Pavilion 15, 59X, Pavilion Gaming 690, 790, Slimline 290
    Normes HP de premier ordre : 70 ans d'expérience. Contrôle qualité sévère. 1 des principaux fabricants d'ordinateurs portables au monde. HP fournit des produits de pointe construits conformément aux normes les plus rigoureuses de l'industrie pour améliorer la façon dont vous vous connectez et
  • Microsoft Pro IntelliMouse - Souris - pour droitiers - optique - 5 boutons - filaire - USB 2.0 - noir ombré
    Compatible avec USB 2.0 en vitesse maximale5 boutons, dont le clic de gauche et de droite et la molette de défilementDéfilement vertical1000 rapports par seconde, configurable par l'utilisateurVitesse de suivi : jusqu'à 400 po par seconde - Offre exclusivement réservée aux professionnels

La souris optique utilise une petite caméra qui enregistre la surface pour calculer les mouvements de la souris.
Dans ce tutoriel, je vais vous montrer comment afficher le signal vidéo de cette caméra dans votre navigateur.

La souris que j’ai démontée était une vieille Logitech RX 250 qui contient un capteur optique ADNS-5020.
Ce capteur enregistre des images de 15 x 15 pixels en niveaux de gris. Il calcule également les mouvements X-Y de la souris.

Caméra Web Arduino

Pour faire fonctionner les choses, vous aurez besoin de:
– arduino
– bouclier Ethernet
– souris optique avec capteur ADNS-5020
– Résistance 10K ohms

Connectez tout ensemble

Assurez-vous que les broches (NRESET, NCS, DSIO, SCLK) du capteur ne se connectent à rien sur la carte de la souris.
S’ils le font, coupez les traces. (J’ai retiré la puce principale et certaines résistances pour obtenir la même chose.)

Capteur de souris ADNS-5020

Soudez la résistance de 10K ohms entre NRESET et + 5V. Soudez ensuite les fils (environ 20 cm) aux broches NCS, DSIO, SCLK, + 5V, GND.
C’est un schéma que vous devriez terminer avec:

Schéma Arduino ADNS5020

Mettez le bouclier Ethernet sur Arduino et connectez-le au réseau local.
Connectez ensuite le capteur de la souris à Arduino comme ceci:
+ 5V ————– Arduino + 5V
GND ————– Arduino GND
NCS ————– Arduino numérique broche 7
SDIO ————– Broche numérique Arduino 6
SCLK ————– Arduino broche numérique 5

Croquis Arduino

Dans l’esquisse ci-dessous, remplacez la valeur receiverIP (dans mon cas 192, 168, 1, 102) par IP de votre ordinateur.
Téléchargez ensuite l’esquisse sur arduino.

#include 
#include
#include

byte arduinoMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress arduinoIP(192, 168, 1, 177); // desired IP for Arduino
unsigned int arduinoPort = 8888; // port of Arduino

IPAddress receiverIP(192, 168, 1, 102); // IP of udp packets receiver
unsigned int receiverPort = 6000; // port to listen on my PC

EthernetUDP Udp;

int SCLK = 5;
int SDIO = 6;
int NCS = 7;

void setup() {
Serial.begin(9600);
Ethernet.begin(arduinoMac,arduinoIP);
Udp.begin(arduinoPort);

pinMode(SCLK, OUTPUT);
pinMode(SDIO, OUTPUT);
pinMode(NCS, OUTPUT);

mouse_reset();
delay(10);
}

void loop() {
char img[225];
for (int i=0;i<225;i++){
img[i]=readLoc(0x0b);
img[i] &= 0x7F;
img[i]+=1;//if there is 0 value, part of udp package is lost
Serial.print(img[i], DEC);
Serial.print(",");
delay(2);
}
Serial.println();
Udp.beginPacket(receiverIP, receiverPort); //start udp packet
Udp.write(img); //write mouse data to udp packet
Udp.endPacket(); // end packet

delay(500);
}

void mouse_reset(){
// Initiate chip reset
digitalWrite(NCS, LOW);
pushbyte(0x3a);
pushbyte(0x5a);
digitalWrite(NCS, HIGH);
delay(10);
// Set 1000cpi resolution
digitalWrite(NCS, LOW);
pushbyte(0x0d);
pushbyte(0x01);
digitalWrite(NCS, HIGH);
}

unsigned int readLoc(uint8_t addr){
unsigned int ret=0;
digitalWrite(NCS, LOW);
pushbyte(addr);
ret=pullbyte();
digitalWrite(NCS, HIGH);
return(ret);
}

void pushbyte(uint8_t c){
pinMode(SDIO, OUTPUT);
for(unsigned int i=0x80;i;i=i>>1){
digitalWrite(SCLK, LOW);
digitalWrite(SDIO, c & i);
digitalWrite(SCLK, HIGH);
}
}

unsigned int pullbyte(){
unsigned int ret=0;
pinMode(SDIO, INPUT);
for(unsigned int i=0x80; i>0; i>>=1) {
digitalWrite(SCLK, LOW);
ret |= i*digitalRead(SDIO);
digitalWrite(SCLK, HIGH);
}
pinMode(SDIO, OUTPUT);
return(ret);
}

Ouvrez la fenêtre série et vous devriez voir le flux de données de la souris:

Fenêtre série

Installez Node.js et Socket.IO

Pour afficher les données dans le navigateur, nous devons avoir node.js et socket.io installés sur l’ordinateur.
Installez node.js à partir d’ici: nodejs.org puis accédez à l’invite de commande Windows et exécutez:

npm install socket.io

Node.js et code du site Web

Dans le code ci-dessous, nous configurons node.js pour écouter le trafic udp d’arduino, envoyer toutes les données au navigateur avec socket.io et configurer
un serveur Web de base.

var dgram = require("dgram");
var server = dgram.createSocket("udp4");

var io = require('socket.io').listen(8000); // server listens for socket.io communication at port 8000
io.set('log level', 1); // disables debugging. this is optional. you may remove it if desired.

server.on("message", function (msg, rinfo) { //every time new data arrives do this:
//console.log("server got: " + msg + " from " + rinfo.address + ":" + rinfo.port);
//console.log("server got:" + msg);
io.sockets.emit('message', msg);
});

server.on("listening", function () {
var address = server.address();
console.log("server listening " + address.address + ":" + address.port);
});

server.bind(6000); //listen to udp traffic on port 6000

var http = require("http"),
url = require("url"),
path = require("path"),
fs = require("fs")
port = process.argv[2] || 8888;

http.createServer(function(request, response) {

var uri = url.parse(request.url).pathname
, filename = path.join(process.cwd(), uri);

var contentTypesByExtension = {
'.html': "text/html",
'.css': "text/css",
'.js': "text/javascript"
};

fs.exists(filename, function(exists) {

if(!exists) {
response.writeHead(404, {"Content-Type": "text/plain"});
response.write("404 Not Foundn");
response.end();
return;
}

if (fs.statSync(filename).isDirectory()) filename += '/index.html';

fs.readFile(filename, "binary", function(err, file) {
var headers = {};
var contentType = contentTypesByExtension[path.extname(filename)];
if (contentType) headers["Content-Type"] = contentType;
response.writeHead(200, headers);
response.write(file, "binary");
response.end();
});
});
}).listen(parseInt(port, 10));

console.log("Static file server running atn => http://localhost:" + port + "/nCTRL + C to shutdown");

Enregistrez simplement le code sous: code.js

Nous devons maintenant créer un site Web qui convertira les données de socket.io en image 15×15.
Ça y est:










Enregistrez-le sous index.html

Exécuter!

Si vous êtes sous Windows, téléchargez simplement le fichier zip ci-dessous et exécutez le fichier runme.bat.
Si vous êtes sous Linux, exécutez la commande node code.js dans la coquille.

Maintenant, ouvrez l’adresse http: // localhost: 8888 / dans un navigateur Web et vous devriez voir une image en temps réel de la souris:

vidéo dans le navigateur

Vidéo

Telecharger des fichiers

Tous les fichiers sont dans ce zip: mousecamera.zip