Temui Petya, tiga servos berkaki enam
Saya terus menerbitkan artikel dari seri Arduino Brain. Petya adalah hexapod yang sangat murah (sekitar sepuluh dolar). Ini bisa menjadi proyek luar biasa untuk hari hujan, yang akan menghibur baik orang dewasa maupun anak-anak. Karena kita berbicara tentang hiburan, inilah video dengan Petya menari ke musik funk:
Tentu saja, saya tidak melakukan analisis suara, saya hanya memprogram Petya untuk menari dalam irama tertentu. Berikut ini adalah video lain di mana Petya menunjukkan penghinaannya atas juggling balls:
Dalam bentuknya saat ini, Petya hanya bisa berjalan, tetapi pada saat yang sama ia bisa melihat (mengukur jarak ke) rintangan terdekat. Otaknya, bagaimanapun, cukup produktif untuk dapat mencerna data dari banyak sensor lain, kirimkan saran Anda!
Cara mengkloning Petya
Daftar belanja
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 ;
- ( ) ;
- — . — , ;
- Gerakkan elektrolit sedikit. Saya harus memiringkannya, karena jika tidak, kaki kiri tengah menyakitinya;
- Tambahkan situs uji dengan akses mudah ke sana dengan osiloskop;
- Tambahkan sepasang LED debug untuk debugging tanpa osiloskop;
- Tambahkan bantalan solder untuk semua kaki mikroprosesor yang tidak digunakan untuk debugging dan ekspansi lebih lanjut dari robot.
Kesimpulan
Petya sangat menyenangkan!
