Sensore Rotellina del mouse

Ciao,
ancora una volta sono bloccato.
Questa volta ho provato a smontare un vecchio mouse con pallina e ho estratto i sensori che regolano le assi di movimento della freccia.
Cercando su internet ho scoperto che il moveimento era dato dall'encoder in quadratura.
Il punto è che non ho trovato niente che mi possa suggerire come collegarli elettricamente e come interfacciarli con il mio Arduino.

Spulciando sul forum ho trovato questo articolo, Old Mouse Phototransistor - Sensors - Arduino Forum ma sono troppo rana in inglese per comprenderlo appieno.
Il tutto mi serve per misurare la rotazione di una base su un asse verticale

Qualuno può aiutarmi?

Il centrale del sensore è il comune dei 2 collettori e và collegato ai +5VDC, i 2 pin laterali sono i canali A e B (emettitori fototransistor) e vanno collegati medianti 2 resistenza da 2k2 verso gnd . I segnali A e B vengono prelevati in parallelo alle 2 resistenze

Ok ho provato a fare il circuito e a scrivere una sketch per leggere i valori e non mi va. :frowning:
il listato è questo:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

String Testo01,Testo02;
int pinDx = 7;
int pinSx = 8;
int PosSx;
int PosDx;

void scrivi(String Riga1, String Riga2)
{
  lcd.clear();
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print(Riga1);
  lcd.setCursor(0,1);
  lcd.print(Riga2);  
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);  // Used to type in characters
  lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight
  
  pinMode(pinDx, INPUT);
  pinMode(pinSx, INPUT);
  
}

void loop() {
  // put your main code here, to run repeatedly:

  PosDx =  analogRead(pinDx);
  PosSx =  analogRead(pinSx);
  
  Testo01 = "Val Dx:";
  Testo01.concat(" ");
  Testo01.concat(String(PosDx));
  
  Testo02 = "Val Sx:";
  Testo02.concat(" ");
  Testo02.concat(String(PosSx));

  scrivi(Testo01, Testo02);
  delay(500);

}

La rotellina è un encoder di misura incrementale, non butta fuori 2 segnali analogici ma 2 digitali

Ok,
ho cambiato le porte e mi sono spostato sulle analogiche, il risultato è che sia per il valore di destra che di sinistra ho sempre 1.
Mi aspettavo in caso di scorrimento della rotella di avere una variazione dei valori.
=(

Ti consiglio di fare queste ricerche su google:

-Encoder incrementale
-Lingua italiana

Grazie del suggerimento Icio.
Oggi lo passo su Google

Ok,
finalmente sembra funzionino.
Ovvero finalmente se interrompo il fascio di luce i valori sono a zero mentre se è libero danno un valore diverso da zero.
Almeno credo adesso la parte elettrica sia a posto.
Ho trovato su internet questo schema che ha risolto:
http://py2ohh.w2c.com.br/util/encoderotico/optoencoder.gif

Adesso devo posizionare e stabilizzare la rotellina e cercare di capire che sketch fare.

bene lo schema è giusto, per i transistor puoi usare bc337

per lo sketch cerca "encoder incrementale" troverai quelli che usano interrupts (pin 2 e 3) che servono per rotazioni veloci ( 1000-20.000 impulsi/sec) ma consumano uno o 2 interrupts e quelli che non usano interrupts(polling) quindi puoi collegarli a qualsiasi pin di arduino e vanno bene per <1000 imp/sec

:slight_smile:
Appena preparo lo sketch decente lo posto così magari se serve a qualcuno lo può usare

ormai è giorni che cerco ma tutti gli sketch che ho provato hanno fallito.
Inizio a dubitare che i sensori funzionino.

se è un ps2 il mouse prova a collegarlo ad arduino e fagli delle interrogazioni , in questo modo vedi se originariamente funzionava :wink:
cerca su google qualche tutorial è facile

Aggiornamenti :
Ho alimentato un mouse e attaccato il Pin di dx e sx del sensore della rotella all'arduino.

Se lo attacco alle porte digitali non misuro molto (solo in caso metto la stanza al buio).
Soprattutto non va l'attachinterrupts.
Se lo collego agli analogici ho delle misure che sono sensibili anche alla luce della lampada, ma che non so come usare

Però non trovo uno sketch decente da applicare agli analogici.
Qualcuno ha suggerimenti?

Ma le hai messe le resistenze di pullup (o pulldown, dipende da come l'hai collegato) sulle uscite ? :wink:

L'ho collegato alle digitali 2 e 3 che ho letto che per l'UNO siano le porte dell'attachinterrupts.
Non ho capito che intendi per resistenze pulldown

Rettifico, ho controllato cosa sono, credo di avere messo male le due resistenze...mannaggia a me

Ci rinuncio, ieri ho sistemato il circuito e lo sketch. Letture sballate. Non riesco a ricavarne un sensore.
Oggi ordinò un encoder incrementale e buona notte. :sob:

ma hai provato quello che ti ho detto ? hai provato a rimontare l'encoder sul mouse e verificare il corretto funzionamento utilizzando arduino come debugger ?
Prova, magari è saltato l' encoder.

Lucailvec:
ma hai provato quello che ti ho detto ? hai provato a rimontare l'encoder sul mouse e verificare il corretto funzionamento utilizzando arduino come debugger ?
Prova, magari è saltato l' encoder.

Si, ho provato ad usare un encoder funzionante del mouse attancando le i pin dell'arduino a Dx e SX dell'encoder. Con ele resistenze ovviamente.

Il fatto è che passa da HIGH a LOW molto più frequentemente dei quanto mi aspetto e soprattutto anche se non muovo nulla.

Inizio a sospettare di essermi giocato l'arduino nei vari controlli...mi sento abbastanza triste.
Ma ancora peggio ...mi sento sconfitto.

Mi spiace anche per non essere riuscito a sfruttare l'aiuto che molti di voi mi hanno dato :cry:

mi sa che non mi riesco a spiegare.
prendi il tuo mouse, ci risaldi l'encoder in modo corretto, colleghi l'arduino con data e clock(se è ps2 non dovresti aver problemi) al mouse e con la libreria ps2 TESTI che l' encoder non si sia fritto.
Debuggi i valori che leggi via seriale e in questo modo sei SICURO che il problema sia l'encoder e non l'arduino o viceversa.
Almeno nel peggiore dei casi utilizzi il driver del mouse per leggere i valori e così ti sentirai menosconfitto haha