Die AZ-Freundin zum Valentinstag 2020!

Hallo und willkommen zum Valentinstag-Projekt 2020!

Wir wollten dieses Jahr etwas ganz besonderes machen. Da jeder Mann ab und an den Rat einer Frau benötigt, dachten wir "Warum bauen wir uns nicht eine Partnerin, die uns auch öfter mal so antworet, wie wir uns das vorstellen?". 😃

Und so entstand die AZ-Freundin! So sind Antworten wie "Schatz, ein Bierchen geht noch! Brost!" keine Seltenheit mehr! 😉

Selbstverständlich kann man dieses Projekt auch anderwertig verwenden. Am Schluss finden Sie ein paar Ideen, wie man dieses Projekt noch verwenden kann (z.B. um seiner/m Freund/in oder Ehefrau/mann ein Lächeln ins Gesicht zu zaubern). 😊

Hier ein kleiner Vorgeschmack auf das fertige Projekt:

Das fertige Projekt in einem Gehäuse

 Vorschau auf das fertige Projekt

Benötigte Hardware

Für dieses Projekt benötigen wir folgende Teile:

Valentinstag-Angebot von -20% ist nicht mehr verfügbar!
Erhalten Sie HIER alle Produkte im Bundle und für -20%.




Der Aufbau

Wir verschalten die einzelnen Bauteile wie unten angegeben:

Aufbau der Schaltung als Fritzing Diagramm

Amica V2 Matrix Display Button
GND GND
GND -
D2 S
3v3 VCC
D6 DIN
D8 CS
D5 CLK

 

Schaltung auf Breadboard

 

Herzstück des Projekts ist der Amica V2 Mikrocontroller. Er bietet mehr Pins als wir benötigen, und bietet eine zuverlässige und solide Basis, und viele Möglichkeiten das Projekt zu erweitern.

Zur Darstellung verwenden wir das MAX7219 Matrix Display mit 8x32 LEDs. Dieses Display eignet sich zur Darstellung einfacher Symbole, und wird außerdem gerne zur Darstellung von Laufschriften verwendet.

 Als Taster verwenden wir im finalen Aufbau einen Arcade-Taster mit einem Durchmesser von 3cm. Es kann jedoch fast jeder beliebiger Taster verwendet werden. Für einen Testaufbau empfehle ich unser KY-004 Button Modul.

 

 

Die Software

Nachdem alles korrekt verbunden wurde, können wir den Code in die Arduino IDE kopieren, und nach unseren Bedürfnissen anpassen.

Unser Beispiel besteht aus 13 verschiedenen Sätzen die auf Knopfdruck zufällig ausgewählt und angezeigt werden.

Der Wert ARRAYSIZE legt fest, aus wievielen Einträgen unsere Liste mit dem Namen "results" besteht.

Damit der Text nach der Anzeige komplett von der Anzeige verschwindet, empfiehlt es sich, nach dem Satz 10 Leerzeichen anzuhängen.  

 

Hier der komplette Quellcode:

 

 

// beMyValentine Codebeispiel für den AZ-Delivery Blogbeitrag Valentinstag 2020
// V1.0 von AZcp 14.02.2020 - GNU Lesser General Public License v2.1
// Verwendet die Bibliothek MD_MAX72XX von Marco Colli / MajicDesigns : https://github.com/MajicDesigns/MD_MAX72XX
// Teile dieses Codes basieren auf den Beispielen der MD_MAX72XX Bibliothek

#include <MD_MAX72xx.h>

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW  // falls die Darstellung fehlerhaft ist, ersrtze FC16_HW durch PAROLA_HW oder GENERIC_HW 
#define MAX_DEVICES  4 // anzal der 8x8 Module, in unserem Fall 4

#define CLK_PIN    D5
#define DATA_PIN   D6
#define CS_PIN     D8
#define BUTTON_PIN D2 // Hier wird der Button angeschlossen

MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);

bool last = false; // Diese Variable merk sich ob der Taster gedrückt wurde

#define ARRAYSIZE 13 // Anzahl der Sätze 
char* results[ARRAYSIZE] = {
  "Ja!           ",
  "nein.            ",
  "Das wuerde mich freuen.           ",
  "Von mir aus. . .           ",
  "Hoechstwahrscheinlich.           ",
  "Ja, klingt gut!           ",
  "Mach was DU willst. . .           ",
  "Ist deine Entscheidung. . .           ",
  "Gerne, Schatz!           ",
  "Ja, gefaellt mir ganz gut. . .           ",
  "Das ist eine gute Idee!           ",
  "Vielleicht?!           ",
  "*Seufz*           "
};

//Wurde der Taster gedrückt?
bool button() {
  bool current = digitalRead(BUTTON_PIN);
  if (current != last) {
    last = current;
    if (last) {
      return true;
    }
  }
  return false;
}

// Text wird gesrollt
void scrollText(const char *p)
{
  uint8_t charWidth;
  uint8_t cBuf[8];  // this should be ok for all built-in fonts
  mx.clear();
  while (*p != '\0')
  {
    charWidth = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf);

    for (uint8_t i = 0; i <= charWidth; i++)  // allow space between characters
    {
      mx.transform(MD_MAX72XX::TSL);
      if (i < charWidth)
        mx.setColumn(0, cBuf[i]);
      delay(50);
    }
  }
}

