eigene Beiträge| neueste Beiträge| ungelesene Beiträge| unbeantwortete Beiträge| aktive Themen| Fördermitgliedschaft| Cockerpage

Hub Chronie

Eigenbau und Modding Geschichten von Guns, Hoppern, Equipment.
Felix2897
Förderduuuuude
Förderduuuuude
ForumBadges: Bild
Beiträge: 24
Registriert: 13.07.2020 23:01

Re: Hub Chronie

#226

23.10.2022 17:24

icp-ms hat geschrieben:
23.10.2022 14:11
Das ist häufiger ein Problem bei Arduino clonen. Mit originalen hat man weniger Probleme.
Ich glaube langsam auch, dass es am Klon liegt. Ich bestell einen anderen orginalen arduino nano von der arduino.cc webseite und hoffe dass es dann funktioniert.

Mal gucken ob das ablöten funktioniert 😅

Link:
BBcode:
HTML:
Hide post links
Show post links
Felix2897
Förderduuuuude
Förderduuuuude
ForumBadges: Bild
Beiträge: 24
Registriert: 13.07.2020 23:01

Re: Hub Chronie

#227

26.10.2022 17:54

kurze frage habt ihr noch die Newliquidcrystal1.3.5 Datei? die datei ist bei bitbucket nicht mehr verfügbar und ich bin mir nicht sicher, ob ich die richtig im Internet gefunden habe.

Link:
BBcode:
HTML:
Hide post links
Show post links
Felix2897
Förderduuuuude
Förderduuuuude
ForumBadges: Bild
Beiträge: 24
Registriert: 13.07.2020 23:01

Re: Hub Chronie

#228

26.10.2022 22:10

nach dem der originale arduino nano heute angekommen ist, hab ich den upload erneut versucht.
Jedoch ohne Erfolg. Es wird mir der gleiche Fehler wie weiter oben bereits gepostet angezeigt.
ich versuch es noch mit einem Post auf im arduino Form. Wenn mir da niemand helfen kann, wäre es möglich das ich den arduino einem von euch zukommen zu lassen für den Upload? Damit ich ihn anschließend nur noch auflöten muss. Das ist nicht die Optimale Lösung da ich dann auch keine Updates aufspielen kann. Aber immerhin würde der chrony dann funktionieren.

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
TITO0815
Midgard-Design
Midgard-Design
Wohnort: Tal der Ahnungslosen
Trusted Seller: Bild
ForumBadges: BildBild
XtraBadges:
zeigen
Beiträge: 4860
Registriert: 29.10.2014 15:51

Re: Hub Chronie

#229

27.10.2022 07:48

Ja klar.

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
TITO0815
Midgard-Design
Midgard-Design
Wohnort: Tal der Ahnungslosen
Trusted Seller: Bild
ForumBadges: BildBild
XtraBadges:
zeigen
Beiträge: 4860
Registriert: 29.10.2014 15:51

Re: Hub Chronie

#230

27.10.2022 16:38

Sobald der Drucker wieder läuft. Wird die Version 2.0 gedruckt und getestet....


Die Lichtschrankenarme sind klappbar.
Dateianhänge
20221027_145105.jpg
20221027_144654.jpg
20221027_144645.jpg
Folgende Benutzer bedankten sich beim Autor TITO0815 für den Beitrag:
Gigagnouf (27.10.2022 23:06)

Link:
BBcode:
HTML:
Hide post links
Show post links
Felix2897
Förderduuuuude
Förderduuuuude
ForumBadges: Bild
Beiträge: 24
Registriert: 13.07.2020 23:01

Re: Hub Chronie

#231

29.10.2022 21:05

Ich hab mir jetzt einen arduino nano klo auf amazpn gekauft. Der von az delivery:
https://amzn.eu/d/93XU8vg
Es hat super geklappt plug an play. Upload direkt beim ersten Mal ohne Problem und heute den chrony in Tschechien ausprobiert. Ich brauch noch passende Schrauben aber sonst passt alles!!
Bild

An der Stelle nochmal vielen Dank für die Teile und für die direkte Unterstützung bei Fragen.
Folgende Benutzer bedankten sich beim Autor Felix2897 für den Beitrag (Insgesamt 3):
icp-ms (29.10.2022 22:02) • TITO0815 (30.10.2022 09:04) • Gigagnouf (31.10.2022 03:29)

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
TITO0815
Midgard-Design
Midgard-Design
Wohnort: Tal der Ahnungslosen
Trusted Seller: Bild
ForumBadges: BildBild
XtraBadges:
zeigen
Beiträge: 4860
Registriert: 29.10.2014 15:51

Re: Hub Chronie

#232

16.11.2022 16:41

So habe nochmal bestellt und getestet...

Die HIR 333-A und die HIR 383C-L289 sind perfekt. Unterschiede dort der Abstrahlwinkel.

Die HIR 7373B-L289, welche ich weiter oben gepostet hatte gehen auch, aber durch die Tönung nur eine Reichweite von ~ 40mm

Die beiden anderen habe ich bis 80mm getestet und die Fotodiode erkennt sie noch einwandfrei.

