Luua süsteem, mis suudaks määrata AA ja AAA patareide laetust võimalikult lihtsalt patareide omaniku jaoks.
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.
Kogu agregaat kinnitub silindri kujuga konteinerile, kuhu langevad kasutuskõlbmatud patareid. Süsteemi kõik komponendid- mootorid, koos kinnitustega, elektroonika komponendid, on kinnitatud kahele alumiiniumist talale. Ajameid on kokku viis- 4 servomootorit ja 1 DC-mootor. Nemad kallutavad, keerutavad ja liigutavad erinevate hoobade abil mehhanisme.
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 mootor | Seisab | Töörežiim | Kausi pöörlemine | |
M2 | I Servomootor | Seisab | Töörežiim | Ükshaaval laadimine | |
M3 | II Servomootor | Seisab | Töörežiim | Klemmi ühendamine | |
M4 | III Servomootor | Seisab | Päripäeva | Vastupäeva | Esialgne kallutamine |
M5 | IV Servomootor | Seisab | Päripäeva | Vastupäeva | Puhvri kallutamine |
A1 | Infrap. andur | Signaal puudub | Signaal olemas | Patarei olemasolu | |
A2 | Pingeandur | Signaal puudub | Signaal olemas | Patarei seisund |
Olekudiagramm:
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, hoiab ahelas konstantset voolu (~30 mA). Mikrokontroller mõõdab pinget patarei klemmide vahel, saades sedasi teada, kui suur on pingelang. Edasi tehakse otsus patarei kasutuskõlblikuse kohta. 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.
Sorteerija lähtekood:
int main(void) { signed char kordus=0; unsigned char i; pin leds[3] = { PIN(C, 5), PIN(C, 4), PIN(C, 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 */ init_servos(); /* enable interrupts */ sei(); 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; dcmootor(); // ADC muunduri seadistamine adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); // Anduri väljundpinge 4-kordselt ümardatud väärtuse lugemine value = adc_get_average_value(0, 4); // ADC väärtuse kauguseks ümberarvutamine distance = ir_distance_calculate_cm(GP2Y0A21YK, value); 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("Patarei taituvus"); // 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, "%3.0f %%",(tulemus*100)/0.88); lcd_alpha_goto_xy(0, 1); lcd_alpha_write_string(text); hw_delay_ms(500); SERVO6 = SERVO_MID-400; hw_delay_ms(400); if(tulemus<0.7) { pin_set(leds[2]); SERVO5 = SERVO_MIN-300; hw_delay_ms(400); SERVO5 = SERVO_MID-400; hw_delay_ms(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++; } if(loendur>=1) { char text1[16]; char text2[16]; for(int i=10;i>0;i--){ lcd_alpha_clear(); pin_toggle(leds[1]); sprintf(text1, "Tais patareid %d",loendur); lcd_alpha_write_string(text1); sprintf(text2, "%d",i); lcd_alpha_goto_xy(0, 1); lcd_alpha_write_string("Hoia nuppu S2"); 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(); } } }
Kõik meeskonnaliikmed tegelesid jooksvalt kõikide lahendust vajavate probleemidega.
Nädalaaruanded:
Suurimaks miinuseks oli ajapuudus. Seade vajaks veel palju katsetamist, seadistamist ja ümberehitamist, et saada kaubanduslik välimus ja täielik funktsionaalsus.