Dankeschön

Wir blicken auf ein schwieriges Jahr 2020 zurück und möchten uns für die Unterstützung jeglicher Art bedanken. Ein besonderer Dank gilt der Mörike-Apotheke und der Avia Tankstelle für den Verkauf der im FabLab Neuenstadt selbst erstellten Holzarbeiten zur Weihnachtszeit.

Nun blicken wir nach vorne und laden Sie ein, unsere Projekte und Veranstaltungen zu besuchen, sobald wir wieder öffnen dürfen.

Unser Projekt FabLab ist für kreative Menschen der ideale Platz, egal ob man ein T-Shirt bedrucken oder besticken möchte, aus Holz lasercutten oder Materialien mit unserer neuen CNC-Fräse bearbeiten möchte. Zudem können defekte Geräte in unserem monatlichen Reparaturcafé unter Anleitung repariert werden.

Wir wünschen Ihnen einen guten Start in das Jahr 2021.

Die Vorstandschaft

Senso – selbst entwickelt

Zum Senso: Gehäuse im 3D-Druck erzeugt und aus lasergeschnittenen Arcylteilen gefertigt. Hardware: Arduino Standard, Mp3-Player (DFPlayer mini), LCD-Display 16×2, 4 Tastenfelder jeweils mit individuell ansteuerbarer LED und 4 zusätzliche Bedientasten. Funktionen: Verschiedene Spiele mit Licht- und Soundeffekten und MP3-Player zum Musikabspielen mit verschiedenen Lichteffekten. Besonderheiten: Objektorientierte Software, die speziell mit den beschränkten Fähigkeiten eines normalen Arduino umgehen muss in Bezug auf Speicherkapazität und Rechenleistung. Ergebnis: Absolut direkte Bedienung ohne jegliche Hänger. Reagiert jederzeit auf alle Tastendrücke. Ebenfalls Aufbau einer Menüstruktur, die mit den geringen Ressourcen umgehen kann und eine gute Basis ist für weitere Projekte. Mit dieser Software wurde speziell gezeigt, wie eine Echtzeitfähigkeit mit einem Mikrocontroller erreicht werden kann.

 

 

Weihnachtsverkauf

Wir, der Jugendförderverein Brückedächle e.V., engagieren uns seit fast 20 Jahren in Neuenstadt in der Jugendarbeit und bei verschiedenen Veranstaltungen und Projekten. 
Auch für uns war das Jahr 2020 schwierig. 
Dennoch konnten wir auch in diesem Jahr im FabLab Neuenstadt selbst erstellte Holzarbeiten kreieren, welche bei der Mörike Apotheke und bei der AVIA Tankstelle in Neuenstadt erworben werden können.
Wir haben im Angebot:
Windlicht Neuenstadt, mit LED Kerze € 13
Diorama Neuenstadt, mit LED Beleuchtung € 35
Baumschmuck mit Stadtturm € 2,50
Ob als Weihnachtsgeschenk oder Dekoration für Ihr eigenes Zuhause, wir freuen uns, wenn Sie unsere Arbeit unterstützen.

Im Namen des Vorstandes wünschen wir Ihnen ein frohes Weihnachtsfest und einen guten Start in das Jahr 2021.

Die Vorstandschaft

Einladung zur Mitgliederversammlung

Hiermit laden wir herzlich zu unserer Mitgliederversammlung am Samstag, den 21. November 2020 um 19 Uhr in der Kelterhalle in Neuenstadt-Cleversulzbach ein.
Besondere Umstände erfordern besondere Maßnahmen.
 
Aus diesem Grund wird die Mitgliederversammlung in diesem Jahr nicht wie gewohnt im Jugendhaus, sondern in der Kelterhalle in 74196 Neuenstadt-Cleversulzbach stattfinden.
Der Einlass ist nur mit einer vorherigen Anmeldung bis spätestens 11.11.2020 über https://anmeldung.fablab-neuenstadt.de/MV2020/ oder über Herr Sören Oberndörfer (Mobil +49 160 8546455) möglich.
 
