(۰۱-شهریور-۱۳۹۱, ۲۱:۳۱:۳۶)h.unique نوشته است: یک باتری 12ولت 4.5آمپر بگیر.و واسه تغذیه رباتت هم باتریت رو جدا بگیر که در هنگامی که موتور ها کار میکنن مدارتو نویز نگیره.و واسه سروو هات هم یک مدار تغذیه جدا درست کن چون نویز وحشتناکی رو مدار میندازه.
با تشکر تصمیم داشتم تغذیه سرو موتور ها و چرخ ها رو یکی بدم حساب کردم جریانی که مدار میکشه حدوده 800 mA البته در بیشترین حالت... (خیلی جریان ها رو دسته بالا زدم) و تصمیم داشتم باطری های 2400 بذارم که حجم کمترباشه و جای زیادی نگیره... حج=م باطری 4500 خیلی زیاد نیست برای ربات من!!؟
اینم برنامه کامل پروژه من:
فرستده
کد:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 4800
$sim
'---------------------------------------------
Config Portc = Input
Config Portb = Output
Dim Cr As String * 1
Dim Cl As String * 1
Dim Cw As String * 1
Dim C(3) As String * 1
Dim Y As String * 3
Dim A As Byte , D As Word , E As Byte
Dim R As Byte , L As Byte , P As Byte
Dim B(3) As Byte
'---------------------------------------------
Set Portb.1
Reset Portb.2
'---------------------------------------------
Main:
Do
'---------------------------------------------
R = Pinc And &B00000011
L = Pinc And &B00001100
P = Pinc And &B00110000
Shift L , Right , 2
Shift P , Right , 4
If R = 1 Then Cr = "U"
If R = 2 Then Cr = "D"
If R = 3 Or R = 0 Then Cr = "X"
If L = 1 Then Cl = "U"
If L = 2 Then Cl = "D"
If L = 3 Or L = 0 Then Cl = "X"
If P = 1 Then Cw = "U"
If P = 2 Then Cw = "D"
If P = 3 Or P = 0 Then Cw = "X"
'---------------------------------------------
B(1) = Pinb And &B00000011
B(2) = Pinb And &B00001100
B(3) = Pinb And &B00110000
Shift B(2) , Right , 2
Shift B(3) , Right , 4
If B(1) = 1 Then C(1) = "U"
If B(1) = 2 Then C(1) = "D"
If B(1) = 3 Or B(1) = 0 Then C(1) = "X"
If B(2) = 1 Then C(2) = "U"
If B(2) = 2 Then C(2) = "D"
If B(2) = 3 Or B(2) = 0 Then C(2) = "X"
If B(3) = 1 Then C(3) = "U"
If B(3) = 2 Then C(3) = "D"
If B(3) = 3 Or B(3) = 0 Then C(3) = "X"
'---------------------------------------------
For A = 0 To 2
Print "H" ; Cr ; Cl ; Cw ; Spc(5) ; Chr(10)
Waitms 20
Next A
For A = 0 To 2
Print "B" ; C(1) ; C(2) ; C(3) ; Spc(5) ; Chr(10)
Waitms 20
Next A
'
Loop
End
گیرنده:
کد:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 4800
'$sim
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 _
, Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcd = 16 * 2
Cursor Off
Config Servos = 2 , Servo1 = Portb.6 , Servo2 = Portb.7 , Reload = 15
Config Timer1 = Pwm , Prescale = 8 , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
On Urxc Rec_isr
Enable Urxc
Enable Interrupts
Enable Timer1
Start Timer1
'---------------------------------------------
Config Pind.7 = Output , Pind.6 = Output , Pind.5 = Output
Config Portb = Output
Dim S As String * 7
Dim Sr As String * 1
Dim Sl As String * 1
Dim Spw As String * 1
Dim Ss(3) As String * 1
Dim A As Byte , B As Bit , D As Byte , P As Word
Dim Serv(2) As Byte , N(3) As Byte , M(3) As Byte
P = 23
'---------------------------------------------
Main:
'Home : Lcd "SMHHA" : Wait 3 : Cls
Do
If B = 1 Then
Disable Urxc
'---------------------------------------------
If Left(s , 1) = "H" Then
Sr = Mid(s , 3 )
Sl = Mid(s , 4)
Spw = Mid(s , 5)
Home : Lcd Sr ; Sl ; Spw ; " " ; S
If Sr = "X" Then : Reset Portb.5 : Reset Portb.0 : End If
If Sr = "D" Then : Reset Portb.5 : Set Portb.0 : End If
If Sr = "U" Then : Set Portb.5 : Reset Portb.0 : End If
If Sl = "X" Then : Reset Portb.3 : Reset Portb.4 : End If
If Sl = "D" Then : Reset Portb.3 : Set Portb.4 : End If
If Sl = "U" Then : Set Portb.3 : Reset Portb.4 : End If
If Spw = "D" Then : P = P - 200 : If P > 1023 Then P = 23 : End If
If Spw = "U" Then : P = P + 200 : If P > 1023 Then P = 1023 : End If
Pwm1a = P : Pwm1b = P
End If
'---------------------------------------------
If Left(s , 1) = "B" Then
Ss(1) = Mid(s , 3 )
Ss(2) = Mid(s , 4)
Ss(3) = Mid(s , 5)
Home : Lcd Ss(1) ; Ss(2) ; Ss(3) ; " " ; S
If Ss(1) = "X" Then : M(1) = 0 : N(1) = 0 : End If
If Ss(1) = "D" Then
Incr N(1)
If N(1) > 3 Then
Decr Serv(1)
If Serv(1) > 100 Then Serv(1) = 0
End If
End If
If Ss(1) = "U" Then
Incr M(1)
If M(1) > 3 Then
Incr Serv(1)
If Serv(1) > 100 Then Serv(1) = 100
End If
End If
If Ss(2) = "X" Then : M(2) = 0 : N(2) = 0 : End If
If Ss(2) = "D" Then
Incr N(2)
If N(2) > 3 Then
Decr Serv(2)
If Serv(2) > 100 Then Serv(2) = 0
End If
End If
If Ss(2) = "U" Then
Incr M(2)
If M(2) > 3 Then
Decr Serv(2)
If Serv(2) > 100 Then Serv(2) = 100
End If
End If
End If
Servo(1) = Serv(1)
Servo(2) = Serv(2)
'---------------------------------------------
Home L : Lcd P ; " " ; B
Reset B
S = ""
Enable Urxc
End If
Servo(1) = Serv(1)
Servo(2) = Serv(2)
Loop
End
Rec_isr:
Disable Urxc
D = Udr
If Chr(d) = "H" Or Chr(d) = "B" Then:
Mid(s , 1) = Chr(d)
For A = 2 To 5
D = Udr
Mid(s , A) = Chr(d)
Locate 2 , 10 : Lcd A
Next A
Locate 2 , 12 : Lcd Len(s)
If Len(s) = 5 Then Set B
Set B
End If
Enable Urxc
Return
البته هنوز تست نهایی نشده امکان داره اشکالات ریزی درش باشه...