Jump to content
ELFORUM - Forumul Electronistilor

mely17

Membru activ
  • Content count

    1,037
  • Joined

  • Last visited

Community Reputation

0 Neutral

About mely17

  • Rank
    Membru avansat
  • Birthday 01/04/1991

Profile Information

  • Locatie
    Tg.Mures

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Buna ziua. Am un lcd samsung cu ecranul T400HW02 v.5 care pare sa fie defect. Am masurat pe placa tcon am VGH 29Vdc dar pe folia laterala nu ajunge. Are cineva o solutie de raparatie? Multumesc!
  2. mely17

    Proiect Motor DC si telecomanda IR

    Un scurt video cu sistemul functionand. Singurul lucru care ma supara este zgomotul produs de motor. Motorul este unul cu reductor recuperat dintr-o frana de mana auto.
  3. mely17

    Proiect Motor DC si telecomanda IR

    Am facut cu counter pentru ca mi sa parut mai usor. Am sa incerc sa implementez si cu timer. Atasez codul cu care merge dupa preferintele mele. Multumesc pentru ajutor. int limit_switch_up = 6; //senzor mecanism sus int limit_switch_dwn = 5; //senzor mecanism jos int rot_dir = 4; //iesire pentru activarea releului care schimba directia de rotatie a motorului int enable_ps= 7; // iesire care activeaza pornirea sursei de calculator int pwm_m_speed = 11; // iesire pentru controlul vitezei int Tv_on = 3; //intrare stare tv (daca este pornit primim 5v de la tv) int M_stop = 8; // iesire pentru activarea releului care pune in scurt motorul pentru franare int counter =0 ; enum {STOP, MOVE_DWN, MOVE_UP, TRANZIT }; byte state(){ if (((digitalRead(limit_switch_dwn)== LOW)&&(digitalRead(limit_switch_up)== HIGH)&&(digitalRead(Tv_on)==HIGH)) ||((digitalRead(limit_switch_dwn)== HIGH)&&(digitalRead(limit_switch_up)== LOW)&&(digitalRead(Tv_on)==LOW))) return STOP ; else if ((digitalRead(limit_switch_dwn)== LOW)&&(digitalRead(limit_switch_up)== HIGH)&&(digitalRead(Tv_on)==LOW))return MOVE_DWN ; else if ((digitalRead(limit_switch_dwn)== HIGH)&&(digitalRead(limit_switch_up)== LOW)&&(digitalRead(Tv_on)==HIGH))return MOVE_UP; else return TRANZIT; } void open_tv() { while( STOP != state()){ digitalWrite(enable_ps, HIGH); digitalWrite(M_stop, LOW); digitalWrite(rot_dir, HIGH); delay(100); analogWrite(pwm_m_speed, 70); } } void close_tv() { while( STOP != state()){ digitalWrite(enable_ps, HIGH); digitalWrite(M_stop, LOW); digitalWrite(rot_dir, LOW); delay(100); analogWrite(pwm_m_speed, 90); } } void stop_tv() { if (digitalRead(Tv_on)== HIGH){ counter = counter + 1; if (counter >= 100){ digitalWrite(enable_ps, LOW); if(counter >= 101){ counter = 100; } }else digitalWrite(enable_ps, HIGH); }else { counter = 0; digitalWrite(enable_ps, HIGH); } analogWrite(pwm_m_speed, 0); delay(50); digitalWrite(M_stop, HIGH); delay(50); digitalWrite(rot_dir, LOW); } void setup (){ pinMode(limit_switch_up, INPUT_PULLUP); pinMode(limit_switch_dwn, INPUT_PULLUP); pinMode(rot_dir, OUTPUT); pinMode(enable_ps, OUTPUT); pinMode(pwm_m_speed, OUTPUT); pinMode(Tv_on, INPUT_PULLUP); pinMode(M_stop, OUTPUT); analogWrite(pwm_m_speed, 0); digitalWrite(M_stop, LOW); digitalWrite(rot_dir, LOW); digitalWrite(enable_ps, LOW); } void loop () { if(state()== STOP){ stop_tv(); }else if(state()== MOVE_DWN){ open_tv(); }else if(state()== MOVE_UP){ close_tv(); } delay(10); } Pe viitor, cand mai postezi cod foloseste simbolul <> din editorul de text, nu citat
  4. mely17

    Proiect Motor DC si telecomanda IR

    Exact. Folosesc 5v standby din sursa si pornesc 12 v daca este nevoie. Am incercat sa fac cu millis() dar nu reusesc nici cum. Cu incrementare nu am incercat. In cazul incrementari la sfarsitul lui void loop pun un delay de 10ms si monitorizez de cate ori a trecut prin stop (). Daca a trecut de 500 ori inseamna ca au trecut 5secunde. Este corect?
  5. mely17

    Proiect Motor DC si telecomanda IR

    M-am gandit sa fac in felul urmator: diferenta dintre stop si standby este doar iesirea enable_ps ca urmare programul poate sa stea in STOP si doar sa dezactiveze enable_ps dupa circa 5-10secunde. Cum pot face o temporizarea care sa porneasca doar cand state () == Stop?
  6. mely17

    Proiect Motor DC si telecomanda IR

    Am vrut sa folosesc Arduino pentru a invata un pic de c++ si am nevoie si de pwm pentru ca turatia motorului este mult prea mare. - intrebare: pot folosi doua functii enum? Unu sa il folosec pentru statusul mecanizmului si unul sa-l folosec pentru a vedea daca am cerinta de miscare? In felu asta cred ca pot sa-l scot din standby urmarind semnalul de la Tv_on! - intrebare: in void loop se executa totul ciclic(infinit). Cand fac o chemare catre alt loop de exemplu open_tv programul va iesi din void loop pana se executa loopul chemat mai ales ca am functie while in acel loop? Si in acelas timp programul face update si la state()? Multumesc.
  7. mely17

    Proiect Motor DC si telecomanda IR

    Salutare. Dupa mai multe incercari de a face sistemul am reusit sa il termin 80%! Ce am acut pana acuma: 1.am renuntat sa citesc telecomanda tv-ului si folosec un semnal de 5V din tv printr-un optocuplor, 2.am adaugat un releu de franare pentru a opri mai repede miscarea, 3.activez/dezactivez o sursa de PC. Codul functioneaza bine adica merge jos, merge sus si se opreste doar ca nu pot sa il bag in STBY dupa 5 secunde petrecute in STOP. Atasez codul actual care dupa 5 min de STOP intra in STBY dar nu mai reusesc sa il scot nici cum. Ce gresesc? int limit_switch_up = 6; //senzor mecanism sus int limit_switch_dwn = 5; //senzor mecanism jos int rot_dir = 4; //iesire pentru activarea releului care schimba directia de rotatie a motorului int enable_ps= 7; // iesire care activeaza pornirea sursei de calculator int pwm_m_speed = 11; // iesire pentru controlul vitezei int Tv_on = 3; //intrare stare tv (daca este pornit primim 5v de la tv) int M_stop = 8; // iesire pentru activarea releului care pune in scurt motorul pentru franare unsigned long time_to_stby = false ; //variabila care bune state in stby const long time_before_stby = 5000 ; // timpul care trebe sa treaca unsigned long previostime = 0; //timpul care a trecut unsigned long curenttime = 0 ; // timpul actual enum {STOP, MOVE_DWN, MOVE_UP, TRANZIT, STBY }; byte state(){ if (((digitalRead(limit_switch_dwn)== LOW)&&(digitalRead(limit_switch_up)== HIGH)&&(digitalRead(Tv_on)==HIGH)&&(time_to_stby==false)) ||((digitalRead(limit_switch_dwn)== HIGH)&&(digitalRead(limit_switch_up)== LOW)&&(digitalRead(Tv_on)==LOW)&&(time_to_stby==false))) return STOP ; else if ((digitalRead(limit_switch_dwn)== LOW)&&(digitalRead(limit_switch_up)== HIGH)&&(digitalRead(Tv_on)==LOW))return MOVE_DWN ; else if ((digitalRead(limit_switch_dwn)== HIGH)&&(digitalRead(limit_switch_up)== LOW)&&(digitalRead(Tv_on)==HIGH))return MOVE_UP; else if (time_to_stby == true) return STBY; else return TRANZIT; } void open_tv() { while( STOP != state()){ digitalWrite(enable_ps, HIGH); digitalWrite(M_stop, LOW); digitalWrite(rot_dir, HIGH); delay(100); analogWrite(pwm_m_speed, 70); } } void close_tv() { while( STOP != state()){ digitalWrite(enable_ps, HIGH); digitalWrite(M_stop, LOW); digitalWrite(rot_dir, LOW); delay(100); analogWrite(pwm_m_speed, 90); } } void stop_tv() { digitalWrite(enable_ps, HIGH); delay(10); analogWrite(pwm_m_speed, 0); delay(50); digitalWrite(M_stop, HIGH); delay(50); digitalWrite(rot_dir, LOW); } void stby () { analogWrite(pwm_m_speed, 0); digitalWrite(M_stop, LOW); digitalWrite(rot_dir, LOW); digitalWrite(enable_ps, LOW); } void timer() { curenttime = millis() ; if (curenttime - previostime >= time_before_stby) { time_to_stby = true; previostime = curenttime; }else if (state()!= STBY) { time_to_stby = false; } } void setup (){ pinMode(limit_switch_up, INPUT_PULLUP); pinMode(limit_switch_dwn, INPUT_PULLUP); pinMode(rot_dir, OUTPUT); pinMode(enable_ps, OUTPUT); pinMode(pwm_m_speed, OUTPUT); pinMode(Tv_on, INPUT_PULLUP); pinMode(M_stop, OUTPUT); } void loop () { Serial.begin(9600); if(state()== STOP){ stop_tv(); timer(); }else if(state()== MOVE_DWN){ open_tv(); } else if(state()== MOVE_UP){ close_tv(); } else if(state()== STBY) { stby(); } Serial.print("State="); Serial.println(state()); Serial.print("time_to_stby="); Serial.println(time_to_stby); delay(1000); }
  8. mely17

    Proiect Motor DC si telecomanda IR

    Este o idee buna dupa parerea mea. Voi prelungi firele de la senzorul tv si il voi scoate in afara. Camera este destul de mica si nu vreau ca televizorul sa ocupe in permanenta spatiul de pe birou, in felul asta castig spatiu suficient pe birou si nu sunt obligat sa fac unul mare. Pot sa ma folosec si de tensiunea de PS_On din televizor pentru comanda de urcare si coborare. In felul asta se simplifica mult situatia.
  9. mely17

    Proiect Motor DC si telecomanda IR

    Buna. Problemele la schema le voi rezolva. Problema este la partea de program deoarece nu stiu de unde sa incep. Un pas de inceput mar ajuta enorm. Multumesc
  10. Buna ziua. Inainte de toate vreau sa precizez ca va fi primul proiect facut cu Arduino. Ce vreau defapt: am un corp suspendat in camera fetitei in care vreau sa bag un LedTV care la apasarea butonului de ON/OFF al telecomenzi televizorului sa coboare si sa urce singur. Pana acum am motorul DC de 12Vcc recuperat dintr-o surubelnita electrica cu acumulator, controlul original de PWM(surprins ca avea asa ceva) care cred ca are doua trepete de viteze(verific inca o data sa fie sigur). Vreau sa ma folosesc de acest controlel pentru a usura functionarea sursei de alimentare, care va fi o sursa PC. Va rog sa ma ajutati cu programul arduino, adica partea logica. Nu vreau mura in gura doar ca nu stiu de unde sa incep. La ce m-am gandit eu pana acum: vreau ca apasand butonul de on/off al telecomenzi pentru mai mult de 2 secunde televizorul sa coboare singur, motivul acestei temporizari este de a putea pe urma porni televizorul si a impiedica urcari la loc a televizorului. Miscarea mecanica va fi facuta cu o bara filetata de 8mm si sina de sertare cu bile. La capetele cursei de deplasare voi pune doua intrerupatoare folosite si la cuptoarele de microunde. Fac o mica logica poate se intelege mai bine asa: Daca IRbuton >2sec atunci porneste secventa de pornire in functie de pozitia intreupatoarelor SW1 si SW2. Lasecventa de pornire: porneste sursa PC, actioneaza releul care controleaza directia si stabileste viteza mica de pornire pe urma dupa o temprizare de 0,5sec porneste alimentare controlerului PWM si dupa o temporizare de 1-2 sec comuta pe viteza mare. La primirea semnalului ca TV a ajuns jos sau sus opreste PWM si opreste sursa PC. Am facut o mica schema la cum m-am gandit sa fac partea hardware doar ca am uitat sa includ in desen si partea unde se comanda sursa PC dar voi folosi un releu pentru a porni sursa. Lista cu intrarile si iesirile a placi arduino: Intrare: senzor IR; LimitSwitch_1; LimitSW_2 Iesire: PCpower_On; Direction; Viteza; PWM_On; Va rog sa ma ajutati cu ce functi pot realiza acest program. Nu vreau sa il faca cineva si doar sa-l incarc pe placa. M-am gandit la o placa Arduino Nano! Poza: https://imgur.com/nXgYTjp Multumesc!
×