Tagesordnung:
  1. Entgegennahme des Jahresberichtes des Vorstandes
  2. Feststellung der Beschlussfähigkeit
  3. Feststellung der Jahresrechnung
  4. Entgegennahme des Prüfungsberichtes der Kassenprüfer*innen
  5. Wahl der Kassenprüfer*innen (2 Posten)
  6. Entlastung des Vorstandes einschl. Kassenverwaltung
  7. Wahl des Vorstandes
    1. Wahl des*der 1. Vorsitzenden (1 Posten)
    2. Wahl des*der 2. Vorsitzenden (1 Posten)
    3. Wahl der Kassenverwaltung (1 Posten)
    4. Wahl des*der Schriftführer*in (1 Posten)
    5. Wahl der Beisitzer*innen (2 Posten)
    6. Wahl der Jugendvertreter*innen (2 Posten)
  8. Anträge Anschaffungen
    1. Playstation 5 + TV
    2. Videoschnitt / CAD-PC
    3. Kamera / Streaming Setup
    4. 3D-Drucker
    5. Staubsauger
    6. Lötstation(en)
  9. Ausblick
  10. Sonstiges
Bleiben Sie gesund!
Vorstand des Jugendfördervereins Brückedächle e. V.

Neustart mit neuen Möglichkeiten im FabLab Neuenstadt

Wir sind wieder da!

Nach einer Corona Pause startet das Hightech-Labor FabLab Neuenstadt ab 1. September mit ganz neuen Möglichkeiten.

Das Ziel des FabLab ist, der Allgemeinheit den Zugang zu Maschinen und Wissen bereitzustellen. Wir möchten das Interesse für Technik bei Jugendlichen wecken, zukunftsfähige Projekte umsetzen sowie praktisches Wissen und persönliche Kompetenzen fördern. Kurz vor dem Shutdown wurde nach einer längeren Spendenaktion eine neue CNC Fräse bestellt welche inzwischen eingetroffen, angeschlossen und den Besuchern des FabLabs nach Einweisung zur Verfügung steht. Angeschafft wurde eine Portal CNC Fräse mit einem Verfahrweg von 623 x 1223 x 145 mm (X, Y, Z). Diese ermöglicht den Besuchern ihre Ideen und Projekte in einem Zerspanungsverfahren umzusetzen, die seither auf unseren 3D Druckern oder dem Lasercutter so nicht möglich waren. Ein besonderer Dank geht an die Mitarbeiter der Firma Bosch, die uns durch den Verein Cents for help e. V. mit 5000 € unterstützt haben und Audi, die 1000 € für unser Projekt dazugegeben haben. Ohne deren Unterstützung wäre diese Anschaffung in Höhe von 14.000 € nicht möglich gewesen.

Timo und Marco mit der neuen Fräse
Bild (v.l.): Timo und Marco mit der neuen Fräse im FabLab Neuenstadt

Besuchen kann man das FabLab wieder ab dem 1. September, vorerst jeden Dienstag von 18.30 Uhr – 21 Uhr im Jugendhaus Neuenstadt 2.OG. 

Derzeit sind maximal 15 Personen zugelassen und die Samstag Öffnung wird vorübergehend noch ausgesetzt.

Mit dem Klick auf den Link erhält man Zugriff auf unser aktuelles Hygienekonzept. Dieses sollte vor dem Besuch unbedingt gelesen werden.

Mini Maker Faire 2020 – 07.03. von 10:00 bis 18:00 Uhr

Am Samstag, den 07. März 2020 findet ihr uns auf der ersten „Mini Maker Faire Heilbronn“!

Hier dreht sich alles um Technologie, Kunst und Kreativität. Besuchende können kostenfrei und ohne Anmeldung zur Mini Maker Faire kommen. Das Rahmenprogramm sowie die Liste der ausstellenden Maker und Makerinnen wird spätestens einen Monat vor dem Event hier veröffentlicht.

Die Mini Maker Faire Heilbronn findet im Hagenbucher, dem älteren der beiden experimenta-Gebäude, statt. Mit dem Auto kann im Parkhaus der experimenta geparkt werden. Das Parkticket kann an der Kasse der experimenta auf 5€ reduziert werden.

