This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:projects:tudengid11:kaugjuhitav2 [2011/04/07 23:31] – mihhail smirnov | et:projects:tudengid11:kaugjuhitav2 [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 73: | Line 73: | ||
| ====6.1. Electronics ==== | ====6.1. Electronics ==== | ||
| - | {{http:// | + | {{http:// |
| Picture 2 Block diagram | Picture 2 Block diagram | ||
| Line 163: | Line 163: | ||
| {{http:// | {{http:// | ||
| + | |||
| + | Picture 5 Menu control of a robot. | ||
| 1) Shows all ports that have any devices connected to them. | 1) Shows all ports that have any devices connected to them. | ||
| Line 170: | Line 172: | ||
| 3) These buttons controls the movements of a single leg of the robot | 3) These buttons controls the movements of a single leg of the robot | ||
| + | Source for the microcontroller: | ||
| <code c> | <code c> | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | // COM connector | ||
| + | usart in_port = USART(0); | ||
| + | |||
| + | // pinhead GND/RX/TX | ||
| + | usart out_port = USART(1); | ||
| + | |||
| + | int main(void) | ||
| + | { | ||
| + | unsigned char i; | ||
| + | char c; | ||
| + | int str[40]; | ||
| + | int inc=50; | ||
| + | int init_pos[]={600, | ||
| + | int pos[sizeof(init_pos)/ | ||
| + | for(i=0; i< | ||
| + | pos[i]=init_pos[i]; | ||
| + | } | ||
| + | |||
| + | // | ||
| + | usart_init_async(in_port, | ||
| + | USART_DATABITS_8, | ||
| + | USART_STOPBITS_ONE, | ||
| + | USART_PARITY_NONE, | ||
| + | USART_BAUDRATE_ASYNC(9600)); | ||
| + | |||
| + | // TX RX | ||
| + | usart_init_async(out_port, | ||
| + | USART_DATABITS_8, | ||
| + | USART_STOPBITS_ONE, | ||
| + | USART_PARITY_NONE, | ||
| + | USART_BAUDRATE_ASYNC(115200)); | ||
| + | |||
| + | // Loop | ||
| + | while (true) | ||
| + | { | ||
| + | usart_try_read_char(in_port, | ||
| + | if(c==' | ||
| + | // | ||
| + | usart_send_string(out_port, | ||
| + | "#0 P600 #3 P1100 #12 P1300 #15 P1150 #16 P2000 #19 P1300 #28 P1300 #31 P1850 \r"); | ||
| + | for(i=0; i< | ||
| + | pos[i]=init_pos[i]; | ||
| + | } | ||
| + | } | ||
| + | // Left upper leg | ||
| + | else if(c==' | ||
| + | /* | ||
| + | Left bottom leg | ||
| + | */ | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | /* | ||
| + | Right bottom leg | ||
| + | */ | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | /* | ||
| + | Right upper leg | ||
| + | */ | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | /* | ||
| + | Left upper leg | ||
| + | */ | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(300); | ||
| + | // | ||
| + | usart_send_string(out_port, | ||
| + | hw_delay_ms(1000); | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[0]+=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[0]-=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[1]-=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[1]+=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | |||
| + | // Right upper leg | ||
| + | else if(c==' | ||
| + | pos[2]-=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[2]+=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[3]+=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[3]-=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | |||
| + | // Left bottom leg | ||
| + | else if(c==' | ||
| + | pos[4]-=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[4]+=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[5]+=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[5]-=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | |||
| + | // Right bottom leg | ||
| + | else if(c==' | ||
| + | pos[6]+=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[6]-=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[7]-=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | } | ||
| + | else if(c==' | ||
| + | pos[7]+=inc; | ||
| + | sprintf(str, | ||
| + | usart_send_string(out_port, | ||
| + | c=' | ||
| + | } | ||
| + | } | ||
| + | } | ||
| </ | </ | ||
| + | |||
| + | The source for personal computer: | ||
| + | |||
| + | <code c> | ||
| + | #include < | ||
| + | #include " | ||
| + | |||
| + | int main(int argc, char *argv[]) | ||
| + | { | ||
| + | QApplication a(argc, argv); | ||
| + | MainWindow w; | ||
| + | // w.setFixedSize(650, | ||
| + | w.show(); | ||
| + | |||
| + | return a.exec(); | ||
| + | } | ||
| + | </ | ||
| + | <code c> | ||
| + | #include " | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | |||
| + | MainWindow:: | ||
| + | : QWidget(parent) | ||
| + | { | ||
| + | h_layout_ports=new QHBoxLayout; | ||
| + | h_layout_buttons=new QHBoxLayout; | ||
| + | g_layout=new QGridLayout; | ||
| + | textEdit_log=new QTextEdit; | ||
| + | |||
| + | // Commands: legs | ||
| + | list_char_commands_legs | ||
| + | << ' | ||
| + | << ' | ||
| + | << ' | ||
| + | << ' | ||
| + | |||
| + | // Commands: movements | ||
| + | list_char_commands_movements | ||
| + | << ' | ||
| + | << ' | ||
| + | << ' | ||
| + | << ' | ||
| + | |||
| + | // Labels: legs | ||
| + | list_label_legs.append(new QLabel(" | ||
| + | list_label_legs.append(new QLabel(" | ||
| + | list_label_legs.append(new QLabel(" | ||
| + | list_label_legs.append(new QLabel(" | ||
| + | |||
| + | // Buttons: legs | ||
| + | for(int i=0; i<4; i++){ | ||
| + | list_button_legs.append(new QPushButton(" | ||
| + | list_button_legs.append(new QPushButton(" | ||
| + | list_button_legs.append(new QPushButton(" | ||
| + | list_button_legs.append(new QPushButton(" | ||
| + | } | ||
| + | |||
| + | // Buttons: movements | ||
| + | list_button_movements.append(new QPushButton(" | ||
| + | list_button_movements.append(new QPushButton(" | ||
| + | list_button_movements.append(new QPushButton(" | ||
| + | list_button_movements.append(new QPushButton(" | ||
| + | |||
| + | // Horizontal layout: movements' | ||
| + | // Fixed size: movements' | ||
| + | // Connection: movements' | ||
| + | for(int i=0; i< | ||
| + | h_layout_buttons-> | ||
| + | list_button_movements.at(i)-> | ||
| + | connect(list_button_movements.at(i), | ||
| + | } | ||
| + | |||
| + | // Connection: legs' buttons and legs_buttons_push() | ||
| + | for(int i=0; i< | ||
| + | connect(list_button_legs.at(i), | ||
| + | } | ||
| + | |||
| + | // Horizontal layouts: legs' buttons | ||
| + | for(int i=0; i<4; i++){ | ||
| + | list_hLayout_buttons.append(new QHBoxLayout); | ||
| + | for(int k=i*4; k<4*i+4; k++){ | ||
| + | list_hLayout_buttons.at(i)-> | ||
| + | } | ||
| + | } | ||
| + | |||
| + | // Open serial ports | ||
| + | // Horizontal layoyt: ports | ||
| + | int usb_ports=16; | ||
| + | for(int i=0; i<4; i++){ | ||
| + | if(OpenComport(usb_ports, | ||
| + | QString str; | ||
| + | str.sprintf(" | ||
| + | list_radio_button_ports.append(new QRadioButton(str)); | ||
| + | h_layout_ports-> | ||
| + | usb_ports++; | ||
| + | } | ||
| + | else break; | ||
| + | } | ||
| + | |||
| + | // Grid layout | ||
| + | g_layout-> | ||
| + | g_layout-> | ||
| + | for(int i=0; i< | ||
| + | g_layout-> | ||
| + | g_layout-> | ||
| + | } | ||
| + | g_layout-> | ||
| + | |||
| + | // Set layout of main window | ||
| + | setLayout(g_layout); | ||
| + | } | ||
| + | |||
| + | MainWindow:: | ||
| + | { | ||
| + | |||
| + | } | ||
| + | void MainWindow:: | ||
| + | for(int i=0; i< | ||
| + | if(list_button_legs.at(i)-> | ||
| + | for(int k=0; k< | ||
| + | if(list_radio_button_ports.at(k)-> | ||
| + | SendByte(16+k, | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | else{ | ||
| + | for(int k=0; k< | ||
| + | if(list_radio_button_ports.at(k)-> | ||
| + | SendByte(16+k, | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | void MainWindow:: | ||
| + | for(int i=0; i< | ||
| + | if(list_button_movements.at(i)-> | ||
| + | for(int k=0; k< | ||
| + | if(list_radio_button_ports.at(k)-> | ||
| + | SendByte(16+k, | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | <code c> | ||
| + | #ifndef MAINWINDOW_H | ||
| + | #define MAINWINDOW_H | ||
| + | |||
| + | #include < | ||
| + | |||
| + | class MainWindow : public QWidget | ||
| + | { | ||
| + | Q_OBJECT | ||
| + | |||
| + | public: | ||
| + | MainWindow(QWidget *parent = 0); | ||
| + | ~MainWindow(); | ||
| + | public slots: | ||
| + | void movement_buttons_push(); | ||
| + | void legs_buttons_push(); | ||
| + | private: | ||
| + | QGridLayout *g_layout; | ||
| + | QHBoxLayout *h_layout_ports, | ||
| + | QList< | ||
| + | QList< | ||
| + | QList< | ||
| + | QList< | ||
| + | QList< | ||
| + | QList< | ||
| + | QTextEdit *textEdit_log; | ||
| + | }; | ||
| + | |||
| + | #endif // MAINWINDOW_H | ||
| + | </ | ||
| + | |||
| + | *{{http:// | ||
| + | |||
| + | *{{http:// | ||
| + | |||
| + | *{{http:// | ||
| + | |||
| + | *{{http:// | ||
| ====6.4. Construction.==== | ====6.4. Construction.==== | ||
| Line 180: | Line 549: | ||
| The Picture 4 Spider leg shows a built leg of our robot. The horizontal part is referred to as “base part” the second half of the leg is referred to as “joint part”. | The Picture 4 Spider leg shows a built leg of our robot. The horizontal part is referred to as “base part” the second half of the leg is referred to as “joint part”. | ||
| In both joint and base part a holes of 2,5 mm were made for attachment of servo motors. In the base part is also a cut was made to fit and attach a servo motor. A similar cut were made in the platform to fit the four servos that move the base parts. There are four 3mm holes that attach the servo motor in its place on the base and on the platform. The platform is fit with 4 holes of 4mm on the axes to hold an upper platform for controller and driver mounting. | In both joint and base part a holes of 2,5 mm were made for attachment of servo motors. In the base part is also a cut was made to fit and attach a servo motor. A similar cut were made in the platform to fit the four servos that move the base parts. There are four 3mm holes that attach the servo motor in its place on the base and on the platform. The platform is fit with 4 holes of 4mm on the axes to hold an upper platform for controller and driver mounting. | ||
| + | |||
| + | {{http:// | ||
| + | {{http:// | ||
| + | |||
| + | Picture 6 Detail drawings | ||
| {{http:// | {{http:// | ||
| - | Picture | + | Picture |
| {{http:// | {{http:// | ||
| {{http:// | {{http:// | ||
| - | Picture | + | Picture |