B4R Tutorial Servo motor and Arduino

Thanks to @Erel and the new rservo library (Beta#7), we've access to servo motors.

Servos are a motor type that allows for precise control of angular or linear position, velocity and acceleration (wiki);there're various types with different characteristics (torque, velocity, etc)

There're very cheap models like this one and usually used on actuators, robotic arms, etc..

upload_2016-4-20_15-58-24.png
upload_2016-4-20_15-59-19.png


upload_2016-4-20_16-23-9.png

B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'Public variables can be accessed from all modules.
    Public Serial1 As Serial
    Public servo1 As Servo
    Public pinservo As Pin
    Public Timer1 As Timer
    Public angleservo As UInt
    Public upangle As Boolean

End Sub

Private Sub AppStart
    Serial1.Initialize(115200)
    Log("AppStart")
    pinservo.Initialize (4,pinservo.MODE_OUTPUT)    'connect servo to pin 4 of Arduino
    servo1.Attach(pinservo.PinNumber)                'assign servo to device on pin servo

    Timer1.Initialize ("Timer1_Tick",1000)            'Call Timer every second
    Timer1.Enabled=True

    angleservo=servo1.Read                             'initial servo angle
    upangle=True                                    'Increment angle

End Sub

Sub Timer1_Tick

    angleservo=servo1.read
   
    Select upangle                                    'Increment angle           
   
        Case True   
            If (angleservo >=0 And angleservo <180) Then
                Log ("up angle ",angleservo)
                angleservo=angleservo +1
                servo1.Write(angleservo)
            End If
       
            If angleservo=180 Then upangle=False
       
        Case False                                    'Decrement angle
       
            If angleservo <=180 And angleservo>0 Then
                Log ("down angle ",angleservo)
                angleservo=angleservo-1
                servo1.Write(angleservo)
            End If
       
            If angleservo=0 Then upangle=True
   
    End Select

End Sub

Servos are quite power-hungry so if you connect several sensors to Arduino, you'll need to use a separate power supply for servo motors (battery ,etc..)
 
Last edited:
Top