Weitere Informationen hier

Tag der offenen Tür

Das Jugendreferat Neuenstadt lädt zusammen mit dem Jugendförderverein Brückedächle e.V. ganz herzlich zum Tag der offenen Tür im Jugendhaus Neuenstadt (Öhringer Str. 24, 2. OG) am Samstag, den 29. Februar 2020 von 14-18 Uhr ein!

Sie werden dabei die Gelegenheit haben uns und unsere Angebote bei einer Tasse Kaffee und einem Stück Kuchen besser kennenzulernen. Wir möchten Ihnen einen Einblick in unser Projekt FabLab und in die Nutzungsmöglichkeiten des Jugendhauses geben. Beim Flohmarkt des Friedenshorts wird es allerhand Überraschendes geben.

Wir freuen uns auf Ihren Besuch!

Wir bedanken uns recht herzlich für Ihre Besuche und Ihre Unterstützung im vergangenen Jahr und wünschen Ihnen fröhliche Weihnachten und ein gutes neues Jahr!

Unsere Öffnungszeiten über die Feiertage:
Am 24. und 31. Dezember bleibt das FabLab geschlossen.
Wir haben ab Samstag , den 04. Januar 2020 von 15.00-19.00 Uhr bzw. Dienstag, den 07. Januar 2020 von 18.30-21.00 Uhr wieder geöffnet.

Elch zu Weihnachten

Der Elch als Weihnachtsschmuck ist ein kleines Projekt, welches mit einem Arduino Uno oder Klone, einer LED mit Vorwiderstand und einem kleinen Servo auskommt. Die Besonderheit liegt darin, dass der Elch mit dem USB-Kabel, mit dem er über die Arduino IDE programmiert wird, mit dem PC verbunden bleibt. Dann wird das Python3-Skript Elch_1.py gestartet, welches im aktuellen Verzeichnis die Datei Elch.png benötigt. Zwischen dem PC und dem Arduino wird nun eine serielle Verbindung aufgebaut, die als Beispiel für eine fehlertolerante und besonders zuverlässige serielle Datenübertragung herangezogen werden kann.

Jetzt kann man wunderschön ein Setup für den Elch finden, welches einem besonders gefällt: Man schaltet die Automatik aus, fährt den Kopf in die gewünschte obere Position und speichert diese ab und macht dasselbe mit der unteren Position. Anschließend werden noch die Nickfrequenz des Kopfes und die Blinkfrequenz der LED eingestellt. Wer will kann auch im Stillstand einfach nur die Helligkeit der LED regeln. Wenn alles gespeichert ist, dann läuft der Elch auch ohne das Python Skript mit jeder USB-Stromversorgung oder einem Arduino Uno geeigneten Netzteil.

Damit eine serielle Verbindung zustande kommt, muss immer zuerst der Elch eingesteckt sein und dann das Python Skript gestartet werden.

Elch_Bauteile_Schaltung

 

weihnachtsElch.ino

#include <Servo.h>
#include <EEPROM.h>
#include <float.h>

#include "prg.h"

static Servo gelenk;
static constexpr int gelenkPin = 2, nosePin = 3, keyPin = 4;
static unsigned long lastMillis;
static struct {
  int microSecondsTop, microSecondsBottom;
} config;
static float ti;
static bool keyPulse;
static float loop2T, loop2OldGel;
static prgPos myPrgPos;
static bool autoMode;

static int servoclamp(int v)
{
  if (v < 900) return 900;
  if (v > 2100) return 2100;
  return v;
}

// v bleibt in den Schranken l1,l2 wobei egal ist ob l1<l2 oder l1>l2
static float floatclamp(float v, float l1, float l2)
{
  float klein, gross;
  if (l1 < l2) {
    klein = l1;
    gross = l2;
  } else {
    klein = l2;
    gross = l1;
  }
  if (v < klein) v = klein;
  if (v > gross) v = gross;
  return v;
}

