рдорд┐рд▓рд┐рдП рдкреЗрдЯреНрдпрд╛ рд╕реЗ, рдЬреЛ рдЫрд╣ рдЯрд╛рдВрдЧреЛрдВ рд╡рд╛рд▓реЗ рддреАрди рдиреМрдХрд░ рд╣реИрдВ
рдореИрдВ Arduino рдмреНрд░реЗрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рдкреЗрдЯреНрдпрд╛ рдПрдХ рдмрд╣реБрдд рд╕рд╕реНрддрд╛ hexapods (рджрд╕ рд░реБрдкрдпреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рд╣реИред рдпрд╣ рдПрдХ рдмрд╛рд░рд┐рд╢ рдХреЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрднреБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рд╡рдпрд╕реНрдХреЛрдВ рдФрд░ рдмрдЪреНрдЪреЛрдВ рджреЛрдиреЛрдВ рдХрд╛ рдордиреЛрд░рдВрдЬрди рдХрд░реЗрдЧреАред рдЬрдм рд╕реЗ рд╣рдо рдордиреЛрд░рдВрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рдкреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрдВрдХ рд╕рдВрдЧреАрдд рд╣реИ:
рдмреЗрд╢рдХ, рдореИрдВрдиреЗ рдХреЛрдИ рдзреНрд╡рдирд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рдмрд╕ рдкреЗрдЯрд┐рдпрд╛ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдп рдореЗрдВ рдиреГрддреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреЗрдЯреНрдпрд╛ рдиреЗ рдмрд╛рдЬреАрдЧрд░реА рдЧреЗрдВрджреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЕрд╡рдорд╛рдирдирд╛ тАЛтАЛрдХреЛ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ:
рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд░реВрдк рдореЗрдВ, рдкреЗрдЯреНрдпрд╛ рдХреЗрд╡рд▓ рдЪрд▓ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╡рд╣ рдЖрд╕-рдкрд╛рд╕ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреА рд╣реИ (рджреВрд░реА рдХреЛ рдорд╛рдк рд╕рдХрддреА рд╣реИ)ред рдЙрдирдХреЗ рджрд┐рдорд╛рдЧ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрддреНрдкрд╛рджрдХ рд╣реИрдВ рдЬреЛ рдХрдИ рдЕрдиреНрдп рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрдЪрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рднреЗрдЬреЗрдВ!
рдкреЗрдЯреНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЬрд╛рдП
рдЦрд░реАрджрд╛рд░реА рдХреА рд╕реВрдЪреА
3 , / . , :
- . , . - 10тВм / 10 ( ), 2тВм / 10 . , , . тАФ , cheapduino - , .
- SG90 9G , 3 * 1.47тВм /
- 4x AAA , 1.34тВм /
- ATMega8A-AU (QFP-32), 1тВм /
- IR LED + IR , 0.20тВм /
- 1000uF 16V, 0.17тВм /
- 2n3904 , 3 * 0.01тВм /
- , , , 0805 . : hardware/motherboard/BOM.html.
, , . (, ), . . тАФ . , ;)
NB: 9g , . . , , , SketchUp . , , , .

, 3 , hardware/body/. - ::

1, . - :

3 . , . :

. hardware/motherboard/. :

ATMega8 , . :

, , , . :

N.B. , ATMega8A 2.7-5.5, 6. тАФ NiMH 1.2V . (6.4 ), , . , , !
( ):

, . ; . , , . , , , :

:

; , Q3 Q4 "" Vcc, , . :

, , , R6. 47 55 , ( ). , , (910 )!
( ). , CR2032, . ( , [] , , )
, , Q3 Q4 . , , , , , .
, . , . 2n3904, , , . , , .
, , , , :

.
, , :
- isf471 2n3904.
- Sharp GP2Y0A21YK0F:

- LM393:

, , , ATMega8. :
-
50 ; 1 (0 ), 2 (90 ). , 16 (timer1), (timer2). , Servo.h , , fast PWM.
8 , timer1 1 ( 8).
ICR1 TOP (20000), , 20 , 50 . OCR1A OCR1B ( ) .
. timer2, , , ICR1, , . , 50 , , - :
- timer2 128, , 4.096 ms = 256 * 128/(8 * 10^6).
- timer2, , .
- capture interrupt timer1 timer2 ( ).
4 2 , , 20 . , (1.5 ), :
OCR1A = 1500;
OCR1B = 1500;
OCR2 = 1500/16;
-, :
const uint8_t zero[3] = {45, 50, 40};
const uint8_t range[3] = {25, 25, 20};
zero[3]
, (. ). , 45┬░ ( ), 45┬░ , . , range[3]
. , i
zero[i]-range[i]
zero[i]+range[i]
.

