Innholdsfortegnelse:

Grensesnitt en roterende telefonoppringning til en Arduino: 6 trinn (med bilder)
Grensesnitt en roterende telefonoppringning til en Arduino: 6 trinn (med bilder)

Video: Grensesnitt en roterende telefonoppringning til en Arduino: 6 trinn (med bilder)

Video: Grensesnitt en roterende telefonoppringning til en Arduino: 6 trinn (med bilder)
Video: Starting a Sidecar MIDI Controller to expand the Ibanez IMG2010 MC1 Guitar to MIDI Converter system 2024, November
Anonim
Koble en roterende telefonoppringning til en Arduino
Koble en roterende telefonoppringning til en Arduino
Koble en roterende telefonoppringning til en Arduino
Koble en roterende telefonoppringning til en Arduino

En gammel roterende telefon kan brukes til en rekke formål i dine Arduino -prosjekter - bruk den som en ny inngangsenhet, eller bruk Arduino til å koble en roterende telefon til datamaskinen din. til en Arduino, og få nummeret slått til en datamaskin over Arduinos serielle lenke.

Trinn 1: Fjern ringen fra telefonen

Fjern ringen fra telefonen
Fjern ringen fra telefonen
Fjern ringen fra telefonen
Fjern ringen fra telefonen
Fjern ringen fra telefonen
Fjern ringen fra telefonen

Første trinn er å fjerne ringeenheten fra telefonen. Jeg bruker en GPO -telefon av noe slag fra 1970 -tallet. På denne telefonen dukket skiven rett ut - jeg trengte bare å ta den. Hvis den ikke gjør det, må du kanskje åpne telefonen og finne ut hvordan du får den av. Det var fem kabler koblet til baksiden av skivenheten. På telefonen min var dette vanlige spadeforbindelser, så jeg løsnet skruene og dro dem ut. Hvis du vil montere telefonen på nytt, må du huske å registrere hvilken fargekabel som går til hvilken tilkobling.

Trinn 2: Identifiser bryteren

Identifiser bryteren
Identifiser bryteren

Når skiven er slått ut, bør det være relativt enkelt å se hvordan skiven omdanner roterende bevegelser til pulser. Prøv å snurre skiven for hånd og se bevegelsen på baksiden. Du bør se en bryter lage og bryte en krets raskt - så hvis du ringer '9', bør bryteren koble til ni ganger. gå nummeret og la det spole tilbake. Jeg har dokumentert hvordan det fungerer for telefonen min i notatene på bildet nedenfor. Det er også en uskarp video av mekanismen som fungerer.

Trinn 3: Lag kretsen

Lag kretsen
Lag kretsen
Lag kretsen
Lag kretsen

Når du har funnet bryteren som blir gjort og ødelagt, bør du kunne identifisere tilkoblingene ved å følge ledningene tilbake til tilkoblingsterminalene. I mitt tilfelle er de to sidene av bryteren koblet til de to terminalene til venstre. Bryteren i skiven min er alltid på og er ødelagt for hver puls når jeg ringer, så jeg brukte den veldig enkle kretsen nedenfor. Pinne 2 går HØY for hver puls når skiven roterer. Når telefonen ikke blir ringt, er bryteren i skivenheten lukket (en såkalt NORMALT STENGT bryter, av åpenbare årsaker), slik at kretsen kobler pin 2 til bakken (som til Arduino er LAV). Dette er fordi det er mye mindre motstand gjennom 470 ohm -motstanden enn 10K -motstanden. Når telefonen ringes, åpnes og lukkes bryteren (for en 9, vil den åpne og lukke igjen ni ganger, husk). Når bryteren er åpen, er ikke pin 2 koblet til jord - i stedet er den koblet til 5V -forsyningen gjennom en motstand på 10470 ohm. Dette tolkes av Arduino som et HØYT. Hvis urskiven din har en NORMALT ÅPEN bryter, bør du bytte posisjoner til 10K -motstanden og skiven skal gjøre susen.

Trinn 4: Utvikle koden

Utvikle koden
Utvikle koden

Nå trenger vi litt kode for Arduino for å telle pulser og sende det totale antallet per nummer som er slått tilbake gjennom den serielle porten. Koden min er nedenfor. Siden vi har å gjøre med mekanikk her, kan din variere. Prøv å leke med konstantavvisningskonstanten og hvor lenge vi venter før vi antar at skiven er ferdig med å rotere. Jeg har prøvd å kommentere den så pent jeg kan. Forhåpentligvis er det ganske enkelt. Int needToPrint = 0; int count; int in = 2; int lastState = LOW; int trueState = LOW; long lastStateChangeTime = 0; int cleared = 0; // constantsint dialHasFinishedRotatingAfterMs = 100; int debounceDelay = 10; ugyldig oppsett () {Serial.begin (9600); pinMode (in, INPUT);} void loop () {int reading = digitalRead (in); if ((millis () - lastStateChangeTime)> dialHasFinishedRotatingAfterMs) {// oppringningen ikke blir ringt, eller nettopp har blitt ringt opp. if (needToPrint) {// hvis det bare er ferdig med å bli slått, må vi sende nummeret ned på serien // og nullstille antallet. Vi modifiserer tellingen med 10 fordi '0' sender 10 pulser. Serial.print (telle % 10, DEC); needToPrint = 0; telle = 0; slettet = 0; }} if (reading! = lastState) {lastStateChangeTime = millis (); } hvis ((millis () - lastStateChangeTime)> debounceDelay) {// debounce - dette skjer når det er stabilisert hvis (reading! = trueState) {// dette betyr at bryteren enten nettopp har gått fra lukket-> åpen eller omvendt. trueState = lesing; hvis (trueState == HIGH) {// øker antallet pulser hvis det har gått høyt. telle ++; needToPrint = 1; // vi må skrive ut dette nummeret (når skiven har rotert)}}} lastState = lesing;}

Trinn 5: Sjekk at det fungerer

Kontroller at det fungerer ved å åpne et seriell vindu (jeg bruker skjermen på en unix-maskin, det kan være lurt å bruke Hyperterm eller lignende på Windows), og prøv å slå noen numre. Sørg for at serieprogrammet er satt til å lese fra USB- > seriell adapter i Arduino (sjekk Verktøy-> Seriell port-menyen i Arduino-programvaren hvis du glemmer hva det er), og en overføringshastighet på 9600 bps. Du bør se det riktige nummeret som dukker opp når det ringes.

Trinn 6: Fest det til noe nyttig

Sett det inn i noe nyttig!
Sett det inn i noe nyttig!

Jeg kom med en Quartz Composer -fil på min Mac for å ta input og gjengi det pent til skjermen. Når den er i maskinen som serielle data, kan du gjøre alt med den. Venter på å høre ideene dine! Jeg kommer med en video av den 'in action' og skriver ut tallene til skjermen så snart jeg kan få noen å holde kameraet for meg - skulle ønske jeg hadde tre hender.

Anbefalt: