mely17 Postat Martie 4, 2018 Partajează Postat Martie 4, 2018 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! Link spre comentariu
Ticu Postat Martie 4, 2018 Partajează Postat Martie 4, 2018 (editat) In ce priveste schema, ma tem ca mos-fetul va scurtcircuita sursa +12V la masa, iar PWM-ul va primi doar vreo 4V cand tranzistorul prin care se alimenteaza este deschis cu 5V de la Arduino. Editat Martie 4, 2018 de Ticu Link spre comentariu
Barbu Andrei Postat Martie 4, 2018 Partajează Postat Martie 4, 2018 Schema este gresita. Se va folosi PWM pentru mosfet-ul inseriat cu contactele releului de schimbare sens. Nu ai nevoie decat de limitatori, un mosfet, o rezistenta in grila de 220 ohmi, o rezistenta de 10K intre grila si masa. Si inca un receptor IR care sa "citeasca" telecomanda tv-ului. Era sa uit de releul de pornire al sursei. PS- ai grija la turatia motorului sa nu fie prea mare. Am incercat si eu ceva cu un motor de bormasina si aproape de capatul cursei oscila destul de violent la viteza maxima. In timpul testelor, fara limitatori, am reusit sa indoi o bara de 12mm cu motorul. Personal as renunta la limitatori si as numara rotatiile tijei filetate ,iar in functie de astea as face diferite trepte de viteza pentru motor. Link spre comentariu
Vizitator Postat Martie 4, 2018 Partajează Postat Martie 4, 2018 (editat) eu nu prea am inteles cu ce vrei sa fi ajutat... in orice caz, pe partea mecanica, eu as pune un motor de stergator de parbriz, un pic modificat, in sensul ca: trebuie sa poata faca rotatii continue, cele noi sunt limitate la cateva grade mecanic. in afara de asta, mai trebuie sa-l echipezi cu un encoder, si doi limitatori de cursa. pe partea electronica de putere nu iti trebuie decat un FET, il comanzi pwm, iar ca intrari ... pentru encoder, si pentru receiverul IR. inca o iesire ptr pwm. nici un releu pe sursa, pentru ca ramane alimentat 24h. in fond e ceva cu telecomanda. cred ca te-ar ajuta si o macara de geam auto, poate chiar mai mult decat... obs: ma tem ca topicul nu prea are legatura cu Arduino, pana acum. Editat Martie 4, 2018 de Vizitator Link spre comentariu
nico_2010 Postat Martie 5, 2018 Partajează Postat Martie 5, 2018 Locul topicului este la sectiunea "Idei si sfaturi". Link spre comentariu
mely17 Postat Martie 5, 2018 Autor Partajează Postat Martie 5, 2018 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 Link spre comentariu
nico_2010 Postat Martie 5, 2018 Partajează Postat Martie 5, 2018 Un bun inceput ar fi cu asta: /* * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv * An IR detector/demodulator must be connected to the input RECV_PIN. * Version 0.1 July, 2009 * Copyright 2009 Ken Shirriff * http://arcfn.com */ #include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); // In case the interrupt driver crashes on setup, give a clue // to the user what's going on. Serial.println("Enabling IRin"); irrecv.enableIRIn(); // Start the receiver Serial.println("Enabled IRin"); } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } delay(100); } Folosesti sketch-ul pentru a citi semnalele transmise de telecomanda TV. Odata ce ti-ai stabilit ce butoane vei folosi pentru comanda motorului te folosesti de codurile transmise de acestea pentru a da comenzile de coborare/ridicare a televizorului. Libraria "IR remote" se descarca si instaleaza din Arduino IDE-->Sketch--> Include Library-->Manage Libraries cu motor de cautare IR remote. Link spre comentariu
mihaicozac Postat Martie 5, 2018 Partajează Postat Martie 5, 2018 (editat) Poţi lua semnal şi din TV pt. acţionarea motorului, de ex. la mufa HDMI există la pinul 18 5V când TV-ul este pornit, sau ieşirea optică audio luminează după pornire şi se poate folosi un fototranzistor, etc. Editat Martie 5, 2018 de mihaicozac Link spre comentariu
one Postat Martie 5, 2018 Partajează Postat Martie 5, 2018 (editat) Buna idee.... s-ar putea folosi si mufa Euroscart caci este mai comoda, neffind atat de miniaturizata... pinul 8. Sau daca nu, o mufa USB. Dar pentru aceasta solutie ar trebui ca infrarosul telecomenzii sa ajunga la TV si cand acesta este "ascuns". Altfel, nu trebuie decodat semnalul IR. Pentru a lasa TV.ul jos, cu un receptor TSOP382-384 se sesizeaza apasarea unei taste, iar pentru a-l urca la loc se sesizeaza disparitia tensiunii de 5V de la USB, astfel nu se mai complica cu decodarea RC5 - DACA ESTE RC5 !!!! Acest proiect are si vreo utilitate practica sau este doar pentru pasiune ? De ce trebuie retras televizorul cand nu este folosit ? Editat Martie 5, 2018 de one Link spre comentariu
mely17 Postat Martie 5, 2018 Autor Partajează Postat Martie 5, 2018 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. Link spre comentariu
Vizitator Postat Martie 5, 2018 Partajează Postat Martie 5, 2018 (editat) privesti gresit problema dupa parerea mea. complicatura inutila si interventie asupra TV. de ce , cand poti decoda atat de banal telecomanda tv ? am o gramada de aplicatii care folosesc butoanele de teletext alte tv, in general inutile. ai acolo rosu, verde, galben, albastru. la alegere pentru comanda suportului. ai putea sa citesti exact comanda de oprire tv, cu conditia sa nu aiba un toogle switch. si asta s-ar putea rezolva cu un ldr plasat in cutia de retractie. eu zic ca la proiectul asta mai dificila e partea mecanica, electronica si programul in sine e vax music. si ce daca nu este RC5, SONY sau NEC ? ai primit un cod deja de la nico motamo... Editat Martie 5, 2018 de Vizitator Link spre comentariu
nico_2010 Postat Martie 6, 2018 Partajează Postat Martie 6, 2018 Voi inchide topicul. Au fost date suficiente solutii. Link spre comentariu
mely17 Postat Mai 6, 2018 Autor Partajează Postat Mai 6, 2018 (editat) 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); } Editat Mai 7, 2018 de nico_2010 Link spre comentariu
mihaicozac Postat Mai 6, 2018 Partajează Postat Mai 6, 2018 Dacă ai releele şi senzori de cap de cursă în principiu nu mai ai nevoie de microcontroller... stările intermediare nu sunt importante devreme ce mecanismul se plimbă automat între cele 2 capete, direcţia fiind comandată de absenţa sau prezenţa semnalului pe optpcuplor. Cât priveşte partea cu stand-by, e clar că din starea aia nu mai poţi să-l scoţi software , doar un impuls exterior sau un reset îl poate readuce în funcţionare. La un sistem realizat de mine era necesară intrarea în standby după 10 minute, caz în care Arduino îşi tăia singur alimentarea, bineînţeles că din această stare nu se mai putea ieşi decât din deconectarea şi apoi reconectarea sursei de alimentare sau apăsarea mai lungă a unui buton, ambele fiind secvenţe hardware exterioare microcontrollerului care implicau de fapt resetarea lui. Link spre comentariu
mely17 Postat Mai 7, 2018 Autor Partajează Postat Mai 7, 2018 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. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum