Heute brachte der Paketbote Lieferung 2 von 3, ein paar Logikgatter, Kondensatoren, MOSFETs und etwas Kleinkram. Sobald die dritte Lieferung eintrifft, sind wieder aufwaendigere Projekte moeglich.
Archiv für den Monat: November 2016
Arduino 4×4 Tastatur
Bei der letzten Lieferung aus China waeren zwei 4×4 Keypads dabei, welche ich fuer eine Projekt benoetige. Abweichend von den Beispielen aus dem Netz, hatte mein Keypad nicht 8 oder 12, sondern 10 Pins. Da die jeweils aussen liegenden Pins keinerlei Funktion hatten, habe ich mich auf die 8 Pins in der Mitte beschraenkt.
Die Beispiele vom Arduino Playground wollten bei mir nicht so recht funktionieren, also habe ich das Keypad einmal Pin fuer Pin mit dem Durchgangspruefer durchgemessen, und dann eine sinnvolle Kombination gefunden:
Der Code entspricht bis auf die Aenderungen der Belegung fuer die Zeilen und Spalten am Arduino dem Original vom Arduino Playground.
— snip —
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
/* Keypadtest.pde * * Demonstrate the simplest use of the keypad library. * * The first step is to connect your keypad to the * Arduino using the pin numbers listed below in * rowPins[] and colPins[]. If you want to use different * pins then you can change the numbers below to * match your setup. * */ #include <Keypad.h> const byte ROWS = 4; // Four rows const byte COLS = 4; // Three columns // Define the Keymap char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins. byte rowPins[ROWS] = { 7, 8, 9, 10 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins. byte colPins[COLS] = { 3, 4, 5, 6 }; // Create the Keypad Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); #define ledpin 13 void setup() { pinMode(ledpin,OUTPUT); digitalWrite(ledpin, HIGH); Serial.begin(9600); } void loop() { char key = kpd.getKey(); if(key) // Check for a valid key. { switch (key) { case '*': digitalWrite(ledpin, LOW); break; case '#': digitalWrite(ledpin, HIGH); break; default: Serial.println(key); } } } |
— snap —
Liebesgruesse aus Shenzhen I
SIM800L GSM Modul mit Arduino betreiben
Fuer ein einfaches Projekt im Garten benoetige ich eine Alarmierung per SMS bei verschiedenenen Events. Da genug Material in der Bastelkiste vorhanden war, fiel die Wahl auf folgende Komponenten:
– Arduino Nano
– SIM800L GSM Modul
– LM2596S DC-DC Wandler
Der Schaltplan:
Meine Version vom SIM800L vertraegt noch keine 5V, in der Fritzing Bibliothek gab es aber nur die Gezeigte. Der Output vom LM2596S muss auf ca. 3,75V eingestellt sein.
Der Code, um die Kommunikation mit dem SIM800 zu testen:
— snip —
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <SoftwareSerial.h> //SIM800 TX an D11 #define SIM800_TX 11 //SIM800 RX an D10 #define SIM800_RX 10 //SoftwareSerial setup SoftwareSerial serialSIM800(SIM800_TX,SIM800_RX); void setup() { //Start der seriellen Kommunikation Serial.begin(9600); while(!Serial); serialSIM800.begin(9600); delay(1000); Serial.println("Bereit"); } void loop() { //Ausgabe von SIM800 lesen und ausgeben if(serialSIM800.available()){ Serial.write(serialSIM800.read()); } //Eingaben vom Terminal an den SIM800 senden if(Serial.available()){ serialSIM800.write(Serial.read()); } } |
— snap —
Sobald alles verkabelt und der Code auf den Arduino hochgeladen ist, kann man die folgenden Befehle testen. Im Serial Monitor muss dazu LN und CR aktiv sein. Wichtig: Die SIM Karte muss den PIN Schutz deaktiviert haben.
AT+CFUN? – gibt aktuellen Wert fuer AT+CFUN zurueck
AT+CFUN=? – gibt moegliche Werte fuer AT+CFUN zurueck
AT+CFUN=1 – AT+CFUN auf Wert 1 setzen
AT+CREG? – aktueller Registrierungsstatus im GSM Netzwerk
AT+COPS? – Liste aktuell erlaubter GSM Netzwerke
AT+COPS=? – Scan aller verfuegbaren Netze (Antwort dauert ein Stueck)
Komplette Befehlsreferenz: SIM800L Datasheet
Ingesamt lies sich damit fuer unter 8 Euro eine programmierbare Einheit fuer SMS Alarmierungen realisieren. Den kompletten Aufbau der Anlage schreibe ich hier, sobald er erfolgt und getestet ist.
LM2596S DC-DC Step-Down Schaltregler
Fuer ein neues Projekt benoetigte ich fuer die Spannungsversorgung eines SIM800L GSM Modules eine Eingangsspannung zwischen 3,7 und 4,2 Volt. Da weder der 3,3V (zu wenig), noch der 5V (zu viel) Output des vorgschalteten Arduinos passend waren, und der Arduino die geforderten 2A Peak auch nicht geschafft haette, musste eine andere Loesung her.
Von einem anderen Projekt hatte ich noch eine handvoll LM2596S vom Chinamann, welche damals nicht zum Einsatz kamen, da sie knapp zwei Monate unterwegs waren. Als Ersatz verwendete ich dann LM7805, da ich eine Spannung von 5V benoetigte.
LM2596S DC-DC Step-Down Schaltregler:
Nach dem Anschliessen an 12V Spannung setzte erst einmal Ernuechterung ein, die Ausgangsspannung blieb bei schwankenden 11,36 – 11,37 Volt, egal in welche Richtung ich das auf der Platine befindliche Drehpoti bewegte. Da auch gefuehlte 10 Umdrehungen am Drehpoti keine Aenderung der Messwerte vom Ohmmeter ergaben, habe ich das Geraet erst einmal als defekt abgestempelt und das Naechste genommen – mit gleichen Ergebnissen. Da auch das dritte Geraet keine Aenderung ergab, warf ich die Platinen erstmal wieder in die Kiste „Chinaschrott!“ und widmete mich etwas anderem.
Da mir das Problem aber keine Ruhe gelassen hat, und ich ja trotzdem noch immer 3,7-4,2V benoetigte, fand ich bei Google ein Posting im Arduino Forum, welches genau dieses Problem beschrieb.
Und des Raetsels Loesung war ? Man drehe mindestens 20 Umdrehungen nach links, dann klappts auch mit dem passenden Output.
Den Step-Down habe ich bei 12V auf 3,75 Volt Output eingestellt, auch bei 14,20V Input in den Step-Down blieb die Ausgangsspannung konstant. Damit ist der Bereich des Outputs der PV Anlage, wo das neue Projekt spaeter zum Einsatz kommen soll, genau abgedeckt.