This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| et:distancelab:greenhouse [2015/03/27 10:42] – tekitatud raivo.sell | et:distancelab:greenhouse [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 7: | Line 7: | ||
| Ühendustabel | Ü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 ====== | ====== Näitekood ====== | ||
| + | |||
| + | <code c> | ||
| + | #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, | ||
| + | |||
| + | // 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, | ||
| + | |||
| + | // 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, | ||
| + | |||
| + | lcd_gfx_goto_char_xy(0, | ||
| + | sprintf(text," | ||
| + | lcd_gfx_write_string(text); | ||
| + | |||
| + | // Mootorile valitud kiiruse etteandmine. | ||
| + | dcmotor_drive_pwm(1, | ||
| + | |||
| + | // | ||
| + | // 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, | ||
| + | |||
| + | lcd_gfx_goto_char_xy(0, | ||
| + | sprintf(text," | ||
| + | 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, | ||
| + | lcd_gfx_goto_char_xy(0, | ||
| + | sprintf(text," | ||
| + | lcd_gfx_write_string(text); | ||
| + | lcd_gfx_goto_char_xy(0, | ||
| + | sprintf(text," | ||
| + | lcd_gfx_write_string(text); | ||
| + | |||
| + | // | ||
| + | // Servo ja steppermootori juhtimine | ||
| + | // | ||
| + | if(button_read(S1)) | ||
| + | { | ||
| + | servomotor_position(1, | ||
| + | A4983_step(1, | ||
| + | } | ||
| + | |||
| + | if(button_read(S2)) | ||
| + | { | ||
| + | servomotor_position(1, | ||
| + | } | ||
| + | |||
| + | if(button_read(S3)) | ||
| + | { | ||
| + | servomotor_position(1, | ||
| + | A4983_step(-1, | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||