This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:projects:tudengid11:patareidesorteerija [2011/04/08 09:55] – kusta001 | et:projects:tudengid11:patareidesorteerija [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Patareide sorteerija ====== | ||
| + | ===== Meeskond ===== | ||
| + | * Kustas Kõiv | ||
| + | * Ott Reinhold | ||
| + | * Kristjan Soomänd | ||
| + | * Marko Laan | ||
| + | |||
| + | |||
| + | ==== Lähteülesanne ==== | ||
| + | Luua süsteem, mis suudaks määrata AA ja AAA patareide laetust võimalikult lihtsalt patareide omaniku jaoks. | ||
| + | ==== Nõuded ==== | ||
| + | |||
| + | * Patarei testimisel polaarsus ei loe | ||
| + | * Patarei olukord kuvatakse ekraanile (Voltides) | ||
| + | * Sorteerijasse võib sisestada AA ja AAA patareisid, mitte rohkem, kui 10 korraga | ||
| + | * Soovi korral tagastatakse kasutuskõlblikud patareid | ||
| + | |||
| + | ==== 3D mudel ==== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ==== Üldine mudel ==== | ||
| + | {{: | ||
| + | |||
| + | ==== Lahendus ==== | ||
| + | Süsteem toetub kahele Alumiinium latile, mille külge kinnituvad muud detailid.\\ | ||
| + | Üldpildis on robot silinder- ülemises otsas paikneb kuppel, mille diskreetse pöörlemise abil suunatakse patareid mõõtmisele.\\ | ||
| + | Kupli all toimub testimine ja vastavalt kasutaja soovile tagastatakse täis patareid.\\ | ||
| + | |||
| + | ==== Mehhaanika ==== | ||
| + | Kogu agregaat kinnitub silindri kujuga konteinerile, | ||
| + | |||
| + | ==== Juhtimine ==== | ||
| + | |||
| + | Tähiste tähendused: | ||
| + | |||
| + | ^ Tähis^ Tähendus ^ 0 ^1^-1^Funktsioon^ | ||
| + | |S1|Surunupp |Avatud|Suletud | |Töö alustamine| | ||
| + | |S2|Surunupp |Avatud|Suletud | |Patareide tagastamine| | ||
| + | |M1|Dc | ||
| + | |M2|I | ||
| + | |M3|II | ||
| + | |M4|III Servomootor |Seisab|Päripäeva |Vastupäeva |Esialgne kallutamine| | ||
| + | |M5|IV | ||
| + | |A1|Infrap. andur |Signaal puudub|Signaal olemas| |Patarei olemasolu| | ||
| + | |A2|Pingeandur|Signaal puudub|Signaal olemas| |Patarei seisund| | ||
| + | |||
| + | Olekudiagramm: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | ==== Elektroonika ==== | ||
| + | Patareide testimise jaoks lülitatakse nad klemmiga kokkupuutel mõõteahelasse. Ahela tööpõhimõte seisneb selles, et ta rakendab galvaanielemendile koormuse, ning kasutades komparaatorit, | ||
| + | Kuna patarei langemine on juhuslik, ei saa me neid polaarsuse mõttes ühte pidi sättida ning selle probleemi lahendasime Shottky dioodidega. Neil tekib küll väike pingelang (~0,1V), kuid seda võtame koodi kirjutamisel arvesse. | ||
| + | |||
| + | * Mõõteahela skeem: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | * Shottky dioodid: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | * Põhimõttelahendus: | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | ===== Lähtekood ===== | ||
| + | |||
| + | Sorteerija lähtekood: | ||
| + | |||
| + | <file php main.c> | ||
| + | |||
| + | int main(void) | ||
| + | { | ||
| + | |||
| + | signed char kordus=0; | ||
| + | | ||
| + | pin leds[3] | ||
| + | pin buttons[3] = { PIN(C, 2), PIN(C, 1), PIN(C, 0) }; | ||
| + | for (i = 0; i < 3; i++) | ||
| + | { | ||
| + | pin_setup_output(leds[i]); | ||
| + | pin_setup_input(buttons[i]); | ||
| + | pin_set(leds[i]); | ||
| + | } | ||
| + | |||
| + | unsigned char new_value1; | ||
| + | unsigned char new_value2; | ||
| + | |||
| + | algustekst(); | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | /* servode algväärtustamine */ | ||
| + | | ||
| + | |||
| + | /* enable interrupts */ | ||
| + | | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | while (true) | ||
| + | { | ||
| + | pin_toggle(leds[2]); | ||
| + | hw_delay_ms(200); | ||
| + | pin_set(leds[2]); | ||
| + | hw_delay_ms(200); | ||
| + | |||
| + | signed char loendur=0; | ||
| + | new_value1 = pin_get_debounced_value(buttons[2]); | ||
| + | |||
| + | while(!new_value1){ | ||
| + | pin_set(leds[2]); | ||
| + | unsigned short value; | ||
| + | signed short distance; | ||
| + | |||
| + | | ||
| + | |||
| + | // ADC muunduri seadistamine | ||
| + | adc_init(ADC_REF_AVCC, | ||
| + | |||
| + | // Anduri väljundpinge 4-kordselt ümardatud väärtuse lugemine | ||
| + | value = adc_get_average_value(0, | ||
| + | |||
| + | // ADC väärtuse kauguseks ümberarvutamine | ||
| + | distance = ir_distance_calculate_cm(GP2Y0A21YK, | ||
| + | |||
| + | if(kordus==4) | ||
| + | { | ||
| + | kordus=0; | ||
| + | algustekst(); | ||
| + | break; | ||
| + | } | ||
| + | |||
| + | if (distance <=11) | ||
| + | { | ||
| + | kordus=0; | ||
| + | SERVO6 = SERVO_MAX; | ||
| + | hw_delay_ms(500); | ||
| + | |||
| + | char text[16]; | ||
| + | unsigned char result; | ||
| + | float tulemus; | ||
| + | |||
| + | |||
| + | // Võrdluspingeks AREF viigu valimine | ||
| + | // Multiplekseriga kanali 3 valimine | ||
| + | // Tulemus on vasak-asetusega | ||
| + | ADMUX = (1 << REFS0) | (1 << ADLAR) | (3); | ||
| + | |||
| + | lcd_alpha_clear(); | ||
| + | lcd_alpha_write_string(" | ||
| + | |||
| + | // ADC üksuse käivitamine, | ||
| + | // teisendustakti seadmine 16 korda aeglasemaks töötaktist | ||
| + | ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADSC); | ||
| + | |||
| + | // Mõõtmise lõpetamise ootamine | ||
| + | while (ADCSRA & (1 << ADSC)) continue; | ||
| + | |||
| + | // 8-bitise tulemuse lugemine | ||
| + | result =ADCH; | ||
| + | tulemus=(float)result*0.02; | ||
| + | sprintf(text, | ||
| + | |||
| + | lcd_alpha_goto_xy(0, | ||
| + | lcd_alpha_write_string(text); | ||
| + | hw_delay_ms(500); | ||
| + | SERVO6 = SERVO_MID-400; | ||
| + | | ||
| + | |||
| + | if(tulemus< | ||
| + | { | ||
| + | pin_set(leds[2]); | ||
| + | SERVO5 = SERVO_MIN-300; | ||
| + | | ||
| + | SERVO5 = SERVO_MID-400; | ||
| + | | ||
| + | pin_toggle(leds[0]); | ||
| + | } | ||
| + | else | ||
| + | { | ||
| + | pin_set(leds[0]); | ||
| + | SERVO5 = SERVO_MAX; | ||
| + | hw_delay_ms(400); | ||
| + | SERVO5 = SERVO_MID-400; | ||
| + | hw_delay_ms(400); | ||
| + | pin_toggle(leds[2]); | ||
| + | loendur++; | ||
| + | } | ||
| + | } | ||
| + | kordus++; | ||
| + | } | ||
| + | | ||
| + | { | ||
| + | char text1[16]; | ||
| + | char text2[16]; | ||
| + | for(int i=10; | ||
| + | lcd_alpha_clear(); | ||
| + | pin_toggle(leds[1]); | ||
| + | sprintf(text1, | ||
| + | lcd_alpha_write_string(text1); | ||
| + | sprintf(text2, | ||
| + | |||
| + | lcd_alpha_goto_xy(0, | ||
| + | lcd_alpha_write_string(" | ||
| + | hw_delay_ms(1000); | ||
| + | pin_set(leds[1]); | ||
| + | lcd_alpha_clear(); | ||
| + | lcd_alpha_write_string(text2); | ||
| + | hw_delay_ms(1000); | ||
| + | new_value2 = pin_get_debounced_value(buttons[1]); | ||
| + | |||
| + | if(!new_value2) | ||
| + | { | ||
| + | lcd_alpha_clear(); | ||
| + | SERVO4=SERVO_MAX; | ||
| + | hw_delay_ms(400); | ||
| + | SERVO4 = SERVO_MID; | ||
| + | algustekst(); | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | lcd_alpha_clear(); | ||
| + | SERVO4=SERVO_MIN; | ||
| + | hw_delay_ms(400); | ||
| + | SERVO4 = SERVO_MID; | ||
| + | algustekst(); | ||
| + | |||
| + | |||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Majanduskalkulatsioon ===== | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ===== Ehitamine ===== | ||
| + | |||
| + | |||
| + | Sai valmis meisterdatud läbipaistev väline kest süsteemile. | ||
| + | |||
| + | {{: | ||
| + | {{: | ||
| + | {{: | ||
| + | |||
| + | Trükkplaadi tegemine. | ||
| + | |||
| + | {{: | ||
| + | {{: | ||
| + | {{: | ||
| + | {{: | ||
| + | {{: | ||
| + | |||
| + | Programmeerimine. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | |||
| + | ===== Projektijuhtimine ===== | ||
| + | |||
| + | Kõik meeskonnaliikmed tegelesid jooksvalt kõikide lahendust vajavate probleemidega. | ||
| + | |||
| + | Nädalaaruanded: | ||
| + | |||
| + | *{{: | ||
| + | *{{: | ||
| + | *{{: | ||
| + | *{{: | ||
| + | |||
| + | ===== Kokkuvõte ja järeldused ===== | ||
| + | |||
| + | Suurimaks miinuseks oli ajapuudus. Seade vajaks veel palju katsetamist, | ||
| + | |||
| + | |||
| + | ===== Viited ja kasutatud kirjandus ===== | ||
| + | |||
| + | - http:// | ||
| + | - http:// | ||
| + | - http:// | ||
| + | - http:// | ||