static void help()
{
  Serial.println(F(
    "FabLab Neuenstadt - Weihnachten 2022\n"
    "SuperELCH Programmieranleitung\n"
    "k: Kill automatic (zuerst machen, sonst geht nichts manuell)\n"
    "t,b: Fahre zu Top oder Bottom\n"
    "T,B: Merke aktuelle Position als Top oder Bottom\n"
    "a,e: Servo ausschalten / Servo einschalten\n"
    "1,2,3  viel,mittel,wenig nach links fahren\n"
    "4,5,6  wenig,mittel,viel nach rechts fahren\n"
    "w: aktuelle Konfiguration im EEPROM speichern\n"
    "h: Hilfe\n"
    "v: show values\n"));
}

static void loopComm()
{
  const int c = Serial.read();
  if (c=='t') gelenk.writeMicroseconds(servoclamp(config.microSecondsTop));
  if (c=='b') gelenk.writeMicroseconds(servoclamp(config.microSecondsBottom));
  if (c=='T') config.microSecondsTop=servoclamp(gelenk.readMicroseconds());
  if (c=='B') config.microSecondsBottom=servoclamp(gelenk.readMicroseconds());
  if (c=='e') gelenk.attach(gelenkPin);
  if (c=='a') gelenk.detach();
  if (c=='1') gelenk.writeMicroseconds(servoclamp(gelenk.readMicroseconds()+100));
  if (c=='2') gelenk.writeMicroseconds(servoclamp(gelenk.readMicroseconds()+10));
  if (c=='3') gelenk.writeMicroseconds(servoclamp(gelenk.readMicroseconds()+1));
  if (c=='4') gelenk.writeMicroseconds(servoclamp(gelenk.readMicroseconds()-1));
  if (c=='5') gelenk.writeMicroseconds(servoclamp(gelenk.readMicroseconds()-10));
  if (c=='6') gelenk.writeMicroseconds(servoclamp(gelenk.readMicroseconds()-100));
  if (c=='w') EEPROM.put(0, config);
  if (c=='k') autoMode = false;
  if (c=='h') help();
  if (c=='v') {
    Serial.print("Bottom=");
    Serial.print(config.microSecondsBottom);
    Serial.print(" Top=");
    Serial.print(config.microSecondsTop);
    Serial.print(" Current=");
    Serial.print(gelenk.readMicroseconds());
    Serial.print(" Prg=");
    Serial.println(myPrgPos.getProgramNumber());
    Serial.print("loop2OldGel=");
    Serial.println(loop2OldGel);
  }
}

void setup()
{
  Serial.begin(9600);

  pinMode(gelenkPin, OUTPUT);
  digitalWrite(gelenkPin, LOW);
  gelenk.attach(gelenkPin);
  pinMode(nosePin, OUTPUT);
  pinMode(keyPin, INPUT_PULLUP);

  EEPROM.get(0, config);
  if (config.microSecondsBottom <= 0 || config.microSecondsTop <= 0) {
    config.microSecondsBottom = servoclamp(1800);
    config.microSecondsTop = servoclamp(1600);
  }
  config.microSecondsBottom = servoclamp(config.microSecondsBottom);
  config.microSecondsTop = servoclamp(config.microSecondsTop);

  autoMode = true;

  lastMillis = millis();

  help();
}

static void gel(float p) // p=0 bottom / p=1 top
{
  p *= config.microSecondsTop - config.microSecondsBottom;
  p += config.microSecondsBottom;
  p = floatclamp(p, config.microSecondsBottom, config.microSecondsTop);
  gelenk.writeMicroseconds(p);
}

static void nos(float p) // p=0 bottom / p=1 top
{
  p *= 255;
  p = floatclamp(p, 0, 255);
  analogWrite(nosePin, p);
}

static void loopKey()
{
  static float pressed = 0;
  keyPulse = false;
  if ( ! digitalRead(keyPin)) {
    pressed += ti;
    if (pressed > 0.1) {
      keyPulse = true;
      pressed = -FLT_MAX;            
    }
  } else pressed = 0;
}

