Thông báo

Collapse
No announcement yet.

Từng bước chế tạo Robot

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Từng bước chế tạo Robot

    Chào các bạn!
    Mình mở diễn đàn này mong được thảo luận và chia sẻ các kinh nghiệm làm Robot. Trong loạt bài này mình sẽ lần lượt viết về :
    - Điều khiển động cơ DC
    - Làm việc với ADC và sensor
    - Làm việc với LCD.
    - Các ví dụ về Lập trình điều khiển Robot di động
    ...
    Mong các bạn ủng hộ và cùng góp ý.
    :-)

  • #2
    Bài 1: Các bước chuẩn bị

    Để bắt tay vào chế tạo 1 con Robot bạn cần :

    1. Kiến thức :
    - Kiến thức cơ sở về điện tử: tôi nghĩ rằng nếu đã tốt nghiệp PTTH thì kiến thức điện tử của bạn đã có thể dùng để chế tạo 1 con Robot đơn giản.
    - Kiến thức lập trình Vi điều khiển: bạn có thể học lập trình Assemble hoặc C.

    2. Phần mềm:
    - Trình duyệt: tùy mục đích làm Robot mà bạn sẽ chọn loại VĐK phù hợp, trên cơ sở đó sẽ chọn trình duyệt tương ứng. Trong loạt bài này tôi sẽ hướng dẫn Lập trình C cho VĐK T89C51 trên trình duyệt RIDE 51. Trên cơ sở đó bạn có thể viết lại cho VĐK của mình trên trình duyệt tương ứng.
    - Phần mềm mô phỏng: Protues hỗ trợ rất mạnh về mô phỏng trực quan. Bạn sẽ thấy rất tiện nghi khi làm việc với nó, tiết kiệm thời gian, và giảm chi phí mua những linh kiện ko cần thiết...

    3. Phần cứng: nếu có tiền thì...
    - Nếu là người chưa có kinh nghiệm về VĐK, bạn nên mua cho riêng mình 1 KIT để học, có sẵn VĐK, LCD, speaker ... để tiết kiệm tiền, tránh và các cổng Analog và Digital để cắm các thiết bị ngoài như sensor hoặc motor.
    - 2 motor DC cỡ nhỏ.
    - Sensor: 2 sensor hồng ngoại nhận dạng vạch trắng- đen, 1 sensor hồng ngoại xác định khoảng cách.

    *** Tôi mua tất cả những linh kiện này tốn hơn 2 triệu đồng.
    - Ngoài ra bạn có thể mua thêm các linh kiện cần thiết cho mục đích của mình, ví dụ sensor đo nhiệt độ, độ ẩm ...

    *** Lời khuyên: bạn ko nên vội mua bất cứ thứ linh kiện nào khi mà chưa thấy nó cần thiết. Vì hầu hết các linh kiện đều có thể mô phỏng được.
    Khi nào nắm chắc kiến thức và cảm thấy thật sự cần thiết phải mua thì mới mua. Để dành tiền cho những mục đích xa hơn. Còn nếu 2 triệu ko là vấn đề lớn với bạn thì cứ mua.

    4. Quan trọng nhất: là bạn thực sự thích thú về Robot và mong muốn tự mình có thể chế tạo Robot.

    5. Thời gian rảnh: Hãy sắp xếp thời gian học tập và nghỉ ngơi hợp lý để bạn có 1 khoảng thời gian rảnh, yên tâm ngồi nghiên cứu về Robot. Đừng để nó ảnh hưởng đến kết quả học tập hoặc công việc chính của bạn.
    :-)

    Comment


    • #3
      Bài 2: Lập trình điều khiển động cơ DC

      2.1. Trong bài này, tôi sẽ hướng dẫn thiết mạch, mô phỏng trên Proteus và viết chương trình cho VĐK để điều khiển động cơ DC.

      Khi làm thực tế lưu ý: Mạch điều khiển động cơ DC gồm 2 phần: mạch logic và mạch công suất. Do mạch công suất có thể sử dụng điện áp cao, còn mạch logic thì dùng điện áp thấp (dưới 5V), nên cần thiết phải cách ly 2 phần này ra để bảo vệ mạch logic. Có nhiều phương pháp để giải quyết vấn đề này, trong đó có phương pháp dùng Opto và dùng IC. Để đơn giản hóa, tôi dùng IC L293D có tích hợp sẵn mạch khuyếch đại và cách ly 2 mạch logic - công suất.

      Xem mạch ở hình dưới
      Attached Files
      Last edited by pavo_lusa; 07-03-2009, 00:28.
      :-)

      Comment


      • #4
        Bài 2: Lập trình điều khiển động cơ DC (tiếp theo)

        2.2. Driver cho mạch điều khiển động cơ này như sau:

        /*--------------------------------------------------------------------------*/
        // Program : Pulse width modulation by PCA module
        // Description : Generate pulse width modulation signal on CEX3 and CEX4
        // : using PCA function
        // Filename : dc_motor.h
        // C compiler : RIDE 51 V6.1
        /*--------------------------------------------------------------------------*/
        #define ch1 1 // Define constant
        #define ch2 2 // Define constant
        #define all 3 // Define constant
        #define motor_pulse 115 // Define constant
        sbit dir_a1 = P2^0; // bit drive motor0
        sbit dir_a2 = P2^1; // bit drive motor0
        sbit dir_b1 = P2^2; // bit drive motor1
        sbit dir_b2 = P2^3; // bit drive motor1
        /************************************************** ***************************/
        /*********************** Drive motor backward ********************************/
        /************************************************** ***************************/
        void motor_bk(unsigned char select_bk ,unsigned char speed)
        {
        TMOD &= 0xF0; // Refresh mode timer 0
        TMOD |= 0x02; // Setup mode timer 0 (8 bit auto reload)
        TH0 = motor_pulse; // Reload value for timer 0
        TL0 = motor_pulse; // Initial value for count of timer 0
        TR0 = 1; // Start timer 0
        CMOD = 0x04; // Set CMOD PCA count freq. by pulse overflow timer0
        if(select_bk==1)
        {
        CCAPM3 = 0x42; // Set CCAP Module 3 as 8 bit PWM
        CCAP3L = 255-speed; // Set CCAP3L initial value by speed variable(set duty cycle)
        CCAP3H = 255-speed; // Set CCAP3H reload value by speed variable(set duty cycle)
        dir_a1 = 1; // set direction backward
        dir_a2 = 0; // set direction backward
        }
        else if(select_bk==2)
        {
        CCAPM4 = 0x42; // Set CCAP Module 3 as 8 bit PWM
        CCAP4L = 255-speed; // Set CCAP4L initial value by speed variable(set duty cycle)
        CCAP4H = 255-speed; // Set CCAP4H initial value by speed variable(set duty cycle)
        dir_b1 = 1; // set direction backward
        dir_b2 = 0; // set direction backward
        }
        CCON = 0x40; // Set PCA counter run
        }
        /************************************************** ***************************/
        /*********************** Drive motor forward ********************************/
        /************************************************** ***************************/
        void motor_fd(unsigned char select_fd, unsigned char speed)
        {
        TMOD &= 0xF0; // Refresh mode timer 0
        TMOD |= 0x02; // Setup mode timer 0 (8 bit auto reload)
        TH0 = motor_pulse; // Reload value for timer 0
        TL0 = motor_pulse; // Initial value for count of timer 0
        TR0 = 1; // Start timer 0
        CMOD = 0x04; // Set CMOD PCA count freq. by pulse overflow timer0
        if(select_fd==1)
        {
        CCAPM3 = 0x42; // Set CCAP Module 3 as 8 bit PWM
        CCAP3L = 255-speed; // Set CCAP3L initial value by speed variable(set duty cycle)
        CCAP3H = 255-speed; // Set CCAP3H initial value by speed variable(set duty cycle)
        dir_a1 = 0; // Set direction forward
        dir_a2 = 1; // Set direction forward
        }
        else if(select_fd==2)
        {
        CCAPM4 = 0x42; // Set CCAP Module 3 as 8 bit PWM
        CCAP4L = 255-speed; // Set CCAP4L initial value by speed variable(set duty cycle)
        CCAP4H = 255-speed; // Set CCAP4H initial value by speed variable(set duty cycle)
        dir_b1 = 0; // Set direction forward
        dir_b2 = 1; // Set direction forward
        }
        CCON = 0x40; // Set PCA counter run
        }
        /************************************************** ***************************/
        /*********************** Break motor *****************************************/
        /************************************************** ***************************/
        void motor_stop(char select_stop)
        {
        if(select_stop==1)
        {
        dir_a1 = 0; // Break motor channel 1
        dir_a2 = 0; // Break motor channel 1
        CCAPM3 &= 0xFD; // Stop generate PWM at pin P1.6
        }
        else if(select_stop==2)
        {
        dir_b1 = 0; // break motor channel 2
        dir_b2 = 0; // Break motor channel 2
        CCAPM4 &= 0xFD; // Stop generate PWM at pin P1.7
        }
        else if(select_stop==3)
        {
        dir_a1 = 0; // Break motor channel 1
        dir_a2 = 0; // Break motor channel 1
        CCAPM3 &= 0xFD; // Stop generate PWM at pin P1.6
        dir_b1 = 0; // Break motor channel 2
        dir_b2 = 0; // Break motor channel 2
        CCAPM4 &= 0xFD; // Stop generate PWM at pin P1.7
        }
        }
        :-)

        Comment


        • #5
          Bài 2: Lập trình điều khiển động cơ DC (tiếp theo)

          2.3. Đây là phần mô phỏng trên Proteus
          Các thành phần chính gồm:
          - AT89C51
          - motor driver L293D
          - 2 motor DC
          - 2 leds hiển thị chiều quay động cơ: chiều thuận led sẽ cho ánh sáng xanh, chiều nghịch led cho ánh sáng màu đỏ
          Attached Files
          :-)

          Comment


          • #6
            Bài 2: Lập trình điều khiển động cơ DC (tiếp theo)

            2.4. Thực hiện bài tập điều khiển đơn giản nhất

            Robot của bạn được điều khiển chuyển động bằng 2 động cơ DC, như mô phỏng ở trên.
            Yêu cầu: Lập trình cho Robot thực hiện các chuyển động sau:

            - Chạy tới
            - Chạy lui
            - Rẽ phải
            - Rẽ trái
            :-)

            Comment


            • #7
              Bài 2: Lập trình điều khiển động cơ DC (tiếp theo)

              2.4. Thực hiện bài tập điều khiển đơn giản nhất

              Robot của bạn được điều khiển chuyển động bằng 2 động cơ DC, như mô phỏng ở trên.
              Yêu cầu: Lập trình cho Robot thực hiện các chuyển động sau:

              - Chạy tới
              - Chạy lui
              - Rẽ phải
              - Rẽ trái

              Mách nước:
              Khi robot chạy tới thì 2 motor đều quay chiều thuận, 2 leds phát sáng màu xanh.
              Khi robot chạy lui thì 2 motor đều quay chiều ngược, 2 leds phát sáng màu đỏ.
              Khi robot rẽ phải thì motor phải quay chiều nghịch, motor trái quay chiều thuận (các leds phát sáng màu tương ứng)
              Khi robot rẽ trái thì motor trái quay chiều nghịch, motor phải quay chiều thuận.
              :-)

              Comment


              • #8
                Bài 2: Lập trình điều khiển động cơ DC (tiếp theo)

                2.5. Lập trình điều khiển chuyển động
                Đây là C Code để giải bài toán ví dụ trên. Code được viết trên trình duyệt RIDE 51


                /*-----------------------------------------------*/
                // Program : Basic Move
                // Description: Robo-51 movement by simple function
                // Filename : basic_move.c
                // C compiler : RIDE 51 v6.1
                /*-----------------------------------------------*/
                #include <c51ac2.h>
                #include <dc_motor.h>
                #include <delay_robo51.h>
                #define pow 200

                void run_fd(int time_spin)
                {
                motor_fd(2,pow);
                motor_fd(1,pow);
                delay_ms(time_spin);
                }

                void run_bk(int time_spin)
                {
                motor_bk(2,pow);
                motor_bk(1,pow);
                delay_ms(time_spin);
                }

                void turn_left(int time_spin)
                {
                motor_fd(2,pow);
                motor_bk(1,pow);
                delay_ms(time_spin);
                }

                void turn_right(int time_spin)
                {
                motor_fd(1,pow);
                motor_bk(2,pow);
                delay_ms(time_spin);
                }

                void stop(void)
                {
                motor_stop(3);
                }

                void main()
                {
                while(1)
                {
                run_fd(1000);
                stop;
                turn_left(1000);
                stop;
                run_bk(1000);
                turn_right(1000);
                stop;
                run_fd(1000);
                stop;
                turn_right(1000);
                turn_left(200);
                run_bk;
                delay_ms(1000);
                }
                }
                :-)

                Comment


                • #9
                  Bài 2: Lập trình điều khiển động cơ DC (tiếp theo)

                  2.6 file.hex để nạp cho chip
                  bạn có thể dùng file này để nạp cho chip trong phần mô phỏng bằng proteus ở trên cũng như để nạp vào chip thật.

                  :03000000020003F8
                  :0F00030075810CE4787FF6D8FD75A0FF020146E9
                  :100012005389F0438902758C73758A73D28C75D9B2
                  :0400220004BF011105
                  :1000260075DD4274FFC39DF5EDF5FDD2A0C2A1803A
                  :0500360013EFB4020FFE
                  :10003B0075DE4274FFC39DF5EEF5FED2A2C2A37529
                  :03004B00D8402278
                  :10004E005389F0438902758C73758A73D28C75D976
                  :04005E0004BF0111C9
                  :1000620075DD4274FFC39DF5EDF5FDC2A0D2A180FE
                  :0500720013EFB4020FC2
                  :1000770075DE4274FFC39DF5EEF5FEC2A2D2A375ED
                  :03008700D840223C
                  :03008A00BF0108AB
                  :0B008D00C2A0C2A153DDFD22BF02088B
                  :0B009800C2A2C2A353DEFD22BF030E74
                  :0F00A300C2A0C2A153DDFDC2A2C2A353DEFD2243
                  :0D00B200E4FCFDECB50604EDB507005015AB
                  :1000BF007B6E7A04DBFEDAFC750A03750B6E0DEDB1
                  :0600CF0070E40C80E12248
                  :0D00D500E4FCFDECB50604EDB5070050118C
                  :1000E200784BD8FEE4F50875094B0DED70E80C80ED
                  :0200F200E52205
                  :1000F4008F037F027DC812004E1F12004E8B071221
                  :0301040000B22224
                  :100107008F037F027DC81200121F1200128B071285
                  :0301170000B22211
                  :10011A008F037F027DC812004E1F1200128B071236
                  :03012A0000B222FE
                  :10012D008F037F017DC812004E0F1200128B071234
                  :03013D0000B222EB
                  :060140007F0312008A2279
                  :100146007E037FE81200F47E037FE812011A7E0325
                  :100156007FE81201077E037FE812012D7E037FE808
                  :100166001200F47E037FE812012DE4FE7FC812011F
                  :0A0176001A7E037FE81200B280C673
                  :00000001FF
                  :-)

                  Comment


                  • #10
                    Bài 2: Lập trình điều khiển động cơ DC (kết thúc)

                    Vậy là xong.
                    Tôi đã trình bày tất cả về mạch, mô phỏng, code ...điều khiển động cơ DC
                    Các bạn dùng thử. Có ý kiến gì thì cùng thảo luận.

                    Trong bài tiếp theo tôi sẽ hướng dẫn cách làm việc với ADC và kết nối sensor.
                    Chúc thành công!
                    Pavo_lusa
                    Last edited by pavo_lusa; 07-03-2009, 01:44.
                    :-)

                    Comment


                    • #11
                      Bài 3: Làm việc với ADC và sensor

                      ... (bài này vẫn đang được soạn và sẽ sớm được post)
                      :-)

                      Comment


                      • #12
                        tài liệu chế tạo Robot

                        Để có cái nhìn chung về phương pháp lý thuyết, kỹ năng và kinh nghiệm chế tạo Robot, mời các bạn tham khảo các tài liệu sau:

                        1. XÂY DỰNG ROBOT DI ĐỘNG TRÁNH VẬT CẢN DỰA TRÊN CÁC SENSOR SIÊU ÂM VÀ SENSOR ĐỊA BÀN (Đồ án tốt nghiệp) - Bản quyền: Bạch Hoàng Giang - ĐHCN
                        2. Line Following Robot (Robot chạy bám vạch) - Bản Quyền: Priyank Patil
                        3. Line following robots - Bản Quyền: Ondřej Staněk
                        4. A Line Following Robot - bản quyền: Auburn University
                        5. Định vị cho robot di động trong không gian 2 chiều - bản quyền: Đoàn Hiệp, Doãn Minh Đăng.
                        6. Line Following Robot - bản quyền: Viena University
                        7. ROBOT DI ĐỘNG THEO DẤU TƯỜNG (Đồ án tốt nghiệp) - bản quyền: Doãn Minh Đăng.

                        Bạn có thể download những tài liệu này ở đây:http://dientuvietnam.net/forums/showthread.php?t=23301
                        :-)

                        Comment


                        • #13
                          Tôi mới bắt đầu tìm hiểu về robot, bạn làm ơn chỉ giùm: các phần mềm, phần cứng cần thiết để làm ví dụ trên, làm thế nào để nạp chip?
                          Cám ơn!

                          Comment


                          • #14
                            bạn đọc kỹ từ đầu loạt bài này. Tôi đã hướng dẫn cả.
                            Chúc bạn vui!
                            :-)

                            Comment


                            • #15
                              Nguyên văn bởi pavo_lusa Xem bài viết
                              ... (bài này vẫn đang được soạn và sẽ sớm được post)
                              bạn ơi tui đợi bạn mãi bạn làm xong chưa port lên cho anh em xem với

                              Comment

                              Về tác giả

                              Collapse

                              pavo_lusa Tìm hiểu thêm về pavo_lusa

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X