VAŽNO! Ovdje pročitajte kako se registrirati na forum. Bez registracije, nećete biti u mogućnosti pisati na forumu.

Tiskarski stroj TAMPON u mojoj izvedbi

Tvoj projekt je upravo dovršen? Podijeli s nama što si napravio u ovom podforumu! Upute drugima kako napraviti isti projekt su uvijek dobrodošle!
Odgovorite
Avatar
haluzanpavao#4625
Ozbiljni hardveraš
Ozbiljni hardveraš
Postovi: 104
Pridružen/a: sri lip 13, 2018 12:19 pm
Lokacija: Zagreb

Tiskarski stroj TAMPON u mojoj izvedbi

Post Postao/la haluzanpavao#4625 » uto stu 10, 2020 5:41 pm

Lijepi pozdrav društvo. Opet me nije bilo duže vrijeme, ja smišljo nove variante kako da si zakompliciram život-olakšam rad :D
Za sada ču Vam pokazati filmić, kako izgleda rad srtoja kada je upravljan sa MC_om Atmega 328p uz pomoč 2X AtTiny85 ikenijalnom komunikacijskom podrškom(skidam kapu onome ko ju smislio :D )
Eto filmič - prezentacija na YouTube

Ovih dana objaviti ću kod i nacrte a do onda uživajte u filmiću.
Ako nekoga zanima nešto konkretno, slobodno pita :)
Pozdrav
Avatar
haluzanpavao#4625
Ozbiljni hardveraš
Ozbiljni hardveraš
Postovi: 104
Pridružen/a: sri lip 13, 2018 12:19 pm
Lokacija: Zagreb

Re: Tiskarski stroj TAMPON u mojoj izvedbi

Post Postao/la haluzanpavao#4625 » sri stu 11, 2020 10:15 pm

Eto malo nastavka :)
Prvo šemica tipkovnice i LCDa
Pa šema matične ploče sa AtMega328p
► Show Spoiler

I ovdje je kod za AtTiny85 u slave modu:
Kod čita pritisnutu tipku (ako je pritisnuta), i šalje masteru pročitanu vrijednost.

Kod: Označite sve

#include <TinyWireS.h>
byte I2C_addr = 16;


void setup() {
  pinMode(1, 1);
  pinMode(A3, INPUT);
  TinyWireS.begin(I2C_addr);
  TinyWireS.onRequest(requestEvent); 
}
void loop() {

}
void requestEvent() {
  digitalWrite(1, 1);
  int analog = analogRead (A3) ;
  byte hy = analog / 256;
  byte low = analog - hy;
  TinyWireS.send(hy);
  TinyWireS.send(low);
  digitalWrite(1, 0);
}

Slijedi nastavak uskoro :)
Avatar
dekip#7812
Ozbiljni hardveraš
Ozbiljni hardveraš
Postovi: 98
Pridružen/a: pon srp 30, 2018 10:04 pm
Lokacija: Beograd
Kontakt:

Re: Tiskarski stroj TAMPON u mojoj izvedbi

Post Postao/la dekip#7812 » čet stu 12, 2020 7:31 pm

Sve u setupu?
Avatar
haluzanpavao#4625
Ozbiljni hardveraš
Ozbiljni hardveraš
Postovi: 104
Pridružen/a: sri lip 13, 2018 12:19 pm
Lokacija: Zagreb

Re: Tiskarski stroj TAMPON u mojoj izvedbi

Post Postao/la haluzanpavao#4625 » pet stu 13, 2020 12:48 am

Tiny ima interupt na pinu 7 ili serial klok koji koristi I2C komunikacija.
TinyWireS.onRequest(requestEvent); // u ovoj naredbi je definiran potprogram za obradu interupta(ili odgovor na reqest)
Tako da kada master zatijeva da slave ordadi neki posao (u mom slučaju treba prročitati stanje na A3 i poslati 2 bajt masteru)
a dok čeka da ga master prozovee vrti se u mrtvoj petlji :)
Zato izgleda da je cijeli program u setupu