Interessant wäre dies für Standchronys, welche mit einem PVC Rohr arbeiten möchten.

2 IR-Dioden parallel und 2 Fotofioden in Reihe sollte die Fläche verdoppeln. Muss ich mal testen.

Jetzt erstmal den Holzchronybausatz. Bilder folgen

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
alois.hanse
Podbitch
Podbitch
ForumBadges: Bild
Beiträge: 138
Registriert: 02.12.2018 19:48

Re: Hub Chronie

#233

17.11.2022 14:15

Nachdem wir die Hub Chronys bis zum total ausfall auf unseren Little Game genutzt haben arbeite ich nun auch an na Stand Version.
Jedoch wird sie mit nen Plexiglas Rohr realisiert werden, damit kann ich das Rohr mit nen Podreiniger auch mal fix sauber machen ohne das reste sic vor die "Augen" setzen.

Kumpel arbeitet grade an der Manchette in die die Laser ohne Fokuslinse und 5 in Reihe geschaltete Fotodioden kommen sollen.

Nen Prototyp werde ich mit Glück im Dezember posten können.

Tito vlt können wir uns austauschen und damit schneller was brauchbares entwickeln.
Folgende Benutzer bedankten sich beim Autor alois.hanse für den Beitrag:
TITO0815 (17.11.2022 14:19)

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
TITO0815
Midgard-Design
Midgard-Design
Wohnort: Tal der Ahnungslosen
Trusted Seller: Bild
ForumBadges: BildBild
XtraBadges:
zeigen
Beiträge: 4860
Registriert: 29.10.2014 15:51

Re: Hub Chronie

#234

17.11.2022 14:20

Ja für mich war nur wichtig, ob das in Reihe schalten der Fotodioden den gewünschten Effekt hat. Sollte es eigentlich. Ist wie 5 Taster in Reiher. Egal welchen man betätigt, unterbricht es den Stromkreis...

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
Snowman2010
Paints
Kontaktdaten:
Wohnort: Usa
XtraBadges:
zeigen
Beiträge: 70
Registriert: 15.06.2020 13:07

Re: Hub Chronie

#235

22.11.2022 15:08

@alois.hanse das mit dem Plexiglas hört sich gut an. Aktuell läuft mein Standchrony mit PVC Rohr immer noch top, hatte aber auch noch keinen Paintsiffe auf den Dioden, wenn dann nur am Ende des Rohres.
Die Problematik die ich beim Plexiglasrohr sehe ist Rundung im Rohr an sich, die den Laser sehr wahrscheinlich bricht das es zu Ungenau wird und oder garnicht funktioniert. Bin aber mal gespannt was dein Ergebnis ist nach dem Testen.

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
alois.hanse
Podbitch
Podbitch
ForumBadges: Bild
Beiträge: 138
Registriert: 02.12.2018 19:48

Re: Hub Chronie

#236

22.11.2022 15:42

@Snowman2010 ich hatte es schon mit nen Hub Chrony getestet. Ich hab dazu nen Plexiglasrohr in den Chrony gesteckt und cal.50 durchlaufen lassen.
Der Chrony hat es ohne Probleme genommen.
Folgende Benutzer bedankten sich beim Autor alois.hanse für den Beitrag (Insgesamt 2):
icp-ms (22.11.2022 16:32) • Snowman2010 (29.11.2022 12:42)

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
TITO0815
Midgard-Design
Midgard-Design
Wohnort: Tal der Ahnungslosen
Trusted Seller: Bild
ForumBadges: BildBild
XtraBadges:
zeigen
Beiträge: 4860
Registriert: 29.10.2014 15:51

Re: Hub Chronie

#237

22.11.2022 18:08

[bratan]
IMG-20221120-WA0002.jpg
:fingerpistole:
Folgende Benutzer bedankten sich beim Autor TITO0815 für den Beitrag (Insgesamt 2):
icp-ms (22.11.2022 20:23) • Gigagnouf (23.11.2022 01:50)

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
TITO0815
Midgard-Design
Midgard-Design
Wohnort: Tal der Ahnungslosen
Trusted Seller: Bild
ForumBadges: BildBild
XtraBadges:
zeigen
Beiträge: 4860
Registriert: 29.10.2014 15:51

Re: Hub Chronie

#238

24.11.2022 15:35

1-2-3 Anpassungen, dann nochmal.
Aber vom Grundsatz her passt es.
IMG-20221124-WA0005_1.jpeg
Dauer für das lasern, ca. 20min.
Selbe Leistung als 3D Druck zwischen 25 und 50 Std, je nach Qualität...
Folgende Benutzer bedankten sich beim Autor TITO0815 für den Beitrag:
icp-ms (24.11.2022 20:43)

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
alois.hanse
Podbitch
Podbitch
ForumBadges: Bild
Beiträge: 138
Registriert: 02.12.2018 19:48

Re: Hub Chronie

#239

28.12.2022 10:58

