ich habe vor, ein "altes" Samsung GT-E1200 mit dem Arduino anzusteuern.
Manch ältere Handys haben ja noch Pins für eine Serielle Kommunikation.
Meist ist diese Funktion bei Motorola gegeben. Das Ganze geht dann auch meist über einen Klinkenstecker.
Für mein Gerät konnte ich im Netz allerdings nichts finden. Ich habe auch nur eine große Schnittstelle, an der ich jetzt auch nicht einfach rumprobieren kann.
Weiß jemand, ob das Telefon eine Serielle Kommunikation unterstützt?
Wenn dies nicht der Fall ist, was ich leider vermute, habe ich einen anderen Plan:
Die Telefontasten direkt mit dem Microcontroller ansteuern. Ein Pin pro Taste.
Allerdings funktioniert die Tastatur eher wie eine Keypad Matrix. Siehe Anhang.
Gibt es dafür eine Library oder einen Beispielsketch, welche(r) eben nicht die Keypadtasten ausließt, sondern einen Tastendruck auf dem Keypad simuliert?
Wenn das nicht funktioniert würde ich es mit Optokopplern machen?! Habt ihr bessere Ideen?
Ohne jegliche Informetion kann man nur spekulieren.
Sicher funktioniert ein Optokoppler pro Taste wobei die Polung der Spannung zu beachten ist. Andere Lösungen erfordern genaue Kenntnisse der Schaltung.
Analogschalter, wie z.B. der 4066 Intelligent Power and Sensing Technologies | onsemi
könnten ebenfalls brauchbar sein. Im Gegensatz zum Optokoppler ist es Wurscht, wie rum der Schalter betriebn wird. Quasi fast wie ein Relaiskontakt. Mußt nur beide Massen miteinander verbinden. Da 4 der Analogschalter in einem IC sind, wird es billiger, als mit Optos. Da aber beides Pfennigartikel sind, ist das nicht so wild
Laut Datenblatt hat der 817C einen CTR Current Transfer Ratio von 200-400% http://pdf1.alldatasheet.com/datasheet-pdf/view/43371/SHARP/PC817.html
Das bedeutet pro mA LED Strom fließt der entsprechende Prozentsatz Kollektorstrom. Der Fototransistor ist also dicke übersteuert.
Da die Leitummitastatur eher hochohmig ist, reicht 1 mA durch die LED fett aus. Uf ist mit 1,2-1,4V angegeben. 5-3,6 : 0,001A macht 3,6K
Mit 3,3K Vorwiderstand bist du noch weit auf der sicheren Seite. Selbst 10K sollte dicke ausreichen. 20mA, die du bei 180 Ohm erreichst, darfst du nicht unterschreiten. Ansonsten kannst du quasi verbauen, was die Wühlkiste hergibt
also die Serielle Kommunikation geht bei noch wesentlich älteren Geräten einwandfrei. Sehr beliebt sind z.B. die Geräte von Siemens; z.B. M35, S35,... Die Geräte sind mit AT Befehlen steuerbar und verhalten sich sehr ähnlich dem Industriestandard Siemens M20 Terminal (und Nachfolger). Auch die Nokias der alten Zeit sind ein Tipp, es geht ab der Serie 5110/6110/6150 für Sprache und SMS, ab dem 7110 dann auch HSCDS Daten. Die Serien 6230/6230i können auch schon GPRS Daten und sind damit prinzipiell Internettauglich , sehr interessant.
Viele diese Geäte sollte man gebraucht für ganz wenig Geld bekommen, oder man findet sie irgendwo im Bodensatz der Bastelkiste. Einzig einen neuen Akku sollte man nach dieser langen Zeit einplanen.
Für neuere Geräte (ausgenommen Einsteigermodelle) würde ich eher über Bluetooth nachdenken da über diese Schnittstelle sehr oft eine klassische Modemfunktion zur Verfügung steht. Die USB Geschichte mit teilweise sehr speziellen Treibern kann man dagegen in diesem Zusammenhang eher vergessen, dann lieber gleich ein echtes GSM Modem mit ser. Schnittstelle...
Projekt erfolgreich beendet.
Habe nun für das Mobiltelefon 12 Optokoppler für die Zahlen 0-9 und die rote und grüne Taste verbaut.
Diese funktionierer mit 10kOhm Widerständen optimal.
Ich hatte dann nur ein Paar kleine Probleme zwischendurch.
Unter anderem folgendes, welches ich immernoch nicht verstehe:
Rote Taste hat drei Tage in Folge funktioniert und plötzlich nicht mehr.
Habe dann den Opto getauscht, ging immernoch nicht. (Alter war aber trotzdem kaputt...)
Dann habe ich die Leitungen an Phototransistorseite umgedreht und es ging wieder...
Seltsam...
Verbaute Objekte:
Wählscheibe von W48 Telefon
W48 Telefongehäuse
Arduino UNO
GT-E1200 Mobiltelefon
Taster NO
W48 Gabelschalter
13 10kOhm Widerstände
12 Optokoppler
9V Block
3,7V Akku
Lautsprecher
Mikrofon
// Version 0.6 (26.12.2014)
// Start Phone on Setup
// Enable Screen before typing the first Number
// For Rotarywheel
int needToPrint = 0;
int count;
int in = A3;
int front = 2;
int lastState = LOW;
int trueState = LOW;
long lastStateChangeTime = 0;
int cleared = 0;
int dialHasFinishedRotatingAfterMs = 100;
int debounceDelay = 10;
int current = 0;
boolean IsInCall = false;
void setup()
{
pinMode(in, INPUT); // Rotarywheel
pinMode(front, INPUT_PULLUP); // Frontbutton
pinMode(3, OUTPUT); // Key 0
pinMode(4, OUTPUT); // Key 1
pinMode(5, OUTPUT); // Key 2
pinMode(6, OUTPUT); // Key 3
pinMode(7, OUTPUT); // Key 4
pinMode(8, OUTPUT); // Key 5
pinMode(9, OUTPUT); // Key 6
pinMode(10, OUTPUT); // Key 7
pinMode(11, OUTPUT); // Key 8
pinMode(12, OUTPUT); // Key 9
pinMode(A4, OUTPUT); // Key Red
pinMode(A5, OUTPUT); // Key Green
Serial.begin(9600);
KeyRed(3400); // Switch Phone on
delay(15000); // Wait till Phone is on
KeyRed(100); // Deny Time Adjust Question
Serial.println(F("Mobile Phone ready"));
/*delay(3000); Serial.println(F("Testing Mobile Phone"));
Key(0); delay(500); Key(1); delay(500); Key(2); delay(500); Key(3); delay(500); Key(4); delay(500); Key(5); delay(500); Key(6); delay(500); Key(7); delay(500); Key(8); delay(500); Key(9); delay(5000); KeyRed(100); Serial.println(F("Clear")); delay(2000);*/
}
void loop()
{
while(digitalRead(front) == HIGH)
{
int reading = digitalRead(in);
if ((millis() - lastStateChangeTime) > dialHasFinishedRotatingAfterMs)
{
if (needToPrint)
{
if(count == 10) { count = 0; }
if(current == 0) { KeyRed(300); } // Enable Phone Screen
Key(count);
current++;
needToPrint = 0;
count = 0;
cleared = 0;
}
}
if (reading != lastState) {
lastStateChangeTime = millis();
}
if ((millis() - lastStateChangeTime) > debounceDelay) {
if (reading != trueState) {
trueState = reading;
if (trueState == HIGH) {
count++;
needToPrint = 1;
}
}
}
lastState = reading;
}
if(digitalRead(front) == LOW)
{
if(IsInCall == false)
{
KeyGreen();
IsInCall = true;
}
else if(IsInCall == true)
{
KeyRed(300);
IsInCall = false;
current = 0;
}
while(digitalRead(2) == LOW) { delay(200); }
delay(500);
}
}
void KeyRed(int dauer)
{
digitalWrite(A4, HIGH);
delay(dauer);
digitalWrite(A4, LOW);
Serial.print(F(" Red ")); Serial.println(dauer);
delay(200);
}
void KeyGreen()
{
digitalWrite(A5, HIGH);
delay(300);
digitalWrite(A5, LOW);
Serial.println(F(" Green"));
delay(200);
}
void Key(int key)
{ // Key + 3, because 0 is on Pin 3, 1 is on Pin 4, 9 is on Pin 12, ...
digitalWrite((key + 3), HIGH);
delay(300);
digitalWrite((key + 3), LOW);
Serial.print(key);
delay(200);
}
Mehr zum Thema Wählscheibe: Interface a rotary phone dial to an Arduino -
Der Codeteil der die Impulse ausliest kam ebenfalls von dieser Seite.
Den 470 Ohm Widerstand habe ich weggelassen.
Dann habe ich die Leitungen an Phototransistorseite umgedreht und es ging wieder...
Der Taster ist sicher mit einem Vorwiderstand polarisiert (Pullup oder Pulldown), auch wenn er in einer Tastaturmatrix ist. Darum hast Du in einem offenen Taster eine Spannung. Der Collektor des Optokoppler muß auf die Positive seite und der Emittor auf die negative (Optokoppler mit Transistorausgang sind immer NPN Transistoren.