User Tools

Site Tools


projektas_nr.10

Čia yra sena dokumento versija!


Projektas Nr. 10. Sintezatorius - Jungiame potenciometrą

Ką darome? Arduino yra puikus prietaisas, norint tiesiogiai kontroliuoti mažus elektrinius prietaisus pavyzdžiui, LED. Tačiau, kai susiduriama su didesniais daiktais (pavyzdžiui, žaisliniu varikliu arba skalbimo mašina), išorinis tranzistorius yra privalomas. Tranzistorius yra neįtikėtinai naudingas. Jis keičia srovės stiprumą, naudodamas mažus jos kiekius. Tranzistorius turi 3 smeigtukus. Dėl neigiamo tranzistoriaus tipo (PNP) prijungiate kolektoriaus smeigtuką su apkrova, o emiterį į žemę. Tada, kai maža srovė teka iš bazės į emiterį, srovė tekės per tranzistorius ir jūsų variklis suksis (tai atsitinka, kai mes nustatome mūsų Arduino į HIGH). Yra tūkstančiai skirtingų tipų tranzistorių, leidžiančių kiekvieną situacija puikiai suderinti. Mes pasirinkome P2N2222AG gana įprasta bendrosios paskirties tranzistorių. Svarbūs veiksniai, mūsų atveju yra tai, kad jo maksimali įtampa (40V) ir jo maksimali srovė(200 miliamperų) yra pakankamai aukšta mūsų žaisliniam varikliui. (visą informacija galima rasti duomenų lape http://ardx.org/2222).

Grandinės dalys

  • 2k2 omų rezistorius Raudona- Raudona- Raudona x1
  • Diodas (1N4001) x1
  • Žaislinis motoras x1
  • Tranzistorius TIP120 x1
  • Laidas x2

Grandininė schema

Grandinės šablonas

Surinkta grandinė

Šaltiniai Maketo plokštės šablonas Surinkimo video

Programos kodas (nukopijuokite kodą į IDE atvertą langą). Atsisiųsti programos kodą: http://ardx.org/CODE03 (nukopijuokite tekstą ir įklijuokite jį į tuščią Arduino lapą).

/*     -----------------------------------------------------------
 *     |  Arduino bandymų pavyzdinis kodas                        |
 *     |  CIRC-03.: Sukis, motore, sukis :. (Tranzisotrius ir motoras)   |
 *     -----------------------------------------------------------
 *
 * Arduino yra puikus, norint valdyti LED’us, tačiau jeigu mes prijungiame kažką, kas
*  reikalauja daugiau galios, mes galime nesunkiai juos  sudeginti. Didesnių detalių
*valdymui mums reikės tranzistoriaus pagalbos. Šiame projekte naudosime tranzistorių mažo*
žaislinio motoro valdymui.
 *
 *
 * http://tinyurl.com/d4wht7
 *
/*

int motorPin = 9;  //Ƴvardinkite kištuką, ƳkurƳƳjungtas motoras
                   // (jeigu naudosite 9,10,11 arba 3 kištukus, jūs taip pat galėsite kontroliuoti greitƳ)
                   
/*
 * setup() –ši funkcija veikia vieną kartą, kai Ƴjungiate Arduino.
 * Mes nustatėmė motoro kištuko išvestƳƳ aukštą (kištukas +5V)arba žemą (kištukas -GROUND)
 * O ne ƳvestƳ (tikrinimą ar kištukas yra aukštos ,ar žemos Ƴtampos)
 */
void setup()
{
 pinMode(motorPin, OUTPUT);
}

/*
 * loop() –ši funkcija presides, kai pasibaigs funkcija setup , po to ji kartosis.
 * mes suteikiamia vardą funkcijai pavadinimu motorOnThenOff()
 */

void loop()                     // vykdyti vėl ir vėl iš naujo
 motorOnThenOff();
 //motorOnThenOffWithSpeed();
 //motorAcceleration();
}

/*
 * motorOnThenOff() –Ƴjungia motorą, tada išjungia
 * (pastaba! Šis kodas yra identiškas,kurƳ naudojom mirksinčiam LED)
 *
 */
void motorOnThenOff(){
  int onTime = 2500;  //laikas milisekundėmis, kurƳ motoras Ƴsijungs.    int offTime = 1000;
//laikas milisekundėmis, kurƳ motoras išsijungs.

digitalWrite(motorPin, HIGH); // Ƴjungia motorą
delay(onTime);                // palaukia onTime millisekundžių  
digitalWrite(motorPin, LOW);  // išjungia motorą
delay(offTime);               // palaukia offTime millisekundžių
}

