Teade

Collapse
No announcement yet.

Lintmaki juhtimine mikrokontrolleriga

Collapse
X
 
  • Filter
  • Kellaaeg
  • Show
Clear All
new posts

    Lintmaki juhtimine mikrokontrolleriga

    Tegin selle teema, sest mu pilt Elektroonika 003st ja Arduino Megast ajas mõnel suu vett jooksma.
    Mis ma siis tegin. Korjasin loogikakivid ja nendega seotud ahelad ära (muu jäi alles) ning ühendasin nupud ning loogikaväljunditest minevad signaalid (reeglina transistorite baasid) Arduino Mega jalgadega.

    Kood on hetkel vigane-toores, kuid töötab niipalju, et saan tegeleda muude vigade otsimistega. (salvestuse lülitus ja ei ole tehtud intelligentset stoppi).
    Plaanis on teha autorevers, lindiloendur ja muud põnevat, mis pähe tuleb. Näiteks läbi USB arvutist juhtimine.

    Kood ja idee on kasutatav suvalise maki (ka kassettmaki ) peal, mis on elektrilise mehhaanikajuhtimisega.

    Aga kood siis.
    Kood:
    //Elektroonika 003 juhtimine
    const int LAMP_revers = 30;
    const int LAMP_tagasi = 35;
    const int LAMP_edasi = 34;
    const int LAMP_play = 11;
    const int LAMP_stop = 12;
    const int LAMP_paus = 37;
    const int LAMP_salvestus = 10;
    const int MOOTOR_play = 9;
    //----
    const int EM_rull = 51;
    const int EM_rull1 = 53;
    const int EM_otvod = 49;
    const int EM_pidur = 47;
    const int EM_revers =A3;;
    const int TV_blokk = A0;
    const int TV_revers = A3;
    const int AN_lint = A1;
    const int AN_liikumine = A2;
    //----
    const int NUPP_otkat = 25;
    const int NUPP_revers = 28;
    const int NUPP_tagasi = 26;
    const int NUPP_edasi = 27;
    const int NUPP_play = 29;
    const int NUPP_stop = 23;
    const int NUPP_paus = 24;
    const int NUPP_salvestus = 22;
    //
    int olek = 0; //systeemi olek
    int vanaolek = 0;
    boolean paus=false;
    boolean reverse=false;
    /*
       olekud 0 stop
       1 play
       2 revers
       3 edasi
       4 tagasi
       5 salvestus
    */
    void setup() {
      // put your setup code here, to run once:
      reverse=false;
      pinMode(LAMP_revers, OUTPUT);
      pinMode(LAMP_tagasi, OUTPUT);
      pinMode(LAMP_edasi, OUTPUT);
      pinMode( LAMP_play, OUTPUT);
      pinMode( LAMP_stop, OUTPUT);
      pinMode( LAMP_paus, OUTPUT);
      pinMode( LAMP_salvestus, OUTPUT);
      pinMode(  EM_rull, OUTPUT);
      pinMode(  EM_rull1, OUTPUT);
      pinMode(  EM_otvod, OUTPUT);
      pinMode(  EM_pidur, OUTPUT);
      pinMode(  TV_blokk, OUTPUT);
      pinMode(  TV_revers , OUTPUT);
      pinMode(  AN_lint , OUTPUT);
      pinMode(  AN_liikumine , OUTPUT);
      pinMode(  MOOTOR_play  , OUTPUT);
      //----
      pinMode( AN_lint, INPUT_PULLUP);
    pinMode( AN_liikumine, INPUT_PULLUP);
    //----
    pinMode( NUPP_otkat, INPUT_PULLUP);
    pinMode( NUPP_revers, INPUT_PULLUP);
    pinMode( NUPP_tagasi, INPUT_PULLUP);
    pinMode( NUPP_edasi, INPUT_PULLUP);
    pinMode( NUPP_play, INPUT_PULLUP);
    pinMode( NUPP_stop, INPUT_PULLUP);
    pinMode( NUPP_paus , INPUT_PULLUP);
    pinMode( NUPP_salvestus, INPUT_PULLUP);
    stopp();
    olek=0;
    }
    /*
       olekud 0 stop
       1 play
       2 revers
       3 edasi
       4 tagasi
       5 salvestus
    */
    void stopp()
    //igal juhul teeb stopi.
    {
     digitalWrite ( EM_rull,LOW);
     digitalWrite ( EM_rull1,LOW);
     digitalWrite ( EM_pidur,LOW);
     digitalWrite (TV_blokk,HIGH);
     //----
     digitalWrite( LAMP_edasi,LOW);
     digitalWrite( LAMP_tagasi,LOW);
     digitalWrite( LAMP_revers,LOW);
     digitalWrite( LAMP_play ,LOW);
     digitalWrite(  LAMP_stop ,HIGH);
     digitalWrite( LAMP_paus ,HIGH);
     digitalWrite(  LAMP_salvestus ,LOW);
     //---
     digitalWrite ( MOOTOR_play,HIGH);
     // nüüd võiks oodata kuni lint seiskub
     delay(200);
     if (olek==3) delay(2500);
     if (olek==4) delay(2500);
      digitalWrite( EM_otvod,LOW);
     digitalWrite ( MOOTOR_play,LOW); 
     digitalWrite( LAMP_paus ,LOW);
      }
    void play()
    {
     digitalWrite( LAMP_edasi,LOW);
     digitalWrite( LAMP_tagasi,LOW);
     digitalWrite( LAMP_revers,LOW);
     digitalWrite( LAMP_play ,HIGH);
     digitalWrite(  LAMP_stop ,LOW);
     //digitalWrite(  LAMP_salvestus ,LOW);
    if (reverse==true)
    {
      
      reverse=false;
      digitalWrite(TV_revers,LOW);
      delay(500);
    } 
    digitalWrite (TV_blokk,LOW); 
    
    if (paus==true)
    
    {
     digitalWrite ( EM_rull,LOW);
      digitalWrite ( EM_rull1,LOW);
     digitalWrite ( EM_pidur,LOW);
     digitalWrite( EM_otvod,LOW);
      digitalWrite ( MOOTOR_play,LOW);
    }
    
    else
    {
     digitalWrite ( EM_pidur,HIGH);
     digitalWrite( EM_otvod,LOW);
     digitalWrite ( EM_rull,HIGH);
     digitalWrite ( EM_rull1,HIGH);
      digitalWrite ( MOOTOR_play,HIGH);
     delay(500);
     digitalWrite ( EM_rull1,LOW);
      }
    }
    //------
    void play_reverse()
    {
     digitalWrite( LAMP_edasi,LOW);
     digitalWrite( LAMP_tagasi,LOW);
     digitalWrite( LAMP_revers,HIGH);
     digitalWrite( LAMP_play ,LOW);
     digitalWrite(  LAMP_stop ,LOW);
     digitalWrite(  LAMP_salvestus ,LOW);
    if (reverse==false)
    {
      
      reverse=true;
      digitalWrite(TV_revers,HIGH);
      delay(500);
    } 
    digitalWrite (TV_blokk,LOW); 
    
    if (paus==true)
    
    {
     digitalWrite ( EM_rull,LOW);
      digitalWrite ( EM_rull1,LOW);
     digitalWrite ( EM_pidur,LOW);
     digitalWrite( EM_otvod,LOW);
      digitalWrite ( MOOTOR_play,LOW);
    }
    
    else
    {
     digitalWrite ( EM_pidur,HIGH);
     digitalWrite( EM_otvod,LOW);
      digitalWrite ( MOOTOR_play,HIGH);
     digitalWrite ( EM_rull,HIGH);
     digitalWrite ( EM_rull1,HIGH);
     delay(500);
     digitalWrite ( EM_rull1,LOW);
      }
    }
    
    void edasi()
    {
      digitalWrite( EM_otvod,HIGH);
      digitalWrite ( EM_pidur,HIGH);
       digitalWrite ( EM_rull,LOW);
      digitalWrite ( EM_rull1,LOW);
     digitalWrite ( MOOTOR_play,LOW);
     digitalWrite( LAMP_edasi,HIGH);
     digitalWrite( LAMP_tagasi,LOW);
     digitalWrite( LAMP_revers,LOW);
     digitalWrite( LAMP_play ,LOW);
     digitalWrite(  LAMP_stop ,LOW);
     digitalWrite(  LAMP_salvestus ,LOW);
      }
      void tagasi()
    {
      digitalWrite( EM_otvod,HIGH);
      digitalWrite ( EM_pidur,HIGH);
       digitalWrite ( EM_rull,LOW);
      digitalWrite ( EM_rull1,LOW);
     digitalWrite ( MOOTOR_play,LOW);
     digitalWrite( LAMP_edasi,LOW);
     digitalWrite( LAMP_tagasi,HIGH);
     digitalWrite( LAMP_revers,LOW);
     digitalWrite( LAMP_play ,LOW);
     digitalWrite(  LAMP_stop ,LOW);
     digitalWrite(  LAMP_salvestus ,LOW);
      }
      void salvestus()
      {
      digitalWrite(  LAMP_salvestus ,HIGH);
      play();  
        }
    void paus1()
    {
    if (paus==false)
       {
      paus=true;
    digitalWrite( LAMP_paus ,HIGH);  
      }
    else
    {
      paus=false;
    digitalWrite( LAMP_paus ,LOW);  
    }
    if (olek==1) play();
    if (olek==2) play_reverse();
    if (olek==5) salvestus();
    delay(1000);
      }
    /*
       olekud 0 stop
       1 play
       2 revers
       3 edasi
       4 tagasi
       5 salvestus
    */
        
    void loop() {
      // put your main code here, to run repeatedly:
    //stup
    if (digitalRead(NUPP_stop)==LOW)
     {
     stopp();
    
     olek=0;
     }
     
     if (digitalRead(NUPP_play)==LOW)
     {
     if (olek!=1)
     {
     stopp();
    
     }
     play();
     olek=1;
     }
      if (digitalRead(NUPP_revers)==LOW)
     {
     if (olek!=2)
     {
     stopp();
    
     }
     play_reverse();
     olek=2;
     }
      if (((digitalRead(NUPP_salvestus)==LOW)&&((digitalRead(NUPP_play)==LOW))))
     {
     if (olek!=5)
     {
     stopp();
    
     }
     salvestus();
     olek=5;
     }
      if (digitalRead(NUPP_edasi)==LOW)
     {
     if (olek!=3)
     {
     stopp();
     }
     edasi();
     olek=3;
     }
      if (digitalRead(NUPP_tagasi)==LOW)
     {
     if (olek!=4)
     {
     stopp();
     }
     tagasi();
     olek=4;
     }
     if (digitalRead(NUPP_paus)==LOW)
     {
      paus1();
      }
    // siia ka autostopid
    viimati muutis kasutaja martinj; 27 m 2016, 19:53.
    Elu on nagu lintmakilt muusika kuulamine. Mida lõpupoole, seda kiiremini hakkab linti äraandev ketas pöörlema...

    #2
    Vs: Lintmaki juhtimine mikrokontrolleriga

    Esmalt postitatud martinj poolt Vaata postitust
    Korjasin loogikakivid ja nendega seotud ahelad ära (muu jäi alles) ning ühendasin nupud ning loogikaväljunditest minevad signaalid (reeglina transistorite baasid) Arduino Mega jalgadega.
    Tore et siin keegi ka IT-ga tegeleb.
    Natuke jäi segaseks miks väljund tuleb transistori baasist.

    Programmi tekst pani ka mõtlema miks on loogiline signaal pandud int-i.
    Kui see oleks üks väljundi bitt saaks suurem osa mitmerealisi lülitusi teha
    porti salvestamisena. Või siis XOR käsuga üksikuid bitte muuta.

    Kas Arduino pole natuke kolakas väikese maki jaoks?
    Vast piisaks mõnest väiksemast kivist?

    Lihtsalt mõtisklus IT teemal.

    Comment


      #3
      Vs: Lintmaki juhtimine mikrokontrolleriga

      Esmalt postitatud A.R. poolt Vaata postitust
      Tore et siin keegi ka IT-ga tegeleb.
      Või siis XOR käsuga üksikuid bitte muuta.
      Paluks konkreetset programmi/skeeminäidet.
      Esmalt postitatud A.R. poolt Vaata postitust

      Kas Arduino pole natuke kolakas väikese maki jaoks?
      Vast piisaks mõnest väiksemast kivist?

      Lihtsalt mõtisklus IT teemal.
      Proovisin Minsk-22 kettakontrollerit.Näed, tuled hakkasid vilkuma.
      Aga soovita siis väiksemat kivi, programmi ja skeemi. Saaks teha 8 jalgse pici ja nihkeregistritega kah ja XORida niipalju, et hakkab paha.
      Mul on vähemalt töötav lahendus olemas !
      Millal Sina mõnda reaalselt toimivat lahendust tutvustasid ?
      Elu on nagu lintmakilt muusika kuulamine. Mida lõpupoole, seda kiiremini hakkab linti äraandev ketas pöörlema...

      Comment


        #4
        Vs: Lintmaki juhtimine mikrokontrolleriga

        Esmalt postitatud martinj poolt Vaata postitust
        Paluks konkreetset programmi/skeeminäidet.
        Heli makki sai ehitatud viimati 1958. a.
        aga 1968. alates on saanud mitmesuguseid programme kirjutatud.
        Nairi või EC-1010 programmi vist ei taha näha.

        On üks hiljutine näide, töötav, 12 steperit juhtiv lahendus.
        9 kanalit mõõdab pöördenurka.
        Eagle skeem- plaat, sobib?
        Aga soovita siis väiksemat kivi, programmi ja skeemi.
        Saaks teha 8 jalgse pici ja nihkeregistritega kah ja XORida niipalju, et hakkab paha.
        Olen viimasel ajal kasutanud PIC18F4550.
        Seal saab programmi kirjutada PC peal ja lükata üle USB PICi.
        Mugav.
        Mul on vähemalt töötav lahendus olemas !
        Millal Sina mõnda reaalselt toimivat lahendust tutvustasid ?
        Üks riist, mis ka netis näha, on see:
        Eesti Pangale tehtud malerobot on valmis.

        Seal PC juhendab PIC-i.
        Just kirjutan PC osa Raspberry Pi-le ümber.

        ***

        Kahjuks pole siin foorumis IT alane vestlus eriti levinud ja
        paitab et tunne et midagi võiks liikuma hakata oli natuke enneaegne.

        Minu IT haridus lõppes arvestusega ruutvõrrandi lahenamise eest.
        Lootsin et nüüd õnnestub spetsialisti käest kuulda miks nii kirjutada.
        Aga jah.
        viimati muutis kasutaja A.R.; 28 m 2016, 12:12.

        Comment


          #5
          Vs: Lintmaki juhtimine mikrokontrolleriga

          Oleks vist võimalik ka nii teha, et jätta olemasolev loogika nö tagavaraks, kui see töötab, ja lisada Arduino.
          Sel juhul ei peaks lõhkuma orig. plaati. Ehk siis lihtsalt juhttransside baasidele valikuliselt kas loogikaplokk või Arduino.
          Selleks siis vastavad pistikud-pesad.

          (pole kunagi väga meeldinud originaalplokke jäädavalt ära kaotada, umbes et "korista need liigsed OP võimud plaadilt, neid pole vaja".)

          Comment


            #6
            Vs: Lintmaki juhtimine mikrokontrolleriga

            Kui tahad kontrollerit lisada, tuleb nagunii midagi läbi saagida. Teine võimalus on kaugjuhtimispuldi asemele panna.
            Katkine loogika. Kahju polnud. Oleks see korras old, töötaks see siiamaani. :P
            Muud plaadid (võimendid) tulevad aja jooksul kah uued. Samuti kontrolleriplaat . See ei tähenda, et vanad ära viskan.
            Elu on nagu lintmakilt muusika kuulamine. Mida lõpupoole, seda kiiremini hakkab linti äraandev ketas pöörlema...

            Comment


              #7
              Vs: Lintmaki juhtimine mikrokontrolleriga

              Esmalt postitatud martinj poolt Vaata postitust
              Tegin selle teema, sest mu pilt Elektroonika 003st ja Arduino Megast ajas mõnel suu vett jooksma.
              See ajab jah suu vett jooksma, mida kõike saaks Arduinoga teha, kui vaid oskusi on. Ma ühe sõbraga arutlesin, et pooliketta mootorid võiks välja vahetada sammmootorite vastu, mida siis selle samusega juhtida, ilmselt sobiva koosluse korral see keriks loomakombel kui Majak 233 aga elegantne pidurdamine veel jääks samas paus olekut nii progeda, et käega liigutades ühte pooliketast liigub ka teine järgi ilma, et lindile kuidagigi jõudu avaldaks.
              Aga algajana kopeerisin sinna programmi, kuid tema tuvastab erroreid, kas tahtlikult sisse aetud kala või algaja viga, vähemalt vist näeb emavähem ära kuidas tegelikult koodi kujul asja aetakse
              Vahetada 350W lampvõimendi jääksoojust Kaja Kallase elektrimolekulide vastu.

              Comment


                #8
                Vs: Lintmaki juhtimine mikrokontrolleriga

                Esmalt postitatud RaunoK poolt Vaata postitust
                mida kõike saaks Arduinoga teha, kui vaid oskusi on.
                kopeerisin sinna programmi, kuid tema tuvastab erroreid
                Saab palju teha kui natuke harjutada.
                ***
                Näitan siis kahte versiooni PIC mikroarvutist.

                Parempoolse kõrval on näha tikutopsi äär, suuruse hinnanguks.
                Oli suurem pilt ka, aga ei mahub siia ära, (1200x1200).
                Paar sellist ja ka suuremat plaati jäigi järgmiseks korraks.
                Kui kedagi äkki huvitab.

                Selline mikro on ca 2,5 korda väiksem kui Arduino (just võrdlesin)
                ja programmi saab mõlemal juhul kirjutada suures PC-s.
                Sellin PIC tuleb ühendada Arvuti USB kaabliga ja saata valmis programm PC>>> PIC.
                Parempoolsel pildil on näha 8 optroni pesa et siduda PIC muust elektroonikast lahku.
                PICi juhtimiseks vajalikud detailid (kvarts, konded, takistid) on pandu kivi kõhu alla.

                Makist ka natuke.
                Kas stepper mis ikkagi natuke jõnksutab on makile hea lahendus.
                Samas selline "8 bitti välja" lahendus saab otse hakkama kahe lihtsa sammmootoriga.
                Ja jalgu, väljund-sisend jäi veel hulgi vabaks.

                Comment


                  #9
                  Vs: Lintmaki juhtimine mikrokontrolleriga

                  Esmalt postitatud RaunoK poolt Vaata postitust
                  Aga algajana kopeerisin sinna programmi, kuid tema tuvastab erroreid, kas tahtlikult sisse aetud kala või algaja viga, vähemalt vist näeb emavähem ära kuidas tegelikult koodi kujul asja aetakse
                  See kood on töötav ! . Tõsi mul on juba järgmised muudatused.
                  Aga vaata, et plaadi tüübiks oleks mega ! Teistel pole niipalju jalgu.
                  Elu on nagu lintmakilt muusika kuulamine. Mida lõpupoole, seda kiiremini hakkab linti äraandev ketas pöörlema...

                  Comment


                    #10
                    Vs: Lintmaki juhtimine mikrokontrolleriga

                    Esmalt postitatud A.R. poolt Vaata postitust
                    Kas stepper mis ikkagi natuke jõnksutab on makile hea lahendus.
                    Sobib küll, kui kettad on neljakandilised

                    Comment


                      #11
                      Vs: Lintmaki juhtimine mikrokontrolleriga

                      Esmalt postitatud A.R. poolt Vaata postitust
                      Selline mikro on ca 2,5 korda väiksem kui Arduino (just võrdlesin)
                      Arduino'sid on erinevaid, nano ja mikro on ikka "tavalisest Uno-st" olulisemalt väiksemad.....

                      Comment


                        #12
                        Vs: Lintmaki juhtimine mikrokontrolleriga

                        ESP8266 võib ka huvitav võimalus olla. Väike, odav ja saab lihtsalt üle WIFI juhtida näiteks telefonist. Sobib põhimõtteliselt Arduino kood, aga pin'de arv väiksem, kui Mega'l.

                        Comment


                          #13
                          Vs: Lintmaki juhtimine mikrokontrolleriga

                          Esmalt postitatud Arvi poolt Vaata postitust
                          Arduino'sid on erinevaid, nano ja mikro on ikka "tavalisest Uno-st" olulisemalt väiksemad.....
                          Siin teema algataja tahtis juhtida 25 signaali. Kui lugemisel ei eksinud?
                          Arduino mikro juhib 20 I/O ja 12 ADC
                          Arduino nano juhib 14 I/O ja 8 ADC
                          Vast veab välja?

                          Minu mõte oli et sellele arvutite maailmale võib natuke avaramalt otsa vaadata ja
                          siis paistab neid võimalusi nii et tapab.

                          Kirjutasin kuskil aasta jagu Arduinol, täitsa arvuti moodi.
                          Aga ka teised on täiesti juhitavad.

                          Comment

                          Working...
                          X