====== Kauglabor - Kasvuhoone ====== ====== Samm-mootori ühendamine ====== Draiver: Ühendustabel ^A4983 viik^Mootorite plaat / Sammmootor^Kirjeldus^ |VMOT|Unipolar pistiku Vcc| Mootori toide 8-36 V | |GND|Enkoodri pistiku maa | Mootori toite maa | |2B|M1 Sinine mootori juhe| Mootori mähis 2| |2A|M2 Punane mootori juhe| Mootori mähis 2| |1A|M3 Roheline mootori juhe| Mootori mähis 1| |1B|M4 Must mootori juhe| Mootori mähis 1| |VDD|Enkoodri pistiku +5V |Loogika toide 3,3 - 5,5 V| |GND|Enkoodri pistiku maa| Loogika toite maa| |STEP|Enkoodri alumise pistiku signaal|Sammusignaal| |DIR|Enkoodri ülemise pistiku signaal|Suunasignaal| |RST|Kokku mootorikontrolleri SLP viiguga|Reset viik| |SLP|Kokku mootorikontrolleri RST viiguga|Sleep viik| ====== Näitekood ====== #include #include #include #include #include #include #include #define ADC_CHANNEL 3 // Multipleskeri viik pin mux = PIN(G, 0); // Kombineeritud niiskuse ja temperatuurianduri signaali ühendusviik pin DHTpin = PIN(B,5); // A4983 step viik pin stp_pin = PIN(E, 6); // A4983 suuna viik pin dir_pin = PIN(E, 7); // Arvude skaleerimiseks sobivasse vahemikku int map(long x, long in_min, long in_max, long out_min, long out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } // A4983 mootorikontroller viikude seadistamine väljundiks void A4983_init(void) { pin_setup_output(stp_pin); pin_setup_output(dir_pin); } // A4983 mootorikontrolleri samm-mootori liigutamine void A4983_step(signed char dir, unsigned short num_steps, unsigned char speed) { unsigned short i; // Suuna valimine +- 1 if(dir < 0) { pin_set(dir_pin); } else { pin_clear(dir_pin); } // Sammude teostamine for (i = 0; i < num_steps; i++) { pin_toggle(stp_pin); // Pausi tegemine sammu teostamise ootamiseks sw_delay_ms(speed); } // Mootori peatamine pin_set(stp_pin); } // Põhiprogramm int main(void) { int speed; int humidity; char text[60]; // ADC muunduri seadistamine adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); // LCD ekraani algseadistamine lcd_gfx_init(); // Ekraani puhastamine lcd_gfx_clear(); // Taustavalgustuse tööle lülitamine lcd_gfx_backlight(true); // Multiplekseri viigu seadistamine pin_setup_output(mux); // Mootori initsialiseerimine dcmotor_drive_pwm_init(1, TIMER2_PRESCALE_8); // Servo initsialiseerimine servomotor_init(1); // Stepperi initsialiseerimine A4983_init(); // Nuppude viikude sisendiks seadmine pin_setup_input(S1); pin_setup_input(S2); pin_setup_input(S3); // Lõputu tsükkel while (1) { // // Pumba mootori juhtimine // // Kanali 4-kordselt ümardatud väärtuse lugemine speed = map(adc_get_average_value(ADC_CHANNEL, 3), 0, 1024, 0, 255); lcd_gfx_goto_char_xy(0,0); sprintf(text," Kiirus: %2d",speed); lcd_gfx_write_string(text); // Mootorile valitud kiiruse etteandmine. dcmotor_drive_pwm(1, 1, speed); // // Mulla niiskuse kuvamine // // Multiplekseri oleku muutmine, kuna on kasutatud välist ADC viiku pin_set(mux); // Paus 10 millisekundit sw_delay_ms(10); // Kanali 4-kordselt ümardatud väärtuse lugemine humidity = adc_get_average_value(ADC_CHANNEL, 3); lcd_gfx_goto_char_xy(0,1); sprintf(text," M_Niisk: %2d%%",humidity); lcd_gfx_write_string(text); // Multiplekseri oleku muutmine tagasi, pin_clear(mux); // Paus 10 millisekundit sw_delay_ms(10); // // Kombineeritud niiskuse ja temperatuurianduri näitude lugemine // // DHTxx anduri näidu lugemine ja kuvamine LCD-l // DHT_update esimene parameeter on anduri tüüp (DHT11 või DHT22) DHT_update(DHT22,DHTpin); lcd_gfx_goto_char_xy(0,2); sprintf(text," Temp: %2dC",dht_temp/10); lcd_gfx_write_string(text); lcd_gfx_goto_char_xy(0,3); sprintf(text," Niiskus: %2d%%",dht_hum/10); lcd_gfx_write_string(text); // // Servo ja steppermootori juhtimine // if(button_read(S1)) { servomotor_position(1, 100); A4983_step(1,1000, 7); } if(button_read(S2)) { servomotor_position(1, 0); } if(button_read(S3)) { servomotor_position(1, -100); A4983_step(-1,1000, 7); } } }