/*
 * motorOnThenOffWithSpeed() - Ƴjungia ir išjungia motorą, naudojamos ir greičio vertės
 * (pastaba! Šis kodas identiškas, kurƳ naudojome mirksinčiam LED)
 *
 */
void motorOnThenOffWithSpeed(){
 
  int onSpeed = 200;  // skaičius tarp 0 (sustabdytas) ir 255 (visas greitis)
  int onTime = 2500;  //the number of milliseconds forthe motor to turn on for
  
  int offSpeed = 50;  // skaičius tarp 0 (sustabdytas) ir 255 (visas greitis)
  int offTime = 1000; //milisekundžių skaičius varikliui išjungti
  analogWrite(motorPin, onSpeed);   //Ƴjungia motorą
  delay(onTime);                    // palaukia onTime millisekundžių
  analogWrite(motorPin, offSpeed);  // išjungia motorą
  delay(offTime);                   // palaukia offTime millisekundžių
}

/*
 * motorAcceleration() – motoro greitis didėja iki didžiausio, tada atgal iki 0
void motorAcceleration(){
  int delayTime = 50; //millisekundės tarp kiekvieno greičio didėjimo žingsnio
  
  //Greitina motorą
  for(int i = 0; i < 256; i++){ //pereina per visus greičius nuo 0 iki 255
    analogWrite(motorPin, i);   //priskiria naują greitƳ
    delay(delayTime);           // palaukia delayTime millisekundžių
  }
 
  //Lėtina motorą
  for(int i = 255; i >=0; i--){  //pereina per visus greičius nuo 255 iki 0
    analogWrite(motorPin, i);   //priskiria naują greitƳ
    delay(delayTime);           // palaukia delayTime millisekundžių
  }
} 

Neveikia? (trys dalykai kuriuos galime padaryti)

Nesisuka motoras? Nesisuka motoras? Jeigu naudojate savo šaltinio tranzistorių, patikrinkite ar jis suderinamas su P2N2222AG (dauguma yra atvirkščiai apsukti).

Vis dar neveikia? Jeigu tai jūsų motoras patikrinkite ar jis veikia su 5 voltais, įsitikinkite, kad jam nereikia daugiau galios.

Ir toliau nesiseka? Kartais Arduino atsijungia nuo kompiuterio. Pamėginkite iš naujo prijungti USB kištuką.

PADARYTI GERIAU

Kontroliuojame greitį:

Anksčiau mes žaidėme su Arduino galimybe kontroliuoti LED ryškumą, dabar mes naudosime tą pačią funkciją kontroliuoti mūsų variklio greitį. Arduino, tai daro naudojant vadinamąją pulso pločio moduliaciją (PWM). Tai priklauso nuo Arduino galimybės veikti greitai. Užuot tiesiogiai kontroliuodamas įtampą ateinančią iš kištuko, Arduino perjunginės kištuką iš '(on į off)' labai greitai. Kompiuterių pasaulyje tai vyksta nuo 0 iki 5 voltų, daug kartų per sekundę, bet ir mūsų pasaulyje mes matome tai, kaip įtampa. Pavyzdžiui, jei Arduino PWM'ing 50% matome šviesos blyškius 50%, nes mūsų akys yra nepakankamai greitos, pamatyti jį mirksintį. Ta pati funkcija veikia su tranzistoriais. Netikite manimi? Išbandykite patys.

// motorOnThenOff();
motorOnThenOffWithSpeed();
//motorAcceleration();

Įkelkite į programą. Jūs galite pakeisti greičius keičiant funkcijų '(onSpeed ir off Speed)' duomenis.

Greitėjimas ir lėtėjimas: Kodėl sustabdyti,kodėl nepagreitinti ir vėl sulėtinti motoro? Norint tai atlikti pakeiskite loop() kodą.

// motorOnThenOff();
// motorOnThenOffWithSpeed();
motorAcceleration();

Tada įkelkite programą ir stebėkite kaip Jūsų motoras lėtai greitės iki viso greičio, tada pradės lėtėti. Jeigu norite pakeisti greitėjimo greitį, pakeiskite duomenis delayTime (kuo didesnis, tuo ilgesnis greitėjimo laikas).

Kitas projektas. Variklio valdymas tranzistoriumi.

Atgal į projektus

projektas_nr.10.1447374164.txt.gz · Keista: 2015/11/13 02:22 vartotojo simonas