static void loopNoseServo()
{
  if (autoMode) {
    if (myPrgPos.currentAcceleration() > 0) {
      const float deltaA = ti * myPrgPos.currentAcceleration();
      loop2OldGel = deltaA * myPrgPos.currentServo() + loop2OldGel * (1.f - deltaA);
    } else {
      loop2OldGel = myPrgPos.currentServo();
    }
    gel(loop2OldGel);

    nos(myPrgPos.currentLed());

    if (loop2T > myPrgPos.currentDelay()) {
      loop2T -= myPrgPos.currentDelay();
      myPrgPos.nextCommand();
    }

    loop2T += ti;
  } else {
    nos(1);
  }
}

void loop()
{
  unsigned long nowMillis = millis();
  unsigned long diffMillis = nowMillis - lastMillis; // wraparound ergibt keinen Fehler.
  lastMillis = nowMillis;
  ti = diffMillis;
  ti /= 1000; // ti ist jetzt die Zeitdifferenz zum letzten Mal in Sekunden.

  loopKey(); // ztuerst machen, weil das keyPulse setzt.

  loopComm();

  loopNoseServo();
  
  if (keyPulse) {
    autoMode = true;
//    loop2OldGel = myPrgPos.currentServo() > 0.5 ? 0 : 1; // snap nose
    myPrgPos.nextProgram();
    loop2T = 0;
  }
}
prg.cpp

#include "prg.h"

#include <Arduino.h>
#include <float.h>

// Programme sind kodiert als Gelenk (0..1), Nase (0..1), Delay (s). Programmende mit einzelnem Eintrag FLT_MAX
// Der erste Wert jedes Programmes ist die Acceleration. negative acceleration = instant.
// Listenende mit zusätzlichen FLT_MAX Eintrag