Moin,
kleines Update.
Leider klappt es nicht wie gewünscht mit den 5 Fotodioden in Reihe, ich denke dafür ist die Spannung zu gering. Ich werde mal schauen was sich da machen lässt. Habe jetzt erstmal noch andere bestellt um zu schauen ob es mit dennen vlt besser geht.
Ansonsten wünsche ich allen nen guten Start ins neue Jahr.

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
TITO0815
Midgard-Design
Midgard-Design
Wohnort: Tal der Ahnungslosen
Trusted Seller: Bild
ForumBadges: BildBild
XtraBadges:
zeigen
Beiträge: 4860
Registriert: 29.10.2014 15:51

Re: Hub Chronie

#240

28.12.2022 12:08

Dann müssen die Widerstände für die Fotodioden neu berechnet werden.
Dann sollte es klappen.
Folgende Benutzer bedankten sich beim Autor TITO0815 für den Beitrag:
alois.hanse (28.12.2022 21:03)

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
alois.hanse
Podbitch
Podbitch
ForumBadges: Bild
Beiträge: 138
Registriert: 02.12.2018 19:48

Re: Hub Chronie

#241

29.12.2022 14:39

Hey @TITO0815 ,
Wenn du da was hast zur Berechnung wäre das Mega. Anbei mal ein paar Bilder.
Farbige Grüße
Dateianhänge
IMG_20221229_124236.jpg
IMG_20221229_124225.jpg
IMG_20221229_124220.jpg

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
TITO0815
Midgard-Design
Midgard-Design
Wohnort: Tal der Ahnungslosen
Trusted Seller: Bild
ForumBadges: BildBild
XtraBadges:
zeigen
Beiträge: 4860
Registriert: 29.10.2014 15:51

Re: Hub Chronie

#242

29.12.2022 16:37

Wie groß ist der Durchmesser?
Warum 5 Augen?
Würden da nich 2-3 reichen?

Link:
BBcode:
HTML:
Hide post links
Show post links
Felix2897
Förderduuuuude
Förderduuuuude
ForumBadges: Bild
Beiträge: 24
Registriert: 13.07.2020 23:01

Re: Hub Chronie

#243

05.01.2023 21:45

servus,
ich wollte mal fragen ob es progammiertechnisch möglich ist sich die niedrigste FPS anzeigen zu lassen, sodass man sieht, wie sehr der Markierer abweichungen hat?
Ich bräuchte zum Beispiel nicht die "Bps" Anzeige, da mir "bpsmax" ausreichend ist.

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
alois.hanse
Podbitch
Podbitch
ForumBadges: Bild
Beiträge: 138
Registriert: 02.12.2018 19:48

Re: Hub Chronie

#244

06.01.2023 07:17

Frohes neues @TITO0815,
Der Durchmesser ist 60mm, damit auch jeder Magfed Spieler sein Lauf da reinhalten kann. Selbst bei 3 Fotodioden gibt es keine Rückmeldung seitens des Boards.

Viele Grüße

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
icp-ms
Rain Man
Rain Man
ForumBadges: BildBildBild
XtraBadges:
zeigen
Beiträge: 10695
Registriert: 14.03.2005 17:56

Re: Hub Chronie

#245

06.01.2023 08:11

Felix2897 hat geschrieben:
05.01.2023 21:45
servus,
ich wollte mal fragen ob es progammiertechnisch möglich ist sich die niedrigste FPS anzeigen zu lassen, sodass man sieht, wie sehr der Markierer abweichungen hat?
Ich bräuchte zum Beispiel nicht die "Bps" Anzeige, da mir "bpsmax" ausreichend ist.
Moin,

die Abweichung in +/- fps wird doch unter "AVGfps+-" angezeigt

Aber klar kannst du das im Code ändern

Code: Alles auswählen

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <math.h>
#include <string.h>
//#include <pbhub.h>

#include <SPI.h>

#include "U8glib.h"

const float Versionsnummer = 0.62a;

//Displays:
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //Arduino Uno Analog in 4+5
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);  // I2C / TWI 

//Werte:
volatile int fpsPointerNextWertImArray = 0;
volatile int maxAnzahlWerteImArray = -1;
volatile int anzahlWerteImArray = 0;

//Inhaltwerte
volatile float bpsLog[5];
volatile int fpsLog[25]; // <-- 25 ist nur eine Möglichekeit, Du kannst hier so viele / wenig Werte nehmen wie Du willst
volatile int varianz = -1; 
volatile int sigma = -1;
volatile int mittelwert = -1;

const int l = 100; //Abstand der Lichtschranke in mm
volatile int shotCounter = 0;

volatile int sigmaMax = 0;

volatile int delaySwitch = 0;
volatile unsigned long Zeit1 = 0;
volatile unsigned long Zeit2 = 0;
volatile unsigned long Dauer = 0;

volatile long lastBpS = -1;
volatile long last = -1;

volatile float aktBps = -1;
volatile float maxBps = -1;

volatile float fps = 0;
volatile float fpsMin = 0;
volatile float fpsMax = 0;

volatile int shotCount = 0;