Uskoro č staviti ovdije i master program za 328micu da zaokružimo priču:)
samo da uvatim vremena očistiti sors od raznih proba. neiskorištenih variabli ....
onda napraviš probu i vidiš kako radi
Ako te zanima rad sa AtTiny85, a nejde onako kako želiš slobodno pitaj, ili zatraži LIB. jer ih je dosta teško nači koji rade na tiniju
Lijepi pozdrav za sada
Avatar
haluzanpavao#4625
Ozbiljni hardveraš
Ozbiljni hardveraš
Postovi: 104
Pridružen/a: sri lip 13, 2018 12:19 pm
Lokacija: Zagreb

Re: Tiskarski stroj TAMPON u mojoj izvedbi

Post Postao/la haluzanpavao#4625 » sub stu 14, 2020 11:21 pm

Evo da dovršim priču:
Počet ću sa kodom matčne ploče koju pogoni Atmega328P na 16Mhz.
Šeme i pločice sam crtao u Protelu (star aali meni jako dobar :)
Štampane pločice sam napravio pomoču sitotiska i jetkao u feritkloridu.
Cijeli projekt je simuliran doma na maketi (modelu) izrađenom od starih CD drajvova.
I sada je tu kod .
Nije nešto kompliciran ali je moj :)

Kod: Označite sve


//
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//---------- KONSTANTE PINOVA ---------
const byte SenzorTamponGore = 6;        // TAMPON
const byte SenzorTamponSredina = 5;    //
const byte SenzorTamponDolje = 4;       //

const byte SenzorKadaNaprijed = 2;    // KADICA
const byte SenzorKadaNatrag = 3;     //
const byte enter = A2;               // enter (pokreni automatski proces sa n ponavljanja)
//El_Ventili tampon
const byte el_vent_t_d  = 7;
const byte el_vent_t_g  = 8;
//El_Ventili Kada
const byte el_vent_k_nap  = 9;
const byte el_vent_k_naz  = 10;


