рджрд╕ рд░реБрдкрдпреЗ рдореЗрдВ рд░реЛрдмреЛрдЯрдХрд╛рд░рдг рдкреЗрдЯреНрдпрд╛

рдорд┐рд▓рд┐рдП рдкреЗрдЯреНрдпрд╛ рд╕реЗ, рдЬреЛ рдЫрд╣ рдЯрд╛рдВрдЧреЛрдВ рд╡рд╛рд▓реЗ рддреАрди рдиреМрдХрд░ рд╣реИрдВ


рдореИрдВ Arduino рдмреНрд░реЗрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рдкреЗрдЯреНрдпрд╛ рдПрдХ рдмрд╣реБрдд рд╕рд╕реНрддрд╛ hexapods (рджрд╕ рд░реБрдкрдпреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рд╣реИред рдпрд╣ рдПрдХ рдмрд╛рд░рд┐рд╢ рдХреЗ рджрд┐рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрднреБрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рд╡рдпрд╕реНрдХреЛрдВ рдФрд░ рдмрдЪреНрдЪреЛрдВ рджреЛрдиреЛрдВ рдХрд╛ рдордиреЛрд░рдВрдЬрди рдХрд░реЗрдЧреАред рдЬрдм рд╕реЗ рд╣рдо рдордиреЛрд░рдВрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рдкреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реАрдбрд┐рдпреЛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлрдВрдХ рд╕рдВрдЧреАрдд рд╣реИ:



рдмреЗрд╢рдХ, рдореИрдВрдиреЗ рдХреЛрдИ рдзреНрд╡рдирд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛, рдореИрдВрдиреЗ рдмрд╕ рдкреЗрдЯрд┐рдпрд╛ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдп рдореЗрдВ рдиреГрддреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреЗрдЯреНрдпрд╛ рдиреЗ рдмрд╛рдЬреАрдЧрд░реА рдЧреЗрдВрджреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЕрд╡рдорд╛рдирдирд╛ тАЛтАЛрдХреЛ рджрд┐рдЦрд╛рдпрд╛ рд╣реИ:



рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд░реВрдк рдореЗрдВ, рдкреЗрдЯреНрдпрд╛ рдХреЗрд╡рд▓ рдЪрд▓ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╡рд╣ рдЖрд╕-рдкрд╛рд╕ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреА рд╣реИ (рджреВрд░реА рдХреЛ рдорд╛рдк рд╕рдХрддреА рд╣реИ)ред рдЙрдирдХреЗ рджрд┐рдорд╛рдЧ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрддреНрдкрд╛рджрдХ рд╣реИрдВ рдЬреЛ рдХрдИ рдЕрдиреНрдп рд╕реЗрдВрд╕рд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрдЪрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рднреЗрдЬреЗрдВ!


рдкреЗрдЯреНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдЬрд╛рдП


рдЦрд░реАрджрд╛рд░реА рдХреА рд╕реВрдЪреА


3 , / . , :



, , . (, ), . . тАФ . , ;)


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;    // left servo
OCR1B = 1500;    // right servo
OCR2  = 1500/16; // center servo


-, :


const uint8_t  zero[3] = {45, 50, 40};     // zero position of the servo (degrees)
const uint8_t range[3] = {25, 25, 20};     // the servos are allowed to move in the zero[i] +- range[i] interval

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; // at the initialization stage the (previous) movement is considered to be complete, thus the next movement will be planned starting from the step 0
    while (1) {
        if (is_movement_finished()) {
            step = (step + 1) % 4; // if previous movement is complete, then perform the next step; this variable loops as 0,1,2,3.
            plan_next_movement(step, advance_sequence); // execute next movement
        }
        movement_planner(); // update the servos position according to the planning
        _delay_ms(1);
    }


, , 4 5 . , ( , ), adc_left_eye adc_right_eye , :


        adc_left_eye  = adc_left_eye *.99 + adc_read(5)*.01; // low-pass filter on the ADC readings
        adc_right_eye = adc_right_eye*.99 + adc_read(4)*.01;

_delay_ms() , .99 1-.99 .


:


        uint8_t lobst = adc_left_eye  < distance_threshold; // obstacle on the left?
        uint8_t robst = adc_right_eye < distance_threshold; // obstacle on the right?

(, ) :


        if (is_movement_finished()) {
            if (!lobst && !robst) {
                sequence = advance_sequence; // no obstacles => go forward
            } else if (lobst && robst) {
                sequence = retreat_sequence; // obstacles left and right => go backwards
            } else if (lobst && !robst) {
                sequence = turn_right_sequence; // obstacle on the left => turn right
            } else if (!lobst && robst) {
                sequence = turn_left_sequence; // obstacle on the right => turn left
            }
            step = (step + 1) % steps_per_sequence; // if previous movement is complete, then perform the next step
            plan_next_movement(step, sequence); // execute next movement
        }

, !



! , , :


:


  • "", . , , . , ?
  • ( !) , , .
  • , , avr-gcc . , - .

:


, V2 , ! , // :


  • тАФ , ;
  • , RC- ;
  • ;
  • R6 ;
  • ( ) ;
  • тАФ . тАФ , ;
  • рдЗрд▓реЗрдХреНрдЯреНрд░реЛрд▓рд╛рдЗрдЯ рдХреЛ рдереЛрдбрд╝рд╛ рд╣рд┐рд▓рд╛рдПрдВред рдореБрдЭреЗ рдЗрд╕реЗ рдЭреБрдХрд╛рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛, рдХреЗрдВрджреНрд░реАрдп рдмрд╛рдПрдВ рдкреИрд░ рдореЗрдВ рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ;
  • рдПрдХ рдЖрд╕реНрдЯрд╕реАрд▓рд╕реНрдХрдк рдХреЗ рд╕рд╛рде рдЙрди рддрдХ рдЖрд╕рд╛рди рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рд╕рд╛рдЗрдЯреЗрдВ рдЬреЛрдбрд╝реЗрдВ;
  • рдПрдХ рдЖрд╕реНрдЯрд╕реАрд▓рд╕реНрдХрдк рдХреЗ рдмрд┐рдирд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧ рдПрд▓ рдИ рдбреА рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдЬреЛрдбрд╝реЗрдВ;
  • рдбреАрдмрдЧрд┐рдВрдЧ рдФрд░ рд░реЛрдмреЛрдЯ рдХреЗ рдЖрдЧреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЕрдкреНрд░рдпреБрдХреНрдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдкреИрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЛрд▓реНрдбрд░рд┐рдВрдЧ рдкреИрдб рдЬреЛрдбрд╝реЗрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдкреЗрдЯреНрдпрд╛ рднрдпрд╛рдирдХ рдордЬрд╝рд╛ рд╣реИ!



All Articles