void SetupLCD()
{
  lcd.begin (20,4);
  lcd.setBacklightPin(3,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home ();  
}

void InitLCD()
{    
  lcd.setCursor(0,0);
  lcd.print("V");
  lcd.setCursor(1,0); 
  lcd.print(Versionsnummer,2);
  lcd.setCursor(6,0);
  lcd.print("pbhub.de");
  lcd.setCursor(0,1);
  lcd.print("fps:");
  lcd.setCursor(9,1);
  lcd.print("MAXfps:"); 
  lcd.setCursor(0,2);
  lcd.print("MINfps:"); 
  lcd.setCursor(9,2);
  lcd.print("MAXbps:"); 
  lcd.setCursor(0,3);
  lcd.print("#Shots:"); 
  lcd.setCursor(9,3);
  lcd.print("AVGfps+-"); 
}


 
void setup() {
  //Serial.begin(9600);
  //Serial.print("Start Up");   

  SetupLCD();  
  
  SetupU8G();    
  InitLCD();  
  SetupSonderzeichen();    
  
  attachInterrupt(0, Starten, FALLING);//PIN2
  attachInterrupt(1, Stoppen, FALLING);//PIN3
  
  lastBpS = millis();  
}


void SetupU8G()
{
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}

void UpdateFps()
{
  
  lcd.setCursor(5,1);  
  lcd.print(fps,0);  

  lcd.setCursor(17,1);
  lcd.print(fpsMax,0);

  lcd.setCursor(7,3);
  lcd.print(shotCounter);

  lcd.setCursor(4,2);
  lcd.print(fpsMin,0);
  
}

void UpdateBps()
{
   // lcd.setCursor(4,2);
    
    float tmp = aktBps;
    if (tmp < 0)
    {
      tmp =0;
    }
    if (tmp < 10)
    {
   //   lcd.print(" ");
    }
//    lcd.print(tmp,1);    
    
    lcd.setCursor(16,2);
    tmp = maxBps;
    if (tmp < 0)
    {
      tmp =0;
    }
    if (tmp < 10)
    {
      lcd.print(" ");
    }
    lcd.print(tmp,1);

}

void AddBpS()
{  
  long now = millis();
   
  float aktBpsDeltaT = now - last;
  if (aktBpsDeltaT == 0)
  {
    return;
  }
   
  last = now;
  
  float sumBpsT = aktBpsDeltaT;
  float maxBpsTAkt = 1 * 1000 / aktBpsDeltaT;
  
  if (maxBpsTAkt > maxBps && maxBpsTAkt < 25)
  {
    maxBps = maxBpsTAkt;
  }
  
  for (int i = 4; i > 0; i--)
  {  
    sumBpsT += bpsLog[i];
    bpsLog[i] = bpsLog[i-1];  
  }
  
  bpsLog[0] = aktBpsDeltaT;
  aktBps = 5 * 1000 / sumBpsT;
 
}

float CalcJoule(float meterProSekunde)
{
  float joule = 0.0032 * pow(meterProSekunde,2) / 1 / 2;
  if (joule>100) 
  {
    joule=0;
  }
  
  return joule;
}



void calcMittelwert()
{   
    for (int i = 0; i < anzahlWerteImArray; i++) 
    {
        mittelwert += fpsLog[i];       
    }    
    mittelwert /= anzahlWerteImArray;    

}

void calcVarianz()
{
    for (int i = 0; i < anzahlWerteImArray; i++) 
    {   
        varianz += (fpsLog[i] - mittelwert) * (fpsLog[i] - mittelwert);  //quadrat
    }
    varianz /= ( anzahlWerteImArray-1 );  

}

void calcStandardabweichung()
{
  sigma = sqrt( varianz );


  // sigmaMax = max(sigma, sigmaMax);

    //lcd.setCursor(17,3);
    //lcd.print(sigma);
}

void resetFPS()
{
  memset(&fpsLog[0], 0, sizeof(fpsLog));
  anzahlWerteImArray = 0;
  fpsPointerNextWertImArray = 0;  
}

void RecalcAbweichung()
{  calcVarianz();
  calcStandardabweichung();
}



void MessungFps()
{    
  Dauer=Zeit2-Zeit1;  

  if (Dauer <= 0)
  {
    fps = 0;
    return;
  }
    
  float vAkt = 3600.0*l/Dauer/1.075;
 
  float meterProSekunde = vAkt * 0.277778;  
    
  fps = vAkt * 0.911344;    
  
  fpsLog[fpsPointerNextWertImArray] = fps;
  fpsPointerNextWertImArray += 1;
  if (fpsPointerNextWertImArray == maxAnzahlWerteImArray)
  {
    fpsPointerNextWertImArray = 0; //Wir fangen vorne an!
  } 
  shotCount += 1;

  if (anzahlWerteImArray < maxAnzahlWerteImArray) //wenn wir einmal den Array gefüllt haben, laufen wir ihn immer komplett durch
  {
    anzahlWerteImArray += 1;
  }
  
  if (fps < fpsMin)
  {
    fpsMin = fps;
  }
  
  if (fps > fpsMax)
  {
    fpsMax = fps;
  }
        
  float joule = CalcJoule(meterProSekunde);    
}

volatile int resetCounter = 10;

const int ICON_LICHTSCHRANK_AN = 1;
const int ICON_LICHTSCHRANK_AUS = 2;
const int ICON_BATTERIE_8 = 3;
const int ICON_BATTERIE_7 = 4;
const int ICON_BATTERIE_6 = 5;
const int ICON_BATTERIE_5 = 6;
const int ICON_BATTERIE_4 = 7;
const int ICON_BATTERIE_3 = 8; 

void SetupSonderzeichen()
 {
  byte an[8] = {
    B00000,
    B00000,
    B01110,
    B01110,
    B01110,
    B01110,
    B00000,
    B00000,
    };
  lcd.createChar(ICON_LICHTSCHRANK_AN , an);
  
  byte aus[8] = {
    B00000,
    B11111,
    B10001,
    B10001,
    B10001,
    B10001,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_LICHTSCHRANK_AUS , aus);
   
  byte batlevel8[8] = {
    B01110,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_8 , batlevel8);
  
  byte batlevel7[8] = {
    B01110,
    B10001,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_7 , batlevel7);
  
  byte batlevel6[8] = {
    B01110,
    B10001,
    B10001,
    B11111,
    B11111,
    B11111,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_6 , batlevel6);
  
  byte batlevel5[8] = {
    B01110,
    B10001,
    B10001,
    B10001,
    B11111,
    B11111,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_5 , batlevel5); 
  
   byte batlevel4[8] = {
    B01110,
    B10001,
    B10001,
    B10001,
    B10001,
    B11111,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_4 , batlevel4);  
  
   byte batlevel3[8] = {
    B01110,
    B10001,
    B10001,
    B10001,
    B10001,
    B10001,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_3 , batlevel3);       
  
 }

void Batterie() 
{     
  lcd.setCursor(19,0);
 
  int BattValue = analogRead(A0);  
  float voltage = BattValue * (5.0 / 1023.0) * 2 ;  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 10V):
 
  if(voltage > 9.0)
  {        
    lcd.write(byte(ICON_BATTERIE_8));
  }
  else if(voltage > 8)
  {     
    lcd.write(byte(ICON_BATTERIE_7));
  }
  else if(voltage > 7.5)
  {        
    lcd.write(byte(ICON_BATTERIE_6));
  }
  else if(voltage > 7)
  {      
    lcd.write(byte(ICON_BATTERIE_5));
  }
  else if(voltage > 6.5)
  {   
    lcd.write(byte(ICON_BATTERIE_4));
  }
  else if(voltage > 6)
  {
   lcd.write(byte(ICON_BATTERIE_3));
  } 
  else
  {
    lcd.setCursor(17,0);
    //lcd.print(voltage,1);
    lcd.print("low");
  }
} 


