Vizitator paulinu Postat Aprilie 23, 2015 Partajează Postat Aprilie 23, 2015 Vreau sa folosesc un arduino pentru un sistem climatronic la autoturism. Folosesc: arduino uno sensori 2x DS18B20 display 16x2 servo motor towerpro sg90 Acum am nevoie sa scriu sa seteze o valoare minima sau maxima (fara sa arate min si max, ex: 18 - 28) folosind doua push button. Si in functie de ce temperatura va arata in interiorul masini va controla servo motorul depinzand de temeperatura setata. Un alt buton va activa un mod AUTO care va regla viteza aerotermei pana ajunge la valoarea temp setate. Alte doua push button care va regla turatia aerotermei care va fi indicata si pe display ca niste bare. Pana acum am reusit sa indice cele doua temperaturi. #include <OneWire.h>#include <DallasTemperature.h>#include <LiquidCrystal.h> #define ONE_WIRE_BUS 7LiquidCrystal lcd(13, 12, 11, 10, 9, 8);OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire); void setup() { lcd.begin(16, 2); sensors.begin();} void loop() { sensors.requestTemperatures(); lcd.setCursor(0, 0); lcd.print(""); lcd.print(sensors.getTempCByIndex(0)); lcd.setCursor(2, 0); lcd.print("'C "); lcd.setCursor(0, 1); lcd.print(""); lcd.print(sensors.getTempCByIndex(1)); lcd.setCursor(2, 1); lcd.print("'C ");} Sunt ocupate 4 caractere pe randul 1 si 4 pe randul 2. Pe randul 1 coloana 6 sa arate temperatura de setare apoi min bare max.(turatia aerotermei) Astea ar fi usor de mutat pe display de colo-colo... ce ma omoara pe mine este cod-ul. Link spre comentariu
nico_2010 Postat Aprilie 24, 2015 Partajează Postat Aprilie 24, 2015 Probabil ca daca ai posta programul si conectivitatea senzorilor si a butoanelor la Arduino ai obtine si raspunsuri/sfaturi. Link spre comentariu
Vizitator paulinu Postat Aprilie 24, 2015 Partajează Postat Aprilie 24, 2015 (editat) Programul?? Te referi la codul care este pus in spoiler? Conectivitatea butoanelor... inca nu sunt conectate. Pe arduino au mai ramas pinii liberi pe digital 2, 3, 4, 5, 6 si pe analog 0, 1, 2, 3, 4, 5. Ar mai fi de conectat inca 5 sau daca mai ramane, un loc, 6 butoane. Al sase-lea fiind pentru activare si dezactivare AC. Senzorii sunt pe un singur pin. Editat Aprilie 24, 2015 de paulinu Link spre comentariu
nico_2010 Postat Aprilie 24, 2015 Partajează Postat Aprilie 24, 2015 Mai corect, sketch-ul, da, despre asta e vorba. Link spre comentariu
digix Postat Aprilie 24, 2015 Partajează Postat Aprilie 24, 2015 In masina e greu sa nimeresti prea multe butoane cand conduci. Incearca un encoder poti regla ca la un potentiometru sus, jos in plus ai si butonul ok prin apasare ax. Exista encodere cu iluminare ax, prin led RGB si poti face o reprezentarea vizuala a temperaturii setate prin culoarea afisata (la extreme rosu pentru cald...albastru pentru rece) In ce priveste afisarea arata mult mai bine on OLED 128x64 si are o vizibilitate buna din mai toate unghiurile. In ce masina vrei sa montezi chestia asta ? Link spre comentariu
Vizitator paulinu Postat Aprilie 25, 2015 Partajează Postat Aprilie 25, 2015 (editat) Nu, nu, nu ... nu imi spune de display OLED si, da stiu la ce te referi, buton rotativ, dar la ala mai trebuie inca un chip ... deja o complici prea mult. Eu deja am display, senzori, butoane, arduino, tot. Doar am nevoie de ajutor la sketch. Incerc si de unul singur sa il fac dar nu gasesc exact ce am nevoie sa scriu. In masina e greu sa nimeresti prea multe butoane cand conduci. Pai mod-ul AUTO pentru ce mai este? Ii setez temperatura si el isi regleaza tot, turatie aeroterma, clapeta( creca clapeta este care directioneaza aerul) si compresorul AC. Pe sandero. Spuneti va rog ce trebuie sa scriu in sketch ca sa imi arate pe display: set 18 si cand apas pe un buton sa creasca cate unu pana la 30(30 cred ca este prea mult) si pe alt buton sa scada cate unu. Editat Aprilie 25, 2015 de paulinu Link spre comentariu
nico_2010 Postat Aprilie 27, 2015 Partajează Postat Aprilie 27, 2015 Cred ca tu esti cel mai in masura sa stii ce ar trebui sa scrii in sketch. Noi nu avem un glob de cristal care sa ne arate dorintele tale. Posteaza ce ai facut pana acum si vei primi ajutor. Link spre comentariu
Vizitator paulinu Postat Mai 1, 2015 Partajează Postat Mai 1, 2015 mmm, ok ... cam asta am facut pana acum #include <OneWire.h>#include <DallasTemperature.h>#include <LiquidCrystal.h> #define ONE_WIRE_BUS 7LiquidCrystal lcd(13, 12, 11, 10, 9, 8);OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire); void setup() { lcd.begin(16, 2); sensors.begin();} void loop() { sensors.requestTemperatures(); lcd.setCursor(0, 0); lcd.print(""); lcd.print(sensors.getTempCByIndex(0)); lcd.setCursor(2, 0); lcd.print("'C "); lcd.setCursor(0, 1); lcd.print(""); lcd.print(sensors.getTempCByIndex(1)); lcd.setCursor(2, 1); lcd.print("'C ");} #include <OneWire.h>#include <DallasTemperature.h>#include <LiquidCrystal.h> const int buttonPin1 = A0; const int buttonPin2 = A1; int buttonPushCounter = 18; int buttonPushCounterMin = 18; int buttonPushCounterMax = 30; int buttonState1 = 0; int buttonState2 = 0; int lastButtonState = 0;#define ONE_WIRE_BUS 7LiquidCrystal lcd(13, 12, 11, 10, 9, 8);OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire); void setup() { lcd.begin(16, 2); sensors.begin(); lcd.setCursor(4, 0); lcd.print("Set Temp"); lcd.setCursor(13, 0); lcd.print(buttonPushCounter); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); Serial.begin(9600);} void loop() { buttonState1 = digitalRead(buttonPin1); if (buttonState1 != lastButtonState) { if (buttonState1 == HIGH) { buttonPushCounter++; lcd.setCursor(13, 0); lcd.print(buttonPushCounter); } delay(100); } lastButtonState = buttonState1; buttonState2 = digitalRead(buttonPin2); if (buttonState2 != lastButtonState) { if (buttonState2 == HIGH) { buttonPushCounter-=1; lcd.setCursor(13, 0); lcd.print(buttonPushCounter); } delay(100); } if (buttonPushCounter < buttonPushCounterMin) { lcd.setCursor(13, 0); lcd.print("MIN"); } if (buttonPushCounter > buttonPushCounterMax) { lcd.setCursor(13, 0); lcd.print("MAX"); } lastButtonState = buttonState2;} S-a facut cam tarziu, deci maine urmeaza sa le combin. Sper ca acum va puteti da seama unde vreau sa ajung. Link spre comentariu
Vizitator paulinu Postat Mai 2, 2015 Partajează Postat Mai 2, 2015 As avea nevoie de niste sugesti la asta . Nu imi iese. Vreau sa arate ca niste bare, cand apas butonul1 arata prima bara cand iar apas pe acelas buton arata a doua bara s.a.m.d.. Dar problema este ca dispare bara anterioara. Am incercat si fara comanda else dar cand apas pe butonul2 ca sa scada nu dispare din bare. #include <LiquidCrystal.h>// initialize the libraryLiquidCrystal lcd(13, 12, 11, 10, 9, 8);const int buttonPin1 = A0;const int buttonPin2 = A1; int buttonPushCounter = 0; int buttonPushCounter0 = 0; int buttonPushCounter1 = 1; int buttonPushCounter2 = 2; int buttonPushCounter3 = 3; int buttonPushCounter4 = 4; int buttonState1 = 0; int buttonState2 = 0; int lastButtonState = 0; byte BLANK[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 };byte LVL1[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};byte LVL2[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111};byte LVL3[8] = { 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};byte LVL4[8] = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};void setup(){ lcd.setCursor(10 ,1); lcd.print("-"); lcd.setCursor(15, 1); lcd.print("+"); pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); lcd.createChar(1, LVL1); lcd.createChar(2, LVL2); lcd.createChar(3, LVL3); lcd.createChar(4, LVL4); lcd.createChar(5, BLANK); lcd.begin(16, 2);}void loop() { lcd.setCursor(10 ,1); lcd.print("-"); lcd.setCursor(15, 1); lcd.print("+"); buttonState1 = digitalRead(buttonPin1); if (buttonState1 != lastButtonState) { if (buttonState1 == HIGH) { buttonPushCounter++; } delay(200); lastButtonState = buttonState1; } buttonState2 = digitalRead(buttonPin2); if (buttonState2 != lastButtonState) { if (buttonState2 == HIGH) { buttonPushCounter-=1; } delay(200); lastButtonState = buttonState2; } if (buttonPushCounter == buttonPushCounter1) { lcd.setCursor(11, 1); lcd.write(byte(1)); } else { lcd.setCursor(11, 1); lcd.write(byte(5)); } if (buttonPushCounter == buttonPushCounter2) { lcd.setCursor(12, 1); lcd.write(byte(2)); } else { lcd.setCursor(12, 1); lcd.write(byte(5)); } if (buttonPushCounter == buttonPushCounter3) { lcd.setCursor(13, 1); lcd.write(byte(3)); } else { lcd.setCursor(13, 1); lcd.write(byte(5)); } if (buttonPushCounter == buttonPushCounter4) { lcd.setCursor(14, 1); lcd.write(byte(4)); } else { lcd.setCursor(14, 1); lcd.write(byte(5)); }} Si referitor la celalalt post in legatura cu al doilea cod cand ajunge la 30 si apare MAX si scade sub 30 nu dispare X-ul. La fel se intampla si cu MIN, nu dispare N-ul. Trebuie sa fac un refresh la ecran, sau cum?! Link spre comentariu
core Postat Mai 2, 2015 Partajează Postat Mai 2, 2015 sunt 4 butoane, nu doua. Fiecare buton iti arata un simbol de bare, cand il tii apasat, pe o pozitie diferita fiecarui buton. referitor la stergerea lui X sau N, trebuie sa mai scrii un spatiu suplimentar cand scrii cifra. Nu poti sterge 3 caractere cu 2. Link spre comentariu
core Postat Mai 3, 2015 Partajează Postat Mai 3, 2015 incearca lastButtonState diferit pentru fiecare buton. eventual comaseaza si codul, in partea a doua, sa fie mai citet: for ( i = 1; i < 5; i ++ ) { lcd.setCursor(10 + i, 1); if (buttonPushCounter == i) lcd.write(byte(i)); else lcd.write(byte(5)); } Link spre comentariu
Vizitator paulinu Postat Mai 3, 2015 Partajează Postat Mai 3, 2015 (editat) Multumesc pentru sfat.... nu prea inteleg cum sa il fac mai citet... Sunt incepator cu arduino, deocamdata il las asa, sa pot intelege cat de cat. Am rezolvat problema. Acum apare alta cu cotrol al motor-ului cu PWM. Treptele functioneaza dar cand nu trebuie sa se invarte, se invarte, foarte incet. #include <LiquidCrystal.h>LiquidCrystal lcd(13, 12, 11, 10, 9, 8);const int buttonPin1 = A0;const int buttonPin2 = A1; int buttonPushCounter = 0; int buttonPushCounter0 = 0; int buttonPushCounter1 = 1; int buttonPushCounter2 = 2; int buttonPushCounter3 = 3; int buttonPushCounter4 = 4; int buttonState1 = 0; int buttonState2 = 0; int lastButtonState = 0; int motorPin = 3; byte BLANK[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000 };byte LVL1[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111};byte LVL2[8] = { 0b00000, 0b00000, 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111};byte LVL3[8] = { 0b00000, 0b00000, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};byte LVL4[8] = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111};void setup(){ pinMode(buttonPin1, INPUT); pinMode(buttonPin2, INPUT); lcd.createChar(1, LVL1); lcd.createChar(2, LVL2); lcd.createChar(3, LVL3); lcd.createChar(4, LVL4); lcd.createChar(5, BLANK); lcd.begin(16, 2);}void loop() { lcd.setCursor(10 ,1); lcd.print("-"); lcd.setCursor(15, 1); lcd.print("+"); buttonState1 = digitalRead(buttonPin1); if (buttonState1 != lastButtonState) { if (buttonState1 == HIGH) { buttonPushCounter++; if (buttonPushCounter > 4) { buttonPushCounter-=1; } } delay(200); lastButtonState = buttonState1; } buttonState2 = digitalRead(buttonPin2); if (buttonState2 != lastButtonState) { if (buttonState2 == HIGH) { buttonPushCounter-=1; if (buttonPushCounter < 0) { buttonPushCounter++; } } delay(200); lastButtonState = buttonState2; } if (buttonPushCounter == buttonPushCounter1) { lcd.setCursor(11, 1); lcd.write(byte(1)); } if (buttonPushCounter == buttonPushCounter2) { lcd.setCursor(12, 1); lcd.write(byte(2)); } if (buttonPushCounter == buttonPushCounter3) { lcd.setCursor(13, 1); lcd.write(byte(3)); } if (buttonPushCounter == buttonPushCounter4) { lcd.setCursor(14, 1); lcd.write(byte(4)); } if (buttonPushCounter < buttonPushCounter1) { lcd.setCursor(11, 1); lcd.write(byte(5)); } if (buttonPushCounter < buttonPushCounter2) { lcd.setCursor(12, 1); lcd.write(byte(5)); } if (buttonPushCounter < buttonPushCounter3) { lcd.setCursor(13, 1); lcd.write(byte(5)); } if (buttonPushCounter < buttonPushCounter4) { lcd.setCursor(14, 1); lcd.write(byte(5)); } if (buttonPushCounter == 0) { analogWrite(motorPin, 255); } if (buttonPushCounter == 1) { analogWrite(motorPin, 191); } if (buttonPushCounter == 2) { analogWrite(motorPin, 127); } if (buttonPushCounter == 3) { analogWrite(motorPin, 64); } if (buttonPushCounter == 4) { analogWrite(motorPin, 0); }} Folosesc un TIP 127 (PNP Darlington tranzistor) si o dioda. Probabil trebuie sa pun si schema? Ei bine este destul de simplu. Baza cu 1kOhm la Pin3 pe arduino, colector la minus baterie si emitor la minus motor. Dioda este pusa de la emiter ->|- plus baterie. Editat Mai 3, 2015 de paulinu Link spre comentariu
UDAR Postat Mai 3, 2015 Partajează Postat Mai 3, 2015 Nu cunosc Arduino dar bănuiesc că acel Pin3 furnizează 0V respectiv 5V . În acest caz nu e bine cum ai legat tranzistorul , nu se blochează niciodată așa. Când Pin3 e în zero tranzistorul este polarizat puternic , când este în 5V este polarizat mai puțin dar este totuși . Ar trebui ca Pin3 să fie de tip OC sau OD și să reziste la 12V . Link spre comentariu
Vizitator paulinu Postat Mai 3, 2015 Partajează Postat Mai 3, 2015 (editat) Ma gandeam ca este mai bine sa folosesc un mosfet, dar nu stiam cum sa il leg, nu aveam internet sa verific. Maine o sa incerc cu un IRF530. N-Channel mosfet. Mai este servomotor-ul, (sper sa nu imi dea batai de cap...) apoi .... mai ramane de scris partea AUTO. Editat Mai 3, 2015 de paulinu Link spre comentariu
UDAR Postat Mai 3, 2015 Partajează Postat Mai 3, 2015 Un Arduin-ist să confirme sau infirme supoziția mea . Dacă e adevărată ai mai multe variante - cu MOSFET canal n , cu darlington npn , cu un inversor inainte , etc. Dar până nu știu sigur nu merg mai departe . 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