// variable i konstante
const byte key_broji = 4;
byte t = 0;
byte a = 0;
byte b = 0;
byte Ponovi = 1;
unsigned int zadrziTampon_dolje = 800;
byte Mode = 1; // Ručno
byte izaberi = 0;
unsigned int old_key = 0;
byte in_key = 1;
uint16_t  globaltipka[] = {old_key, in_key, 0, 0, 0, 0, 0, 0, 0, 0};
//---------------------------------------------
void KadaNatrag () {
  if (digitalRead (SenzorTamponGore) != 0) {
    TamponGore();
  }
  digitalWrite(el_vent_k_nap, 0);
  digitalWrite(el_vent_k_naz, 1);
  lcd.setCursor(0, 1);
  lcd.print ("    KadaNatrag   ");
  int t = 1;
  while (t != 0) {
    t = digitalRead(SenzorKadaNatrag);
  }
}
//_____________________________________
void KadaNaprijed () {
  if (digitalRead (SenzorTamponGore) != 0) {
    TamponGore();
  }
  digitalWrite(el_vent_k_naz, 0);
  digitalWrite(el_vent_k_nap, 1);
  lcd.setCursor(0, 1);
  lcd.print ("  KadaNaprijed   ");
  t = 1;
  while (t != 0) {
    t = digitalRead(SenzorKadaNaprijed);
  }
  digitalWrite(el_vent_k_nap, 1);
}
//_____________________________________
void TamponGore ()
{
  digitalWrite(el_vent_t_d, 0);
  digitalWrite(el_vent_t_g, 1);// el_vent gore
  lcd.setCursor(0, 1);
  lcd.print ("    TamponGore    ");
  t = 1;
  while (t != 0) {
    t = digitalRead(SenzorTamponGore);
  }
}
//-----------------------------------------
void  TamponDoljeSredina ()
{
  digitalWrite(el_vent_t_g, 0);
  digitalWrite(el_vent_t_d, 1);
  lcd.setCursor(0, 1);
  lcd.print ("  DoljeSredina   ");
  t = 1;
  while (t != 0) {
    t = digitalRead(SenzorTamponSredina);
  }
  delay(zadrziTampon_dolje);
}
//-----------------------------------------
void TamponDolje ()
{
  digitalWrite(el_vent_t_g, 0);
  digitalWrite(el_vent_t_d, 1);
  lcd.setCursor(0, 1);
  lcd.print ("  Dolje          ");
  t = 1;
  while (t != 0) {
    t = digitalRead(SenzorTamponDolje);
  }
  delay(zadrziTampon_dolje);
}
//------------------------------------
byte Automat(byte d) {
  for (int n = 0; n < d; n++) {
    KadaNatrag();
    TamponGore();
    KadaNaprijed ();
    TamponDoljeSredina ();
    TamponGore ();
    KadaNatrag ();
    TamponDolje ();
    TamponGore ();
  }
}
void setup() {
  pinMode(el_vent_t_g, OUTPUT);
  pinMode(el_vent_t_d, OUTPUT);
  pinMode(el_vent_k_nap, OUTPUT);
  pinMode(el_vent_k_naz, OUTPUT);
  pinMode (SenzorTamponGore, INPUT_PULLUP);
  pinMode (SenzorTamponSredina, INPUT_PULLUP);
  pinMode (SenzorTamponDolje, INPUT_PULLUP);
  pinMode (SenzorKadaNaprijed, INPUT_PULLUP);
  pinMode (SenzorKadaNatrag, INPUT_PULLUP);
  pinMode (enter, INPUT_PULLUP);
  digitalWrite(el_vent_t_g, 1);
  digitalWrite(el_vent_t_d, 0);
  digitalWrite(el_vent_k_naz, 1);
  digitalWrite(el_vent_k_nap, 0);

  lcd.begin(18, 2);              // potrebno da bismo mogli koristiti LCD.
  lcd.clear();                              // 16,2 oznacava dimenziju LCDa
  lcd.setCursor(0, 0);
  lcd.print ("El-Graf tamponV2.0");//El-Graf tamponV2.0
  lcd.setCursor(0, 1);
  lcd.print ("Inicijalizacija");
  delay(500);
  lcd.print ("Init je gotov        ");
  delay (10);
  //lcd.setCursor(0, 1);
  lcd.clear();
}
//---------------------------------------
unsigned int i2cRidKey (byte addr) {
  unsigned int In_Tipkovnica = 0;
  byte hi_low = 0;
  byte hy = 0;
  byte low = 0;
  //---------------------
  if (addr == 8) {
    Wire.requestFrom(addr, 2);
    while (Wire.available()) {
      if (hi_low == 0) {
        hy = Wire.read();
      }
      if (hi_low == 1) {
        low = Wire.read();
      }
      hi_low++;
    }
    //------------------
    In_Tipkovnica = low + (hy * 256);
    globaltipka[old_key] = In_Tipkovnica;
    //------------------------------------
    while (In_Tipkovnica > 205 && In_Tipkovnica < 218 && In_Tipkovnica < 900) {
      hi_low = 0;
      Wire.requestFrom(addr, 2);
      while (Wire.available()) {
        if (hi_low == 0) {
          hy = Wire.read();
        }
        if (hi_low == 1) {
          low = Wire.read();
        }
        hi_low++;
      }
      In_Tipkovnica = low + (hy * 256);
    }
  }
  //---------------------------------
  if (addr == 16) {
    Wire.requestFrom(addr, 2);
    while (Wire.available()) {
      if (hi_low == 0) {
        hy = Wire.read();
      }

      if (hi_low == 1) {
        low = Wire.read();
      }
      hi_low++;
    }
    //------------------
    In_Tipkovnica = low + (hy * 256);
    globaltipka[old_key] = In_Tipkovnica;
    //------------------------------------
    while (In_Tipkovnica < 900) {
      hi_low = 0;
      Wire.requestFrom(addr, 2);
      while (Wire.available()) {
        if (hi_low == 0) {
          hy = Wire.read();
        }
        if (hi_low == 1) {
          low = Wire.read();
        }
        hi_low++;
      }
      In_Tipkovnica = low + (hy * 256);
    }
  }
}
//-----dekodiram internu tipkovnicu-------------------------------
unsigned int  RidKey8 (unsigned int procitanatipka) {
  //-------------------------
  byte k = 0;
  if (procitanatipka < 255)
  {
    Mode = 2;
    k = 0;
    if (procitanatipka <= 215) {
      k = 2;
    }
    if (digitalRead(enter) != 1) {
      k = 3;
    }
    goto key_van8;  // Mode
  }//-------------------------

  if (procitanatipka > 900)
  {
    //    ModeS = 0;
    Mode = 1;
    k = 0;
    goto key_van8;  //niš
  }
  //-------------------------

  if (procitanatipka > 700)
  {
    k = 5;
    goto key_van8;  // dolje
  }
  //---------------------
  if (procitanatipka > 600)
  {
    k = 4;
    goto key_van8;   // Kada nazad
  }

  //---------------------
  if (procitanatipka > 450)
  {
    k = 7;// Kada naprijed
  }

key_van8:
  return k;
}

//----------------------------------------------------------

//-----dekodiram externu tipkovnicu-------------------------------
unsigned int  RidKey16 (unsigned int procitanatipka) {
  //-------------------------
  byte k = 0;
  if (procitanatipka > 1000) {
    k = 0;
    goto key_van16;   //niš
  }
  if (procitanatipka > 850) {
    k = 8;
    goto key_van16;   //enter
  }
  if (procitanatipka > 770 && procitanatipka < 840) {
    k = 9 ;
    goto key_van16;   //Setup
  }
  if (procitanatipka > 700) {
    k = 6;
    goto key_van16;   //tampon gore
  }
  if (procitanatipka > 510) {
    k = 4;
    goto key_van16;   //kada nazad
  }
  if (procitanatipka > 200 && procitanatipka < 500) {
    k = 5;
    goto key_van16; // tampon dolje
  }
  if (procitanatipka < 100); {
    k = 7; //kada naprijed
  }
key_van16:
  return k;
}

//---------------------------key-------------------------------------
void loop() {
  delay (100);
  a = i2cRidKey(8);
  a = RidKey8(globaltipka[a]);
  if (Mode == 1) {
    lcd.setCursor(0, 0);
    lcd.print ("Mod rada= RUCNO ");
    lcd.setCursor(0, 1);
    lcd.print ("                ");
  }
  if (Mode == 2) {
    lcd.setCursor(0, 0);
    lcd.print  ("Mod rada= AUTO     ");
    lcd.setCursor(0, 1);
    lcd.print ("sa ");
    lcd.print (Ponovi);
    lcd.print     (" ponavljanja   ");
  }
  switch (a) {

    case 0:  //pogledaj tipke na ex ipkovnici
      delay(1);
      goto kraj8;
      break;
    case 2:  //povečaj brojač
      if (Mode == 2)Ponovi++; if (Ponovi == 5) Ponovi = 1;
      break;

    //-----------------------------------
    case 3:  // enter
      if (Mode == 2) byte c = Automat(Ponovi);
      break;
    //-----------------------------------
    case 4: //kada nazad
      if (Mode == 1)  KadaNatrag();
      break;
    //--------------------------------------------------
    case 5: // tampon dolje
      if (Mode == 1) {
        t = digitalRead (SenzorKadaNatrag);
        if (t == 0) {
          TamponDolje();
          TamponGore();
          goto van5;
        }
        if (t == 1) {
          TamponDoljeSredina ();
          TamponGore();
        }
van5:
        break;
      case 7: //kada naprijed
        if (Mode == 1)  KadaNaprijed();

        break;
      }
  }
kraj8:

  //--------------------------------------

  unsigned int in_key16 = i2cRidKey(16);
  a = RidKey16(globaltipka[old_key]);
  switch (a) {
    case 0:  //niš
      delay(1);
      break;
    //----------------------------------------
    case 9: //SETUP
      //if (Mode == 1 && ModeS == 1)
      goto Setup;
      break;
    //--------------------------------------------------
    case 4: //kada nazad
      if (Mode == 1)  KadaNatrag();
      break;
    //--------------------------------------------------
    case 5: // tampon dolje
      if (Mode == 1) {
        t = digitalRead (SenzorKadaNatrag);
        if (t == 0) {
          TamponDolje();
          TamponGore();
          goto van55;
        }
        if (t == 1) {
          TamponDoljeSredina ();
          TamponGore();
        }
van55:
        break;
      case 6: //gore
        if (Mode == 1) TamponGore();
        break;
      case 7: //desno
        if (Mode == 1) KadaNaprijed();
        break;
      }
  }
  goto kraj;

  //-------------------------------------------------------
Setup:
  izaberi = 0;
  lcd.setCursor(0, 0);
  lcd.print ("SETUP-Van=enter   ");
  lcd.setCursor(0, 1);
  //         "                  "
  lcd.print ("dol=list des=num +");
setup_ponovo:
  delay (300);
  a = i2cRidKey(16);
  a = globaltipka[old_key];
  if (a > 1000) {
    goto setup_ponovo;
  }
  if (a > 600 && a < 990) {
    goto  kraj;
  }
  if (a > 150 && a < 449) {
    goto  izbor_menija;
  }
  goto setup_ponovo;
//--------------------------
izbor_menija:
  delay (300);
  izaberi++;
  if (izaberi == 3) {
    izaberi = 0;
  }
  if (izaberi == 1) {
    lcd.setCursor(0, 0);
    lcd.print ("SETUP-Van=enter      ");
    lcd.setCursor(0, 1);
    //           "                  "
    lcd.print (  "AUTOPonovi+         ");
    lcd.print (  Ponovi);
ponovo_povecaj:
    lcd.setCursor(11, 1);
    lcd.print (Ponovi);
    a = i2cRidKey(16);
    a = globaltipka[old_key];
    delay (100);
    if (a > 991) {
      goto ponovo_povecaj;
    }
    if (a > 600  &&  a < 990) {
      goto kraj;
    }
    if (a > 150 && a < 499) {
      izaberi++;
      goto izbor_menija;
    }
    if (a < 100) {
      Ponovi++;
      if (Ponovi == 5) {
        Ponovi = 1;
      }
      goto ponovo_povecaj;
    }
  }
  //--------

  if (izaberi == 2) {
    lcd.setCursor(0, 0);
    lcd.print (  "SETUP-Van=enter   ");
    lcd.setCursor(0, 1);
    //           "                  "
ponovo_povecaj1:
    lcd.print (  "ZadrzT.dol+     ");
    lcd.setCursor(12, 1);
    lcd.print (  zadrziTampon_dolje);

    a = i2cRidKey(16);
    a = globaltipka[old_key];
    if (a > 1000) {
      goto ponovo_povecaj1;
    }
    if (a > 600 && a < 999) {
      goto kraj;
    }

    if (a < 100) {
      zadrziTampon_dolje = zadrziTampon_dolje + 100;
      if (zadrziTampon_dolje >= 900) {
        zadrziTampon_dolje = 200;
        goto ponovo_povecaj1;
      }
    }

    goto ponovo_povecaj1;
  }
  goto setup_ponovo;
  //-------------------------------------------------------

kraj:
  delay (3);

}
Tu je još par fotki makete na kojoj sam isprobavao kod
► Show Spoiler
Ja sam zadovoljan kako je projekt napredovao a pogotovo sada kada radi kako treba :)
Lijepi pozdrav za večeras
Avatar
ivan_margit#5755
Hobist
Hobist
Postovi: 50
Pridružen/a: uto pro 29, 2020 8:08 am
Lokacija: Velika Gorica

Re: Tiskarski stroj TAMPON u mojoj izvedbi

Post Postao/la ivan_margit#5755 » pet sij 22, 2021 8:19 am

Ovo nije igrarija već pravo koristan projekt.
Ostatak stroja je tvornički ili ste i ostatak vi radili?
Avatar
haluzanpavao#4625
Ozbiljni hardveraš
Ozbiljni hardveraš
Postovi: 104
Pridružen/a: sri lip 13, 2018 12:19 pm
Lokacija: Zagreb

Re: Tiskarski stroj TAMPON u mojoj izvedbi

Post Postao/la haluzanpavao#4625 » pet sij 22, 2021 2:18 pm

KUČIŠTE I PNEUMATIKA JE TVORNIČKO IZ 68. GODINE :d
Odgovorite