void CheckLEDs()
{    
  int state1 = digitalRead(2);     
  int state2 = digitalRead(3);    
  lcd.setCursor(15,0);
  if (state1 == 0)
  {
    lcd.write(byte(ICON_LICHTSCHRANK_AN));  
  }
  else
  {
    lcd.write(byte(ICON_LICHTSCHRANK_AUS));  
  }
  
  lcd.setCursor(16,0);
  if (state2 == 0)
  {
    lcd.write(byte(ICON_LICHTSCHRANK_AN));  
  }
  else
  {
    lcd.write(byte(ICON_LICHTSCHRANK_AUS));  
  }
}

void UpdateOLED () { 
   
  u8g.setFont(u8g_font_gdb12);

  u8g.setPrintPos(10, 15);
  u8g.print("Fps"); 
  u8g.setPrintPos(85, 15);
  if (fps < 0)
  {
    u8g.print(0,0); 
  }
  else
  {
    u8g.print(fps,0); 
  }

  u8g.setPrintPos(10, 38);
  u8g.print("Fps +/-"); 
  u8g.setPrintPos(85, 38);
  u8g.print(sigma); 

  u8g.setPrintPos(10, 61);
  u8g.print("Bps"); 
  u8g.setPrintPos(85, 61);
  u8g.print(maxBps,1); 
}


void loop() {
  
  CheckLEDs();

  UpdateBps();
  MessungFps();
  UpdateFps();  
  Batterie();

  u8g.firstPage();  
  do 
  {
    UpdateOLED();
  } while( u8g.nextPage() );
         
  if (delaySwitch == 0)
  {
    delaySwitch = 1;
    resetCounter-= 1;
    
    if (resetCounter == 0)
    {
      maxBps = 0;
      aktBps = 0;
      resetFPS();
      resetCounter = 10;
    }  
  }
  else
  {   
    RecalcAbweichung();
    delaySwitch = 0;
  }
  delay(500); 
}


void Starten() {    
  AddBpS();
  resetCounter = 10;
  Zeit1=micros();
  shotCounter++;  
 }

void Stoppen() {    
  Zeit2=micros();    
}
Footer
© 2023 GitHub, Inc.
Footer navigation
Terms
Privacy
Security
Status
Docs
Contact GitHub
Pricing
API
Training
Blog
About
chrony/HubChronie.ino at master · pbhub/chrony · GitHub
Probier mal das

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
icp-ms
Rain Man
Rain Man
ForumBadges: BildBildBild
XtraBadges:
zeigen
Beiträge: 10695
Registriert: 14.03.2005 17:56

Re: Hub Chronie

