Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
et:distancelab:greenhouse [2015/03/27 10:42] – tekitatud raivo.sellet: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 <homelab/adc.h>
 +#include <homelab/module/lcd_gfx.h>
 +#include <homelab/pin.h>
 +#include <homelab/module/motors.h>
 +#include <stdio.h>
 +#include <homelab/delay.h>
 +#include <homelab/module/sensors.h>
 +
 +#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);
 +        }
 + }
 +}
 +
 +</code>
  
et/distancelab/greenhouse.1427452968.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0