Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
  1. Главная
  2. Аппаратные модули
  3. Общие вопросы по GPIO, I2C, UART, SPI, 1-Wire, DSI, CSI, I2S
  4. Подскажите по настройки webiopi (ШИМ

Подскажите по настройки webiopi (ШИМ

Запланировано Прикреплена Закрыта Перенесена Общие вопросы по GPIO, I2C, UART, SPI, 1-Wire, DSI, CSI, I2S
8 Сообщения 1 Posters 137 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • piP Не в сети
    piP Не в сети
    pi
    написал в отредактировано pi
    #1

    Добрый день делаю робота с поворотной камерой. Камера стоит на кронштейне с двумя сервоприводами вот на таком Your text to link...
    Делаю управление сервоприводами вот по такому примеру на webiopi(своего сейчас нет но слайдеры беру отсюда ) документ index.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
           <meta http-equiv = "cache-control" content = "max-age=0">
           <meta http-equiv = "cache-control" content = "no-cache">
           <meta http-equiv = "expires" content = "0">
           <meta http-equiv = "expires" content = "Tue, 01 Jan 1970 1:00:00 GMT">
           <meta http-equiv = "pragma" content = "no-cache">
    	<meta name="viewport" content = "height = device-height, width = 420, user-scalable = no" /> 
    	<title>WebIOPi camera</title>
    	<script type="text/javascript" src="/webiopi.js"></script>
    	<script type="text/javascript">
    	function init() {
    		var button;
    			
                    button = webiopi().createButton("photo", "big photo", photo);
                    $("#cam").append(button);
    
                    button = webiopi().createAngleSlider(23, 30);
    	         $("#updown").append(button);
    
     
                    button = webiopi().createAngleSlider(24, 0);
    	         $("#leftright").append(button);
                    }
    
           function photo() {
    		 $("#ph").html('');
                   $("#ph").html('<img src="pic.jpg">');
                   }
    	function get_img()
             {
             document.getElementById("img1").src="http://192.168.0.101:8080/pic.jpg";
             }
    	webiopi().ready(init);
    		
    	</script>
    	<style type="text/css">
    		button {
    			margin: 5px 5px 5px 5px;
                         width: 150px;
    			height: 50px;
    			font-size: 12pt;
    			font-weight: bold;
    			color: black;
    		}
    	</style>
    </head>
    <body onload='setInterval("get_img();",1000);'>
    	<div style="float:left">
    	<div id="content" align="center">
    		 <div id="cam"></div>
    		<div id="vid"><img id="img1" width="320" height="240" src="http://192.168.0.101:8080/pic.jpg"></div>
    		<div>down<span id="updown"></span>up</div>
    
    		<div>left<span id="leftright"></span>right</div>
    	</div>
    	</div>
    	<div style="float:right" id="ph"></div>
    </body>
    </html>
    

    и скрипт на питоне:

    # Imports
    import webiopi
    import sys
    import time
    from subprocess import call
    
    # Enable debug output
    webiopi.setDebug()
    
    # Retrieve GPIO lib
    GPIO = webiopi.GPIO
    
    SERVO1  = 23
    SERVO2  = 24
    LED1   = 25
    
    
    def camera_start():
        return_code = call("/usr/share/webiopi/htdocs/app/Raspirobot/stream.sh", shell=True)
    
    # Called by WebIOPi at script loading
    def setup():
        webiopi.debug("Blink script - Setup")
        # Setup GPIOs
        GPIO.setFunction(SERVO1, GPIO.PWM)
        GPIO.setFunction(SERVO1, GPIO.PWM)
        GPIO.setFunction(LED1, GPIO.OUT)
        
        GPIO.pwmWriteAngle(SERVO1, 0)    # set to 0 (neutral)
        GPIO.pwmWriteAngle(SERVO2, 0)    # set to 0 (neutral)
        GPIO.digitalWrite(LED1, GPIO.HIGH)
        camera_start()
    
    # Looped by WebIOPi
    def loop():
        # Toggle LED each 5 seconds
        value = not GPIO.digitalRead(LED1)
        GPIO.digitalWrite(LED1, value)
        webiopi.sleep(5)        
    
    # Called by WebIOPi at server shutdown
    def destroy():
        webiopi.debug("Blink script - Destroy")
        # Reset GPIO functions
        GPIO.setFunction(SWITCH, GPIO.IN)
        GPIO.setFunction(SERVO, GPIO.IN)
        GPIO.setFunction(LED0, GPIO.IN)
        GPIO.setFunction(LED1, GPIO.IN)
    

    В результате получается что сервы поворачиваются но в покое дергаются я так понимаю нужно поменять частоту сигнала но где это сделать не знаю, и один поворачивается не на полный ход. Насколько я понимаю слайдеры тоже берутся из webiopi? Подскажите как настроить частоту ШИМ и слайдеры

    1 ответ Последний ответ
    0
    • piP Не в сети
      piP Не в сети
      pi
      написал в отредактировано
      #2

      Понял что мотором управляет слайдер, WebIOPi.createAngleSlider(gpio, angle), Делал слайдер с подошью WebIOPi.createRatioSlider(gpio, ratio), тогда серва работает только в начале слайдера и так же трясется устанавливал ratio в разные значения. Также делал установки и в скрипте с помощью ratio но эффект один и тот же… Понимаю что нужно у поменять скорость передачи импульса но где её установить? Или можно только свой цикл создать в скрипте?

      1 ответ Последний ответ
      0
      • piP Не в сети
        piP Не в сети
        pi
        написал в отредактировано
        #3

        Для полноты картины расскажите как подключен сервопривод к Raspberry и откуда брали пример, по которому сделаны скрипты.
        Я бы сначала отладил работу сервоприводов без Web-интерфейса, запуская скрипт управления в консольном режиме.

        1 ответ Последний ответ
        0
        • piP Не в сети
          piP Не в сети
          pi
          написал в отредактировано pi
          #4

          Сейчас питание подключено к малине к 5v управляющие к GPIO-24, GPIO-23 пробовал питание подключать к 6v от 4 батареек тоже самое. мой код index.html

          1 ответ Последний ответ
          0
          • piP Не в сети
            piP Не в сети
            pi
            написал в отредактировано
            #5

            Не влез в ответ мой код сделал новую тему «описание» там весь мой код почти в скрипте вырезал кусок

            1 ответ Последний ответ
            0
            • piP Не в сети
              piP Не в сети
              pi
              написал в отредактировано pi
              #6
              <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
              <html>
              <head>
                      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                      <meta name="viewport" content = "height = device-height, width = 420, user-scalable = no" /> 
                      <title>RaspiRobot CamBot</title>
                      <script type="text/javascript" src="/webiopi.js"></script>
                      <script type="text/javascript">
                      function init() {
                              var button;
                                      
                              button = webiopi().createButton("bt_up", "/\\", go_forward, stop);
                              $("#up").append(button);
                              
                              button = webiopi().createButton("bt_left", "<", turn_left, stop);
                              $("#middle").append(button);
                              
                              button = webiopi().createButton("bt_stop", "X", stop);
                              $("#middle").append(button);
                              
                              button = webiopi().createButton("bt_right", ">", turn_right, stop);
                              $("#middle").append(button);
                              
                              button = webiopi().createButton("bt_down", "\\/", go_backward, stop);
                              $("#down").append(button);
                              button = webiopi().createButton("bt_camera", "cam", camera,stop);
                              $("#cam").append(button);
                              button = webiopi().createButton("bt_photo", "photo", photo,stop);
                              $("#cam").append(button);
                              button = webiopi().createAngleSlider(23, 30);
                               $("#updown").append(button);
              
               
                              button = webiopi().createAngleSlider(24, 0);
                               $("#leftright").append(button);
               
                              $(document).keydown(function(e)
                              {
                                      switch(e.which)
                                       {
                                      case 37:turn_left(); break;
                                              case 38:go_forward(); break;
                                              case 39:turn_right(); break;
                                              case 40:go_backward(); break;
                                              case 32:stop(); break;
                                              case 75:camera(); break;
                                              case 80:photo(); break
                                      }
              
                              });
                              
                      } 
                     function camera() {
                               $("#vid").html('');
              
                              webiopi().callMacro("camera");
                               $("#vid").html('<img width="320" height="240" src="http://raspi:8080/?action=stream">');
              
                      }
                     function photo() {
                               $("#ph").html('');
                              webiopi().callMacro("photo");
                               $("#ph").html('<img src="/home/pi/robot/photo/ph.jpg">');
              
              
                      }
              
                      
                      function go_forward() {
                              webiopi().callMacro("go_forward");
                      }
                              
                      function go_backward() {
                              webiopi().callMacro("go_backward");
                      }
                              
                      function turn_right() {
                              webiopi().callMacro("turn_right");
                      }
                              
                      function turn_left() {
                              webiopi().callMacro("turn_left");
                      }
                              
                      function stop() {
                              webiopi().callMacro("stop");
                      }
                      
                      webiopi().ready(init);
                              
                      </script>
                      <style type="text/css">
                              button {
                                      margin: 5px 5px 5px 5px;
                                      width: 50px;
                                      height: 50px;
                                      font-size: 24pt;
                                      font-weight: bold;
                                      color: black;
                              }
                              #bt_camera, #bt_photo { width: 150px;}
                      </style>
              </head>
              <body>
                      <div style="float:left">
                      <div id="content" align="center">
                               <div id="cam"></div>
                              <div id="vid"><img width="320" height="240" src="http://raspi:8080/?action=stream"></div>
                              <div id="up"></div>
                              <div id="middle"></div>
                              <div id="down"></div>
                              <div>down<span id="updown"></span>up</div>
              
                              <div>left<span id="leftright"></span>right</div>
                      </div>
                      </div>
                      <div style="float:right" id="ph"></div>
              </body>
              </html>
              
              1 ответ Последний ответ
              0
              • piP Не в сети
                piP Не в сети
                pi
                написал в отредактировано pi
                #7
                #!/usr/bin/python
                # This version uses new-style automatic setup/destroy/mapping
                # Need to change /etc/webiopi
                
                # Imports
                import webiopi
                import sys
                import time
                from subprocess import call
                
                # Enable debug output
                webiopi.setDebug()
                
                # Retrieve GPIO lib
                GPIO = webiopi.GPIO
                SERVO1 = 23
                SERVO2 = 24
                #LED3 = 25
                
                # — #
                # Constants definition #
                # — #
                
                # Left motor GPIOs
                #LEFT_GO_PIN = 17 #PWM
                LEFT_DIR_PIN = 2
                LEFT_DIR_PIN2 = 3
                
                # Right motor GPIOs
                #RIGHT_GO_PIN = 10 #PWM
                RIGHT_DIR_PIN = 4
                RIGHT_DIR_PIN2 = 27
                
                #others
                LED1=7
                LED2=8
                cam_active=0
                speed_n=0.5
                speed_r=0.3
                # — #
                # Convenient PWM Function #
                # — #
                
                # Set the speed of two motors
                #def set_speed(speed):
                # GPIO.pulseRatio(LS, speed)
                # GPIO.pulseRatio(RS, speed)
                
                # — #
                # Left Motor Functions #
                # — #
                
                def left_stop():
                #GPIO.output(LEFT_GO_PIN, GPIO.LOW)
                #GPIO.pulseRatio(LEFT_GO_PIN, 0)
                GPIO.output(LEFT_DIR_PIN, GPIO.LOW)
                GPIO.output(LEFT_DIR_PIN2, GPIO.LOW)
                #GPIO.output(LED1, GPIO.LOW)
                
                def left_forward():
                #GPIO.output(LEFT_GO_PIN, GPIO.HIGH)
                #GPIO.pulseRatio(LEFT_GO_PIN, speed_n)
                GPIO.output(LEFT_DIR_PIN, GPIO.HIGH)
                GPIO.output(LEFT_DIR_PIN2, GPIO.LOW)
                #GPIO.output(LED1, GPIO.HIGH)
                
                def left_backward():
                #GPIO.output(LEFT_GO_PIN, GPIO.HIGH)
                #GPIO.pulseRatio(LEFT_GO_PIN, speed_r)
                GPIO.output(LEFT_DIR_PIN2, GPIO.HIGH)
                GPIO.output(LEFT_DIR_PIN, GPIO.LOW)
                
                #GPIO.output(LED1, GPIO.HIGH)
                
                # — #
                # Right Motor Functions #
                # — #
                def right_stop():
                #GPIO.output(RIGHT_GO_PIN, GPIO.LOW)
                #GPIO.pulseRatio(RIGHT_GO_PIN, 0)
                GPIO.output(RIGHT_DIR_PIN, GPIO.LOW)
                GPIO.output(RIGHT_DIR_PIN2, GPIO.LOW)
                #GPIO.output(LED2, GPIO.LOW)
                
                def right_forward():
                #GPIO.output(RIGHT_GO_PIN, GPIO.HIGH)
                #GPIO.pulseRatio(RIGHT_GO_PIN, speed_n)
                GPIO.output(RIGHT_DIR_PIN, GPIO.HIGH)
                GPIO.output(RIGHT_DIR_PIN2, GPIO.LOW)
                #GPIO.output(LED2, GPIO.HIGH)
                
                def right_backward():
                #GPIO.output(RIGHT_GO_PIN, GPIO.HIGH)
                #GPIO.pulseRatio(RIGHT_GO_PIN, speed_r)
                GPIO.output(RIGHT_DIR_PIN, GPIO.LOW)
                GPIO.output(RIGHT_DIR_PIN2, GPIO.HIGH)
                #GPIO.output(LED2, GPIO.HIGH)
                def camera_start():
                return_code = call("/home/pi/robot/stream002.sh", shell=True)
                
                def camera_stop():
                return_code = call("/home/pi/robot/stopcam.sh", shell=True)
                
                def make_photo():
                return_code = call("/home/pi/robot/photo001.sh", shell=True)
                
                @webiopi.macro
                def stop():
                left_stop()
                right_stop()
                # Called by WebIOPi at script loading
                def setup():
                # Setup GPIOs
                #GPIO.setFunction(RIGHT_GO_PIN, GPIO.PWM)
                #GPIO.setFunction(LEFT_GO_PIN, GPIO.PWM)
                webiopi.debug(«Blink script — Setup»)
                
                GPIO.setFunction(RIGHT_DIR_PIN, GPIO.OUT)
                GPIO.setFunction(RIGHT_DIR_PIN2, GPIO.OUT)
                GPIO.setFunction(LEFT_DIR_PIN, GPIO.OUT)
                GPIO.setFunction(LEFT_DIR_PIN2, GPIO.OUT)
                GPIO.setFunction(SERVO1, GPIO.PWM)
                GPIO.setFunction(SERVO2, GPIO.PWM)
                # SERVO1.ChangeFrequency(50)
                # GPIO.setFunction(LED3, GPIO.OUT)
                GPIO.pwmWriteAngle(SERVO1, 0) # set to 0 (neutral)
                GPIO.pwmWriteAngle(SERVO2, 0) # set to 0 (neutral)
                # GPIO.digitalWrite(LED3, GPIO.HIGH) 
                #GPIO.setFunction(LED1, GPIO.OUT)
                #GPIO.setFunction(LED2, GPIO.OUT)
                cam_active=0
                #set_speed(0.5)
                stop()
                
                # Looped by WebIOPi
                #def loop():
                # Toggle LED each 5 seconds
                # value = not GPIO.digitalRead(LED3)
                # GPIO.digitalWrite(LED3, value)
                # webiopi.sleep(5) 
                
                # Called by WebIOPi at server shutdown
                def destroy():
                # Reset GPIO functions
                #GPIO.setFunction(RIGHT_GO_PIN, GPIO.IN)
                #GPIO.setFunction(LEFT_GO_PIN, GPIO.IN)
                GPIO.setFunction(RIGHT_DIR_PIN, GPIO.IN)
                GPIO.setFunction(RIGHT_DIR_PIN2, GPIO.IN)
                GPIO.setFunction(LEFT_DIR_PIN, GPIO.IN)
                GPIO.setFunction(LEFT_DIR_PIN2, GPIO.IN)
                # GPIO.setFunction(SWITCH, GPIO.IN)
                GPIO.setFunction(SERVO, GPIO.IN)
                # GPIO.setFunction(SERVO2, GPIO.IN)
                
                # GPIO.setFunction(LED3, GPIO.IN)
                #GPIO.setFunction(LED1, GPIO.IN)
                #GPIO.setFunction(LED2, GPIO.IN)
                camera_stop()
                
                1 ответ Последний ответ
                0
                • piP Не в сети
                  piP Не в сети
                  pi
                  написал в отредактировано
                  #8

                  Для тех, кто в танке, повторяю вопрос: «Откуда взят пример кода, который вы используете ?»
                  Чтобы разобраться где Ваш «косяк» нужен первоисточник. Анализировать весь Ваш код нет никакого желания и времени, тем более, что играют важную роль ещё и настроечные файлы WebIOPi, которые Вы не приводите.
                  А выводы GPIO напрямую, значит, подключены к сервоприводам? И не важно, что уровни сигналов GPIO могут не соответствовать, или всё-таки соответствуют допустимым для Ваших сервоприводов?

                  1 ответ Последний ответ
                  0

                  • Войти

                  • Нет учётной записи? Зарегистрироваться

                  • Login or register to search.
                  • Первое сообщение
                    Последнее сообщение
                  0
                  • Категории
                  • Главная
                  • Документация
                  • Последние
                  • Пользователи