#246

06.01.2023 09:17

alois.hanse hat geschrieben:
06.01.2023 07:17
Frohes neues @TITO0815,
Der Durchmesser ist 60mm, damit auch jeder Magfed Spieler sein Lauf da reinhalten kann. Selbst bei 3 Fotodioden gibt es keine Rückmeldung seitens des Boards.

Viele Grüße
Hast du mal einen Plan wie du das verschaltet hast?

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
alois.hanse
Podbitch
Podbitch
ForumBadges: Bild
Beiträge: 138
Registriert: 02.12.2018 19:48

Re: Hub Chronie

#247

06.01.2023 09:28

Moin @icp-ms,
ich habe sie Stumpf in Reihe verlötet. Weder mit der IR-Diode noch mit dem Laser gibt es eine Auslösung. Selbiges wenn ich sie parallel setze.
Ich hab dir mal privat ne Nachricht geschickt.

Viele Grüße

Link:
BBcode:
HTML:
Hide post links
Show post links
Felix2897
Förderduuuuude
Förderduuuuude
ForumBadges: Bild
Beiträge: 24
Registriert: 13.07.2020 23:01

Re: Hub Chronie

#248

06.01.2023 10:54

icp-ms hat geschrieben:
06.01.2023 08:11
Felix2897 hat geschrieben:
05.01.2023 21:45
servus,
ich wollte mal fragen ob es progammiertechnisch möglich ist sich die niedrigste FPS anzeigen zu lassen, sodass man sieht, wie sehr der Markierer abweichungen hat?
Ich bräuchte zum Beispiel nicht die "Bps" Anzeige, da mir "bpsmax" ausreichend ist.
Moin,

die Abweichung in +/- fps wird doch unter "AVGfps+-" angezeigt

Aber klar kannst du das im Code ändern

Code: Alles auswählen

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <math.h>
#include <string.h>
//#include <pbhub.h>

#include <SPI.h>

#include "U8glib.h"

const float Versionsnummer = 0.62a;

//Displays:
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //Arduino Uno Analog in 4+5
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);  // I2C / TWI 

//Werte:
volatile int fpsPointerNextWertImArray = 0;
volatile int maxAnzahlWerteImArray = -1;
volatile int anzahlWerteImArray = 0;

//Inhaltwerte
volatile float bpsLog[5];
volatile int fpsLog[25]; // <-- 25 ist nur eine Möglichekeit, Du kannst hier so viele / wenig Werte nehmen wie Du willst
volatile int varianz = -1; 
volatile int sigma = -1;
volatile int mittelwert = -1;

const int l = 100; //Abstand der Lichtschranke in mm
volatile int shotCounter = 0;

volatile int sigmaMax = 0;

volatile int delaySwitch = 0;
volatile unsigned long Zeit1 = 0;
volatile unsigned long Zeit2 = 0;
volatile unsigned long Dauer = 0;

volatile long lastBpS = -1;
volatile long last = -1;

volatile float aktBps = -1;
volatile float maxBps = -1;

volatile float fps = 0;
volatile float fpsMin = 0;
volatile float fpsMax = 0;

volatile int shotCount = 0;

void SetupLCD()
{
  lcd.begin (20,4);
  lcd.setBacklightPin(3,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home ();  
}

void InitLCD()
{    
  lcd.setCursor(0,0);
  lcd.print("V");
  lcd.setCursor(1,0); 
  lcd.print(Versionsnummer,2);
  lcd.setCursor(6,0);
  lcd.print("pbhub.de");
  lcd.setCursor(0,1);
  lcd.print("fps:");
  lcd.setCursor(9,1);
  lcd.print("MAXfps:"); 
  lcd.setCursor(0,2);
  lcd.print("MINfps:"); 
  lcd.setCursor(9,2);
  lcd.print("MAXbps:"); 
  lcd.setCursor(0,3);
  lcd.print("#Shots:"); 
  lcd.setCursor(9,3);
  lcd.print("AVGfps+-"); 
}


 
void setup() {
  //Serial.begin(9600);
  //Serial.print("Start Up");   

  SetupLCD();  
  
  SetupU8G();    
  InitLCD();  
  SetupSonderzeichen();    
  
  attachInterrupt(0, Starten, FALLING);//PIN2
  attachInterrupt(1, Stoppen, FALLING);//PIN3
  
  lastBpS = millis();  
}


void SetupU8G()
{
  if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {
    u8g.setColorIndex(255);     // white
  }
  else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) {
    u8g.setColorIndex(3);         // max intensity
  }
  else if ( u8g.getMode() == U8G_MODE_BW ) {
    u8g.setColorIndex(1);         // pixel on
  }
  else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {
    u8g.setHiColorByRGB(255,255,255);
  }
}

void UpdateFps()
{
  
  lcd.setCursor(5,1);  
  lcd.print(fps,0);  

  lcd.setCursor(17,1);
  lcd.print(fpsMax,0);

  lcd.setCursor(7,3);
  lcd.print(shotCounter);

  lcd.setCursor(4,2);
  lcd.print(fpsMin,0);
  
}

