Rotary telefon ringa + Arduino + osynligt bläck = födelsedag nuvarande



jag har ett antal telefoner med nummerskivor och telefonen delar som jag trodde jag kunde använda på något dumt sätt.

Jag börjar med detta instructable

När jag slutade, har jag ett objekt som fungerar som följer:

-något nummer eller sekvens av nummer
-Tryck på den stora röda knappen testa den sekvensen.
-arduino kommer att spela en låt baserad på den första siffran i den sekvens som rings upp.
- Men om rätt sekvens rings upp, i detta fall min döttrar namn, arduino kommer att spela "Happy Birthday song", snurra skärmen metall och ljus UV-lysdioder. Detta kommer att avslöja "Grattis på födelsedagen meddelandet jag skrev på skärmen med osynligt bläckpenna.

video för att följa

Så i princip är vad jag har:

Arduinoen registrerar ingång rotary telefon som en sträng och sedan koden kontrollerar för en viss sträng.

Om det inte är strängen, sedan spelar en av 5 låtar som är kodade i skissen.

Om det är rätt sträng sedan arduino instruerar servo att vända och lyser i UV-ljus och spelar låten födelsedag.

Koden följer:

Jag hittade bitar av det här och där. Testton-funktionen används tillsammans med en pitches.h fil.

/ * 3/21/12 - började göra projekt med vredet
-att användas för födelsedagspresent för Christine
-idén:
ringer upp nummer kommer att spela en annan sång
ringer upp hennes namn lyser lysdioder som visar födelsedagen messgae
eller den glada aniversity för Harrie och Riek

-börjar med koden för batphonev1
-behöver göra många ändringar

-v2 - börja titta på watys har många låtar eller anteckningar

*/
#include < Servo.h >
#include "pitches.h"

Grattis på födelsedagen
int melodybd [] = {NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_F4, NOTE_E4, NOTE_C4, NOTE_C4,
NOTE_D4, NOTE_C4, NOTE_G4, NOTE_F4, NOTE_C4, NOTE_C4,
NOTE_C5, NOTE_A4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_B4, NOTE_B4, NOTE_A4,
NOTE_F4, NOTE_G4, NOTE_F4};
int noteDurationsbd [] = {3, 16, 4, 4, 4, 2, 3, 16, 4, 4, 4,2, 3, 16, 4,4,4,4,4,3,16,4,4,4,2};
int numNotesbd = 25;

aniversary
Här kommer bruden
int melodyanv [] = {NOTE_A3, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_A3, NOTE_D4, NOTE_B3, NOTE_C4, NOTE_A3, NOTE_C4, NOTE_F4, NOTE_F4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_D4};
Observera varaktigheter: 4 = fjärdedelsnot, 8 = åttondelen noterar, etc.:
int noteDurationsanv [] = {2,3,8,1,2,3,8,1,2,3,8,2,3,8,2,3,8,1}.
int numNotesanv = 18;

1, starwars
int melody1 [] = {NOTE_G5, NOTE_G5, NOTE_G5, NOTE_DS5, NOTE_AS5, NOTE_G5, NOTE_DS5, NOTE_AS5, NOTE_G5};
int noteDurations1 [] = {3, 3, 3, 4, 8, 3, 4, 8, 2};
int numNotes1 = 9;

// 2. två bitar sak
int melody2 [] = {NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4};
int noteDurations2 [] = {4,8,8, 4,4,4,4,4};
int numNotes2 = 8;

3 pop går vessla

int melody3 [] = {
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_E4,
NOTE_G4, NOTE_E4, NOTE_C4, NOTE_C4, NOTE_C4,
NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_C4, 0,
NOTE_C4, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_E4,
NOTE_G4, NOTE_E4, NOTE_C4, 0, NOTE_A4,
NOTE_D4, NOTE_F4, NOTE_E4, NOTE_C4, 0};

int noteDurations3 [] = {4, 8, 4, 8, 8, 8, 8, 4, 8, 4, 8, 4, 8, 3, 4, 8, 4, 8, 4, 8, 8, 8, 8, 4, 4, 2, 4, 4, 4, 4, 4};
int numNotes3 = 31;

4 batman
int melody4 [] = {NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3, NOTE_GS3, NOTE_GS3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3, NOTE_GS3, NOTE_GS3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3, NOTE_GS3, NOTE_GS3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_GS3, NOTE_G3, NOTE_G3 NOTE_GS3, NOTE_GS3, NOTE_E4, NOTE_E4};
int noteDurations4 [] = {8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4,8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4};
int numNotes4 = 32.