static const float pStore[] PROGMEM = {
  ////////////////////////////////// 0
  2,
  0  , 0, 1,
  0  , 1, 1,
  0  , 0, 1,
  0.1, 1, 1,
  0  , 0, 1,
  0.2, 1, 1,
  0.1, 0, 1,
  0.3, 1, 1,
  0.2, 0, 1,
  0.4, 1, 1,
  0.3, 0, 1,
  0.5, 1, 1,
  0.4, 0, 1,
  0.6, 1, 1,
  0.5, 0, 1,
  0.7, 1, 1,
  0.6, 0, 1,
  0.8, 1, 1,
  0.7, 0, 1,
  0.9, 1, 1,
  0.8, 0, 1,
  1  , 1, 1,
  0.9, 0, 1,
  1  , 1, 1,
  1  , 0, 1,
  FLT_MAX,


  ////////////////////////////////// 1
  -1,
  0.9, 0, 0.5,
  1, 1, 0.5,
  0.9, 0, 0.5,
  1, 1, 0.5,
  0.4, 0, 1,
  1, 1, 30-0.5*4-1,
  FLT_MAX,
  

  ////////////////////////////////// 2
  -1,
  0.9,1,0.25,
  0.9,0,0.25,
  0.9,0,0.25,
  0.8,0,0.25,
  0.9,1,0.25,
  0.9,0,0.25,
  1,0,0.25,
  1,0,0.25,
  1,1,0.25,
  1,0,0.25,
  0.8,0,0.25,
  0.8,0,0.25,
  1,1,0.25,
  1,0,0.25,
  1,0,0.25,
  1,0,0.25,  
  
  1  ,1,0.25,
  1  ,0,0.25,
  1  ,0,0.25,
  1  ,0,0.25,
  1  ,0,0.25,
  1  ,0,0.25,
  1,  0,0.25,
  1,  0,0.25,
  1,  1,0.25,
  1,  0,0.25,
  1  ,0,0.25,
  1  ,0,0.25,
  1,  0,0.25,
  1,  0,0.25,
  1,  0,0.25,
  1,  0,0.25,  

  1  ,1,0.25,
  1  ,1,0.25,
  1  ,0,0.25,
  1  ,0,0.25,
  1  ,1,0.25,
  1  ,1,0.25,
  1,  0,0.25,
  1,  0,0.25,
  1,  1,0.25,
  1,  1,0.25,
  1  ,0,0.25,
  1  ,0,0.25,
  1,  1,0.25,
  1,  1,0.25,
  1,  0,0.25,
  1,  0,0.25,  

  1  ,1,0.25,
  1  ,0,0.25,
  1  ,1,0.25,
  1  ,0,0.25,
  1  ,1,0.25,
  1  ,0,0.25,
  1,  1,0.25,
  1,  0,0.25,
  1,  1,0.25,
  1,  0,0.25,
  1  ,1,0.25,
  1  ,0,0.25,
  1,  1,0.25,
  1,  0,0.25,
  1,  1,0.25,
  1,  0,0.25,  
  FLT_MAX,


  ////////////////////////////////// 3
  -1,
  1  ,1,0.2,
  0.8,1,0.1,
  1  ,1,0.2,
  0.8,1,0.1,
  1  ,1,0.2,
  0.8,1,0.2,
  0  ,0,20-0.2*4-0.1*2,
  FLT_MAX,


  ////////////////////////////////// 4
  1,
  1,0,10,
  0,1,50,
  FLT_MAX,


  ////////////////////////////////// 5
  -1,
  0,1,0.5,
  1,0,0.5,
  0,1,0.5,
  1,0,0.5,
  0,1,0.25,
  1,0,0.25,
  0,1,0.25,
  1,0,0.25,
  0,1,0.25,
  1,0,0.25,
  0,1,0.25,
  1,0,60-0.25*7-0.5*4,
  FLT_MAX,


  ////////////////////////////////// 6
  10,
  1.0,0,2,  
  1.0,1,2,  
  0.9,0,2,  
  0.9,1,2,  
  0.8,0,2,  
  0.8,1,2,  
  0.7,0,2,  
  0.7,1,2,  
  0.6,0,2,  
  0.6,1,2,  
  0.5,0,2,  
  0.5,1,2,  
  0.4,0,2,  
  0.4,1,2,  
  0.3,0,2,  
  0.3,1,2,  
  0.2,0,2,  
  0.2,1,2,  
  0.1,0,2,  
  0.1,1,2,  
  0  ,0,2,  
  0  ,1,2,  
  FLT_MAX,


  -1,
  0,0,1,
  1,1,1,
  FLT_MAX,


  -1,
  0,1,0.5,
  1,0,0.5,
  0.2,1,0.5,
  0.8,0,0.5,
  0.4,1,0.5,
  0.6,0,0.5,
  FLT_MAX,
  

  0.5,
  0,0,30,
  1,1,30,
  FLT_MAX,

  ////////////////////////////////// EOF
  FLT_MAX // end of programs!
};


prgPos::prgPos()
  : p(pStore+1), pCurrentProgram(pStore), programNumber(0)
{
}

void prgPos::nextProgram()
{
  while (pgm_read_float(p) != FLT_MAX) p+=3;
  if (pgm_read_float(++p) == FLT_MAX) {
    p = pStore + 1;
    pCurrentProgram = pStore;
    programNumber = 0;
  } else {
    ++programNumber;
    pCurrentProgram = p++;
  }
}

void prgPos::nextCommand()
{
  p+=3;
  if (pgm_read_float(p) == FLT_MAX) p = pCurrentProgram + 1;
}

float prgPos::currentLed()
{
  return pgm_read_float(p+1);
}

float prgPos::currentServo()
{
  return pgm_read_float(p);
}

float prgPos::currentDelay()
{
  return pgm_read_float(p+2);
}

float prgPos::currentAcceleration()
{
  return pgm_read_float(pCurrentProgram);
}

int prgPos::getProgramNumber()
{
  return programNumber;
}
prg.h

#ifndef __PRG_H
#define __PRG_H

class prgPos {
public:
  prgPos();
  void nextProgram();
  void nextCommand(); // auto wrap around
  float currentLed();
  float currentServo();
  float currentDelay();
  float currentAcceleration();
  int getProgramNumber();
private:
  const float *p, *pCurrentProgram;
  int programNumber;
};

#endif