void UpdateBps()
{
   // lcd.setCursor(4,2);
    
    float tmp = aktBps;
    if (tmp < 0)
    {
      tmp =0;
    }
    if (tmp < 10)
    {
   //   lcd.print(" ");
    }
//    lcd.print(tmp,1);    
    
    lcd.setCursor(16,2);
    tmp = maxBps;
    if (tmp < 0)
    {
      tmp =0;
    }
    if (tmp < 10)
    {
      lcd.print(" ");
    }
    lcd.print(tmp,1);

}

void AddBpS()
{  
  long now = millis();
   
  float aktBpsDeltaT = now - last;
  if (aktBpsDeltaT == 0)
  {
    return;
  }
   
  last = now;
  
  float sumBpsT = aktBpsDeltaT;
  float maxBpsTAkt = 1 * 1000 / aktBpsDeltaT;
  
  if (maxBpsTAkt > maxBps && maxBpsTAkt < 25)
  {
    maxBps = maxBpsTAkt;
  }
  
  for (int i = 4; i > 0; i--)
  {  
    sumBpsT += bpsLog[i];
    bpsLog[i] = bpsLog[i-1];  
  }
  
  bpsLog[0] = aktBpsDeltaT;
  aktBps = 5 * 1000 / sumBpsT;
 
}

float CalcJoule(float meterProSekunde)
{
  float joule = 0.0032 * pow(meterProSekunde,2) / 1 / 2;
  if (joule>100) 
  {
    joule=0;
  }
  
  return joule;
}



void calcMittelwert()
{   
    for (int i = 0; i < anzahlWerteImArray; i++) 
    {
        mittelwert += fpsLog[i];       
    }    
    mittelwert /= anzahlWerteImArray;    

}

void calcVarianz()
{
    for (int i = 0; i < anzahlWerteImArray; i++) 
    {   
        varianz += (fpsLog[i] - mittelwert) * (fpsLog[i] - mittelwert);  //quadrat
    }
    varianz /= ( anzahlWerteImArray-1 );  

}

void calcStandardabweichung()
{
  sigma = sqrt( varianz );


  // sigmaMax = max(sigma, sigmaMax);

    //lcd.setCursor(17,3);
    //lcd.print(sigma);
}

void resetFPS()
{
  memset(&fpsLog[0], 0, sizeof(fpsLog));
  anzahlWerteImArray = 0;
  fpsPointerNextWertImArray = 0;  
}

void RecalcAbweichung()
{  calcVarianz();
  calcStandardabweichung();
}



void MessungFps()
{    
  Dauer=Zeit2-Zeit1;  

  if (Dauer <= 0)
  {
    fps = 0;
    return;
  }
    
  float vAkt = 3600.0*l/Dauer/1.075;
 
  float meterProSekunde = vAkt * 0.277778;  
    
  fps = vAkt * 0.911344;    
  
  fpsLog[fpsPointerNextWertImArray] = fps;
  fpsPointerNextWertImArray += 1;
  if (fpsPointerNextWertImArray == maxAnzahlWerteImArray)
  {
    fpsPointerNextWertImArray = 0; //Wir fangen vorne an!
  } 
  shotCount += 1;

  if (anzahlWerteImArray < maxAnzahlWerteImArray) //wenn wir einmal den Array gefüllt haben, laufen wir ihn immer komplett durch
  {
    anzahlWerteImArray += 1;
  }
  
  if (fps < fpsMin)
  {
    fpsMin = fps;
  }
  
  if (fps > fpsMax)
  {
    fpsMax = fps;
  }
        
  float joule = CalcJoule(meterProSekunde);    
}

volatile int resetCounter = 10;

const int ICON_LICHTSCHRANK_AN = 1;
const int ICON_LICHTSCHRANK_AUS = 2;
const int ICON_BATTERIE_8 = 3;
const int ICON_BATTERIE_7 = 4;
const int ICON_BATTERIE_6 = 5;
const int ICON_BATTERIE_5 = 6;
const int ICON_BATTERIE_4 = 7;
const int ICON_BATTERIE_3 = 8; 

void SetupSonderzeichen()
 {
  byte an[8] = {
    B00000,
    B00000,
    B01110,
    B01110,
    B01110,
    B01110,
    B00000,
    B00000,
    };
  lcd.createChar(ICON_LICHTSCHRANK_AN , an);
  
  byte aus[8] = {
    B00000,
    B11111,
    B10001,
    B10001,
    B10001,
    B10001,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_LICHTSCHRANK_AUS , aus);
   
  byte batlevel8[8] = {
    B01110,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_8 , batlevel8);
  
  byte batlevel7[8] = {
    B01110,
    B10001,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_7 , batlevel7);
  
  byte batlevel6[8] = {
    B01110,
    B10001,
    B10001,
    B11111,
    B11111,
    B11111,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_6 , batlevel6);
  
  byte batlevel5[8] = {
    B01110,
    B10001,
    B10001,
    B10001,
    B11111,
    B11111,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_5 , batlevel5); 
  
   byte batlevel4[8] = {
    B01110,
    B10001,
    B10001,
    B10001,
    B10001,
    B11111,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_4 , batlevel4);  
  
   byte batlevel3[8] = {
    B01110,
    B10001,
    B10001,
    B10001,
    B10001,
    B10001,
    B11111,
    B00000,
    };
    lcd.createChar(ICON_BATTERIE_3 , batlevel3);       
  
 }