( , 0┬░-90┬░) uint8_t pos[3]
. update_servo_timers()
- . pos[i]=zero[i]+range[i]
i=0,1,2
.
. pos_beg[3], pos_end[3], time_start[3]
duration[3]
. , . :
pos[0]
pos_beg[0]
, , ;pos_end[0]
(- );time_start[0]
(, );- , ,
duration[0]
( ). , (pos_end[0]-pos_beg[0])/duration[0]
/.
movement_planner()
, pos[]
, update_servo_timers()
, - pos[]
.
, , , ( ) . , . , . , :
- 1:
{zero[0]-range[0], zero[1]-range[1], zero[2]+range[2]}
- 2:
{zero[0]-range[0], zero[1]-range[1], zero[2]-range[2]}
- 3:
{zero[0]+range[0], zero[1]+range[1], zero[2]-range[2]}
- 4:
{zero[0]+range[0], zero[1]+range[1], zero[2]+range[2]}
2 ( ):
const int8_t advance_sequence[4][3] = {{-1, -1, 1}, {-1, -1, -1}, { 1, 1, -1}, { 1, 1, 1}};
, i
step
zero[i] + range[i]*advance_sequence[step][i]
.
:
uint8_t step = steps_per_sequence-1;
while (1) {
if (is_movement_finished()) {
step = (step + 1) % 4;
plan_next_movement(step, advance_sequence);
}
movement_planner();
_delay_ms(1);
}
, , 4 5 . , ( , ), adc_left_eye
adc_right_eye
, :
adc_left_eye = adc_left_eye *.99 + adc_read(5)*.01;
adc_right_eye = adc_right_eye*.99 + adc_read(4)*.01;
_delay_ms()
, .99
1-.99
.
:
uint8_t lobst = adc_left_eye < distance_threshold;
uint8_t robst = adc_right_eye < distance_threshold;
(, ) :
if (is_movement_finished()) {
if (!lobst && !robst) {
sequence = advance_sequence;
} else if (lobst && robst) {
sequence = retreat_sequence;
} else if (lobst && !robst) {
sequence = turn_right_sequence;
} else if (!lobst && robst) {
sequence = turn_left_sequence;
}
step = (step + 1) % steps_per_sequence;
plan_next_movement(step, sequence);
}
, !
! , , :
:
- "", . , , . , ?
- ( !) , , .
- , , avr-gcc . , - .
:
, V2 , ! , // :
- тАФ , ;
- , RC- ;
- ;
- R6 ;
- ( ) ;
- тАФ . тАФ , ;
- рдЗрд▓реЗрдХреНрдЯреНрд░реЛрд▓рд╛рдЗрдЯ рдХреЛ рдереЛрдбрд╝рд╛ рд╣рд┐рд▓рд╛рдПрдВред рдореБрдЭреЗ рдЗрд╕реЗ рдЭреБрдХрд╛рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛, рдХреЗрдВрджреНрд░реАрдп рдмрд╛рдПрдВ рдкреИрд░ рдореЗрдВ рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ;
- рдПрдХ рдЖрд╕реНрдЯрд╕реАрд▓рд╕реНрдХрдк рдХреЗ рд╕рд╛рде рдЙрди рддрдХ рдЖрд╕рд╛рди рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рд╕рд╛рдЗрдЯреЗрдВ рдЬреЛрдбрд╝реЗрдВ;
- рдПрдХ рдЖрд╕реНрдЯрд╕реАрд▓рд╕реНрдХрдк рдХреЗ рдмрд┐рдирд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧ рдПрд▓ рдИ рдбреА рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЬреЛрдбрд╝реЗрдВ;
- рдбреАрдмрдЧрд┐рдВрдЧ рдФрд░ рд░реЛрдмреЛрдЯ рдХреЗ рдЖрдЧреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдкреНрд░рдпреБрдХреНрдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдкреИрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЛрд▓реНрдбрд░рд┐рдВрдЧ рдкреИрдб рдЬреЛрдбрд╝реЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдкреЗрдЯреНрдпрд╛ рднрдпрд╛рдирдХ рдордЬрд╝рд╛ рд╣реИ!
