Archiv der Kategorie: Allgemein

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.