void Batterie() 
{     
  lcd.setCursor(19,0);
 
  int BattValue = analogRead(A0);  
  float voltage = BattValue * (5.0 / 1023.0) * 2 ;  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 10V):
 
  if(voltage > 9.0)
  {        
    lcd.write(byte(ICON_BATTERIE_8));
  }
  else if(voltage > 8)
  {     
    lcd.write(byte(ICON_BATTERIE_7));
  }
  else if(voltage > 7.5)
  {        
    lcd.write(byte(ICON_BATTERIE_6));
  }
  else if(voltage > 7)
  {      
    lcd.write(byte(ICON_BATTERIE_5));
  }
  else if(voltage > 6.5)
  {   
    lcd.write(byte(ICON_BATTERIE_4));
  }
  else if(voltage > 6)
  {
   lcd.write(byte(ICON_BATTERIE_3));
  } 
  else
  {
    lcd.setCursor(17,0);
    //lcd.print(voltage,1);
    lcd.print("low");
  }
} 


void CheckLEDs()
{    
  int state1 = digitalRead(2);     
  int state2 = digitalRead(3);    
  lcd.setCursor(15,0);
  if (state1 == 0)
  {
    lcd.write(byte(ICON_LICHTSCHRANK_AN));  
  }
  else
  {
    lcd.write(byte(ICON_LICHTSCHRANK_AUS));  
  }
  
  lcd.setCursor(16,0);
  if (state2 == 0)
  {
    lcd.write(byte(ICON_LICHTSCHRANK_AN));  
  }
  else
  {
    lcd.write(byte(ICON_LICHTSCHRANK_AUS));  
  }
}

void UpdateOLED () { 
   
  u8g.setFont(u8g_font_gdb12);

  u8g.setPrintPos(10, 15);
  u8g.print("Fps"); 
  u8g.setPrintPos(85, 15);
  if (fps < 0)
  {
    u8g.print(0,0); 
  }
  else
  {
    u8g.print(fps,0); 
  }

  u8g.setPrintPos(10, 38);
  u8g.print("Fps +/-"); 
  u8g.setPrintPos(85, 38);
  u8g.print(sigma); 

  u8g.setPrintPos(10, 61);
  u8g.print("Bps"); 
  u8g.setPrintPos(85, 61);
  u8g.print(maxBps,1); 
}


void loop() {
  
  CheckLEDs();

  UpdateBps();
  MessungFps();
  UpdateFps();  
  Batterie();

  u8g.firstPage();  
  do 
  {
    UpdateOLED();
  } while( u8g.nextPage() );
         
  if (delaySwitch == 0)
  {
    delaySwitch = 1;
    resetCounter-= 1;
    
    if (resetCounter == 0)
    {
      maxBps = 0;
      aktBps = 0;
      resetFPS();
      resetCounter = 10;
    }  
  }
  else
  {   
    RecalcAbweichung();
    delaySwitch = 0;
  }
  delay(500); 
}


void Starten() {    
  AddBpS();
  resetCounter = 10;
  Zeit1=micros();
  shotCounter++;  
 }

void Stoppen() {    
  Zeit2=micros();    
}
Footer
© 2023 GitHub, Inc.
Footer navigation
Terms
Privacy
Security
Status
Docs
Contact GitHub
Pricing
API
Training
Blog
About
chrony/HubChronie.ino at master · pbhub/chrony · GitHub
Probier mal das
oh das mit dem AvgFPS +- hatte ich nicht am Schirm. Ich probier mal den Code den du geschickt hast.
Danke

Edit: der Code zeigt mir Fehler an bei der Versionsnummer. Ich hab das "a" bei 0.62a entfernt und der upload hat funktioniert
Zuletzt geändert von Felix2897 am 06.01.2023 11:19, insgesamt 1-mal geändert.

Link:
BBcode:
HTML:
Hide post links
Show post links
Benutzeravatar
icp-ms
Rain Man
Rain Man
ForumBadges: BildBildBild
XtraBadges:
zeigen
Beiträge: 10695
Registriert: 14.03.2005 17:56

Re: Hub Chronie

#249

06.01.2023 11:18

ups
mach mal den Buckstaben "a" bei der Versionsnummer weg. Das dürfen nur Zahlen sein.

Link:
BBcode:
HTML:
Hide post links
Show post links
Felix2897
Förderduuuuude
Förderduuuuude
ForumBadges: Bild
Beiträge: 24
Registriert: 13.07.2020 23:01

Re: Hub Chronie

#250

06.01.2023 11:20

icp-ms hat geschrieben:
06.01.2023 11:18
ups
mach mal den Buckstaben "a" bei der Versionsnummer weg. Das dürfen nur Zahlen sein.
du warst schnell. Ja ich hab das a entfernt jetzt passt alles

Link:
BBcode:
HTML:
Hide post links
Show post links

Zurück zu „Bastelecke“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 16 Gäste