// Herz wird dargestellt
void hearts()
{
  mx.clear();
  mx.setRow(0, 0, 0b00000000);
  mx.setRow(0, 1, 0b01100000);
  mx.setRow(0, 2, 0b11110000);
  mx.setRow(0, 3, 0b11110000);
  mx.setRow(0, 4, 0b11101010);
  mx.setRow(0, 5, 0b11011111);
  mx.setRow(0, 6, 0b10001110);
  mx.setRow(0, 7, 0b00000100);

  mx.setRow(1, 0, 0b00000000);
  mx.setRow(1, 1, 0b00000110);
  mx.setRow(1, 2, 0b00001111);
  mx.setRow(1, 3, 0b00001111);
  mx.setRow(1, 4, 0b01010111);
  mx.setRow(1, 5, 0b11111011);
  mx.setRow(1, 6, 0b01110001);
  mx.setRow(1, 7, 0b00100000);

  mx.setRow(2, 0, 0b00000000);
  mx.setRow(2, 1, 0b01100000);
  mx.setRow(2, 2, 0b11110000);
  mx.setRow(2, 3, 0b11110000);
  mx.setRow(2, 4, 0b11101010);
  mx.setRow(2, 5, 0b11011111);
  mx.setRow(2, 6, 0b10001110);
  mx.setRow(2, 7, 0b00000100);

  mx.setRow(3, 0, 0b00000000);
  mx.setRow(3, 1, 0b00000110);
  mx.setRow(3, 2, 0b00001111);
  mx.setRow(3, 3, 0b00001111);
  mx.setRow(3, 4, 0b01010111);
  mx.setRow(3, 5, 0b11111011);
  mx.setRow(3, 6, 0b01110001);
  mx.setRow(3, 7, 0b00100000);
}

// Die Helligkeit wird regegelt - Puls effekt
void intensity()
{
  mx.clear();
  // Grow and get brighter
  for (int8_t i = 1; i <= MAX_INTENSITY; i++)
  {
    mx.control(MD_MAX72XX::INTENSITY, i);
    hearts();
    delay(10);
  }
  for (int8_t i = MAX_INTENSITY; i >= 1; i--)
  {
    mx.control(MD_MAX72XX::INTENSITY, i);
    hearts();
    delay(10);
  }
  mx.control(MD_MAX72XX::INTENSITY, 1);
}


void setup()
{
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  mx.begin();
}

void loop()
{
  if (button()) // wenn Taster gedrückt wurde
  {
    delay(200);
    intensity();
    delay(100);
    intensity();
    delay(500);
    mx.control(MD_MAX72XX::INTENSITY, MAX_INTENSITY);
    scrollText(results[random(ARRAYSIZE)]);
    delay(500);
  }
}

Nachdem der Quellcode auf unseren Amica V2 hochgeladen wurde, sollten die Herzen erscheinen, sowie einer der festgelegten Sätze angezeigt werden.

Frontale Ansicht der fertigen Box

Damit ist das Gerät einsatzbereit. Wir können nun eine Frage stellen, und bekommen auf Knopfdruck eine Antwort. 

Fertiges Projekt mit Laufschrift

Ein passendes Gehäuse

Für alle die Zugriff auf einen Lasercutter haben, stellen wir demnächst die Datei für ein passendes Gehäuse zum Download bereit.

Mit ein wenig Geschick und Kreativität findet sich jedoch bestimmt irgendwo ein passender Behälter für die wenigen Komponenten, z.B. eine Herzförmige Pralinendose in dem wir ein Fenster für das Display, und eine Öffnung für den Taster verbauen.

Stromversorgung

Das Modul kann mit einem einfachen USB-Netzteil wie ein Smartphone-Ladegerät betrieben werden. Wer jedoch auf Kabel verzichten möchte, kann eine kleine USB-Powerbank verwenden. Wer schon etwas mehr Bastelerfahrung hat, kann auch einen Akku und einen Laderegler verwenden - dies würde jedoch den Rahmen dieses Blogs sprengen. 

Alternative Verwendungsmöglichkeit

Da die Sätze beliebig angepasst werden können, sind viele weitere Einsatzmöglichkeiten denkbar.

So wäre es möglich den Tag der Verlobung, der Hochzeit, den Ort des Kennenlernens, oder Sätze wie "Ich denke an dich" oder "Unser Urlaub 2019 auf Malta war so unvergesslich romantisch" zu verwenden. Das ganze dann in einem herzförmigen Gehäuse Verpackt, mit Akku und Lademodul - schon hat man ein selbstgemachtes, romantisches und einzigartiges Geschenk.

 

Ich hoffe der heutige Blog-Beitrag hat Ihnen gefallen. Ich verabschiede mich bis zum nächsten Beitrag!

Ihr Moritz Spranger

 

 

Letzter Artikel GPS Monitor für Geo-Cacher
Neuer Artikel Eine elegante automatische Treppenbeleuchtung (Teil5)

Hinterlasse einen Kommentar

Kommentare müssen vor der Veröffentlichung überprüft werden

Erforderliche Angabe