5 kända klassiska
int melody5[]= {NOTE_E4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_E4,NOTE_D4,NOTE_D4,NOTE_E4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4 ,NOTE_D4,NOTE_D4,NOTE_E4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_E4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_D4,NOTE_G3,NOTE_E4,NOTE_E4,NOTE_F4,NOTE_G4,NOTE_G4,NOTE_F4,NOTE_E4,NOTE_D4,NOTE_C4,NOTE_C4,NOTE_D4,NOTE_E4,NOTE_D4,NOTE_C4 NOTE_C4};
Observera varaktigheter: 4 = fjärdedelsnot, 8 = åttondelen noterar, etc.:
int noteDurations5 [] = {4,4,4,4,4,4,4,4,4,4,4,4,2,8,2,4,4,4,4,4,4,4,4,4,4,4,4,2, 4,4,4,4,4,8,8,4,4,4,8,8,4,4,4,4,2,4,4,4,4,4,4,4,4,4,4,4,4,2,8,2};
int numNotes5 = 62;

int needToPrint = 0;
int antal;
Mine
CONST int try_it = 3;
CONST int in_from_dial = 2;
CONST int lightOn = 11;

int buttonState = 0; variabel för att läsa tryckknapp status
int firstnum = 0;
char spelade = 'N';
slutet gruva

int lastState = låg;
int trueState = låg;
lång lastStateChangeTime = 0;
int rensat = 0;

konstanter

int dialHasFinishedRotatingAfterMs = 100;
int debounceDelay = 10;

strängar
Sträng newstring;
char Carrie [] = "227743";
char Daniel [] = "326435";
char Big50 [] = "1";
char Harrie [] = "2".

servo
Servo myservo; skapa objekt för att styra en servo servo
int pos = 0; variabel att lagra servo position

// --------------------------------------------

void setup()
{

Serial.BEGIN(9600);

pinMode (in_from_dial, ingång); 2
pinMode (try_it, ingång); 3
pinMode (Benny, produktionen); 11
pinMode (13, OUTPUT); 12
myservo.attach(6); tillmäter objektet servo servo på stift 6

}

void loop() {
digitalWrite 13, hög. ställa in lysdioden på
/*
användaren kommer att slå nummer tills de träffar på "prova" buttonb
så måste skapa sträng tills knappen trycks
*/
Läs statligt av knappen tryit
digitalWrite (Benny, låg);
buttonState = digitalRead(try_it);
try_it = hög;
om (buttonState == låg) {

int läsa = digitalRead(in_from_dial);

om ((millis()-lastStateChangeTime) > dialHasFinishedRotatingAfterMs) {
ratten är inte som rings eller har precis avslutat som rings.
om (needToPrint) {
om det är just färdigt som rings, måste vi sända ner följetongen
linje och återställa räkningen. Vi mod räkningen vid 10 eftersom '0' skickar 10 pulser.
Serial.println (antal % 10, DEC).

nu måste lägga räkningen till teststrängen och sedan testa den mot den
krävs sträng att få en träff
NewString.concat(Count);

needToPrint = 0;
Count = 0;
rensat = 0;
}

}

om (läsa! = lastState) {
lastStateChangeTime = millis();
}
om ((millis()-lastStateChangeTime) > debounceDelay) {
Debounce - detta händer när det är stabiliserats
om (läsa! = trueState) {
Detta innebär att växeln har antingen bara gått från stängda -> Öppna eller vice versa.
trueState = behandlingen.
om (trueState == hög) {
öka antalet pulser om det är gått hög.
greve ++;
needToPrint = 1; Vi kommer att behöva skriva ut detta nummer (när ratten är klar roterande)
}
}
}
lastState = behandlingen.
}

annat
{
användaren vill nu testa hans uppringning
//
spelade = 'N';
Serial.println(NewString);
test_it();
NewString = "";

}
}
// --------------------- my functions -------------------------
// ------------------------------------------------------------

slå på lysdioder

void turnon_Leds()
{
digitalWrite (Benny, hög);

}

// --------------------------------------------------
testa strängen

