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.

Arduino 4x4 Keypad

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:

arduino_keypad_4x4

Der Code entspricht bis auf die Aenderungen der Belegung fuer die Zeilen und Spalten am Arduino dem Original vom Arduino Playground.

— snip —

/*  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 —

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:

Arduino SIM800L

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 —

#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)

sim800_return

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:

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.