void test_it()
{

Serial.println(NewString);
Serial.println(firstnum);
Delay(2000);

/*

om "BIG50" sedan spela Happy Birthday, stänga servo, slå på lysdioder
om "HARRIE" spelar sedan anv låt, trun servo aktivera lysdioder

*/
om (newstring.equals(Carrie)) {

Aktivera servo
för (pos = 0; pos < 180; pos + = 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(15); Waits 15 MS för servo att nå ställning
}

turnon_Leds();

för (int thisNote = 0; thisNote < numNotesbd; thisNote ++) {

int noteDuration = 1000/noteDurationsbd [thisNote];

tonen (8, melodybd[thisNote],noteDuration);

Ange en minsta tid mellan dem för att skilja anteckningar.
tonens längd + 30% verkar fungera bra:
int pauseBetweenNotes = noteDuration * 1.4;
Delay(pauseBetweenNotes);
stoppa tonen uppspelningen:

noTone(8);
}
spelade = "Y";
Delay(2000);

}

//-----------------------------------------

om (newstring.equals(Daniel)) {

Aktivera servo
för (pos = 180, pos > = 15; pos-= 1) / / går från 0 grader till 180 grader
{/ / i steg om 1 grad
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(15); Waits 15 MS för servo att nå ställning
}

turnon_Leds();

för (int thisNote = 0; thisNote < numNotesbd; thisNote ++) {

int noteDuration = 1000/noteDurationsbd [thisNote];

tonen (8, melodybd[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1.4;
Delay(pauseBetweenNotes);
stoppa tonen uppspelningen:
noTone(8);
}
spelade = "Y";
NewString = "";
Delay(2000);
}

Serial.println fick ("here1");
Delay(500);

behöver första difgit och sedan använda fallet för att spela låten

Serial.println("here2");
Serial.println(NewString);
Delay(1000);

om (spelade == 'N') {

1 0or 9
om ((newstring.startsWith("1")) || (newstring.startsWith("9"))) {

iterera över tonerna i melodin:
för (int thisNote = 0; thisNote < numNotes1; thisNote ++) {
int noteDuration = 1000/noteDurations1 [thisNote];
tonen (8, melody1[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1,30;
Delay(pauseBetweenNotes);
stoppa tonen uppspelningen:
noTone(8);

}
spelade = "Y";
Delay(500);
NewString = "";
}

börjar med 2 eller 8
om ((newstring.startsWith("2")) || (newstring.startsWith("8")))
{

iterera över tonerna i melodin:
för (int thisNote = 0; thisNote < numNotes2; thisNote ++) {
int noteDuration = 1000/noteDurations2 [thisNote];
tonen (8, melody2[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1,30;
Delay(pauseBetweenNotes);
stoppa tonen uppspelningen:
noTone(8);

}
spelade = "Y";
Delay(500);
NewString = "";
}

börjar med 3 eller 7
om ((newstring.startsWith("3")) || (newstring.startsWith("7")))
{

iterera över tonerna i melodin:
för (int thisNote = 0; thisNote < numNotes3; thisNote ++) {
int noteDuration = 1000/noteDurations3 [thisNote];
tonen (8, melody3[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1,30;
Delay(pauseBetweenNotes);
stoppa tonen uppspelningen:
noTone(8);

}
spelade = "Y";
Delay(500);
}

börjar with4 eller 6
om ((newstring.startsWith("4")) || (newstring.startsWith("6")))
{

iterera över tonerna i melodin:
för (int thisNote = 0; thisNote < numNotes4; thisNote ++) {
int noteDuration = 1000/noteDurations4 [thisNote];
tonen (8, melody4[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1,30;
Delay(pauseBetweenNotes);
stoppa tonen uppspelningen:
noTone(8);

}
spelade = "Y";
Delay(500);

}

börjar med 5 eller 0
om ((newstring.startsWith("5")) || (newstring.startsWith("0")))
{

iterera över tonerna i melodin:
för (int thisNote = 0; thisNote < numNotes5; thisNote ++) {
int noteDuration = 1000/noteDurations5 [thisNote];
tonen (8, melody5[thisNote],noteDuration);

int pauseBetweenNotes = noteDuration * 1,30;
Delay(pauseBetweenNotes);
stoppa tonen uppspelningen:
noTone(8);

}
spelade = "Y";
Delay(500);

}

}

slutet av loop
}

Relaterade Ämnen

Rotary telefon uppringning till en Arduino-gränssnitt

en gammal rotary telefon kan användas för flera olika syften i din Arduino projekt - använda den som en ny enhet, eller använda Arduino gränssnittet en rotary telefon till din dator.Detta är en mycket grundläggande guide som beskriver hur gränssnitte...

RotaryX: Hur till hacka en Rotary telefon

Liksom en hel del analog teknik fungerar roterande telefoner med en serie av hög/låg växlar som enkelt kan kopplas till en Arduino för programmering äventyr. Denna ska tutorial går dig genom processen att öppna och ny ledning dras en vanlig roterande...

Hur du sätter en gammal-skola rotary telefon till en inmatningsenhet.

Roterande telefoner är bra för nybörjare hackare.De är inte särskilt komplicerat: för det mesta, kan du bara titta på trådarna och gissa vad de flesta av dem kontroll.Sätt en mikrokontroller i, och du kan använda alla dess komponenter som moderna I/O...

Bat telefon från gamla rotary telefon

Disclaimer: inga gamla rotary telefoner skadades i detta projekt! Jag hade köpt en massa roterande telefoner från en egendom försäljning och ingår i detta köp var en låda med trasiga telefoner och telefonen delar. Det är från denna låda som jag fick...

Låga tech Rotary telefon gjorde trådlöst.

Roterande telefoner är cool, de bör bo cool även trådlöst!Jag måste säga att jag gillar vintage objekt. En av min favorit är ju gamla roterande telefoner. Jag brukade ha en hemma tills jag var 10 år gammal. Vid denna tid var mitt nummer bara 6 siffro...

Raspberry Pi i Rotary telefon

Jag hittade en gammal Western Electric rotary telefon på min vind. Det är verkligen en fantastisk bit av hårdvara. Det verkar fungera bra flera årtionden efter dess konstruktion trots vad missbruka det tog innan hamna på min vind. Däremot behöver jag...

Selfie Ring aka telefon Ring

Detta Instructable utlöstes av observationen att min frus smarta telefonen verkar vara limmad mot hennes hand. Även om detta verkar ofta fallet, har som sjunkit på en gång eller två. Jag bestämde mig att hjälpa henne men eftersom limning är lite dras...

Rotary telefon iPod Dock

jag har alltid älskat åter purposing en sak till en annan. Detta instructable visar bilder på min färdiga iPod docka med kommentarer på hur jag lägger ihop. Jag ber om ursäkt att jag inte tog bilder genom hela processen. Jag var alldeles för upphetsa...

Kontroll robotarm med handskar, Android-telefon och Arduino

Idag har vi nästan 2 tekniker för att spela med robotarm, antingen genom knappar till exempel som på spelet sköld eller använda handskar som inkluderar sensorer. Ännu, dag ska jag visa dig en ny teknik med hjälp av endast din Android-telefon och Ardu...

Mickey Mouse Rotary telefon Cell

det började som en utmaning från min kompis att göra Musse till en mobiltelefon och förvandlats till ett kul litet projekt. Det är också mitt första inlägg till Instructables.Steg 1: Se vad vi har Första jag slet öppna en gammal 1976 Bell system Mick...

Enkel extern telefon Ringer

Detta är en enkel yttre ringer för en fast telefon. Har du någonsin missat ett viktigt samtal eftersom du inte hör telefonen? Eller kanske du skulle hellre inte vänta i telefonen för den speciellt någon? Då är det precis vad du behöver! Här ringer ka...

Telefon Ringer Visuell varning (LED)

Jag har en T-mobile analog telefon av mitt skrivbord och det finns tillfällen när jag vill stänga av ringsignalen och i stället använda en visuell varning så jag konstruerade en krets att blinka en LED när telefonen ringer. Kretsen består av en 1N400...

NeoPixel 24 Ring Arduino Shield

Om du har en NeoPixel Ring med 24 NeoPixels du det att montera rätt på din Arduino så det inte floppa runt. Jag vill ha min monteras fast på Arduino eftersom jag kommer att ha mellanstadieeleverna programmering, och jag vill ha det enkelt att använda...

Min gamla telefon + arduino = phonoduino

Hej, är detta ett projekt av min gamla Nokia 1100 telefon och arduino mega. Med hjälp av detta många arduino och gsm är projekt möjligt. Telefonen kommer att arbeta som en gsm-modul och du kan skickas meddelande eller ringa någon med hjälp av denna p...

Arduino Nano och Visuino: kontrollera stegmotor med Rotary Encoder

Ibland är det nödvändigt att ha en Stepper Motor Följ rotation av en Rotary Encoder för exakt positionering. Jag har planerat Instructable på detta under en lång tid, men äntligen par dagar sedan efter ännu en fråga av Visuino användare, på hur man g...

Arduino Nano och Visuino: styr Servo med Rotary Encoder

Det finns en hel del Instructables på hur man styr Servo med potentiometer, men ibland är det bra att styra med en Rotary Encoder. I detta Instructable kommer jag visa dig hur lätt det är att genomföra detta med hjälp av Visuino - en enkel att använd...

Arduino Nano: Rotary Encoder med Visuino

De roterande pulsgivare är mycket användbar exakt rotation sensorer, också ofta används som användaren kontrollerade indataenheter i stället för potentiometrar. De är lätta att ansluta till Arduino, och med hjälp av Visuino - en enkel att använda gra...

TOWA telefon

Några dagar sedan, när jag scrounging genom garderoben har jag hittat en gammal rotary dialer telefon.Denna typ av telefon kan inte vara används nu för tiden på grund av inkompatibilitet mellan puls och tonval.Innan papperskorgen det jag frågar mig s...

Ringa klockan

i detta instructable, jag kommer att visa dig hur man gör en klocka från en gammal rotary telefon.Steg 1: Få dina delar Behöver du följande:En roterande telefon som bryts internt/ej användbarKlockan delarEn borrVit färg (valfritt)Varmlimma fastSteg 2...