Hola.
Otra aplicación utilando un sensor de distancia sharp
[Tienes que estar registrado y conectado para ver este vínculo]
Junto con un servomotor.
Acá el Diagrama:
[Tienes que estar registrado y conectado para ver esa imagen]
El Código en MikroBasic.
y el Video de funcionamiento
Otra aplicación utilando un sensor de distancia sharp
[Tienes que estar registrado y conectado para ver este vínculo]
Junto con un servomotor.
Acá el Diagrama:
[Tienes que estar registrado y conectado para ver esa imagen]
El Código en MikroBasic.
- Código:
program Tank_Servo_Sharp
'********************************************************
'Servo Hitec----50ms=0º *
' 150ms=90º *
' 250ms=180º *
'Xt=4MHZ *
'Pic16F873A *
'Sharp Sensor *
'********************************************************
Dim Servo as byte 'Variables
Dim AN as word
Dim ADC as byte
dim texto as char[20]
Sub procedure Pulsout(dim byref Puerto as byte,dim Pin as byte,dim Pos as Byte)
Setbit(Puerto,Pin)
Delay_Cyc(Pos)
Clearbit(Puerto,Pin)
End sub
Sub procedure VerSensor
AN = Adc_Read(0)
ADC= byte(AN >> 2)
end sub
main:
ADCON1 = %10000000 ' Configuramos los analog inputs y los comparadores
TRISA = %11111111 ' PORTA son todo entradas
TRISB = %00000000
TRISC = %00000000 ' PORTC son todo salidas
PORTC = %00000000 'inicializamos puertos en 0
PORTB = %00000000
Servo=150 'inicializamos sensor a 90º
Lcd_Init(PORTB) ' inicializa LCD en PORTB config
Lcd_Cmd(lcd_cursor_off) ' Apaga cursor
Lcd_Cmd(Lcd_Clear)
inicio:
while true
do
VerSensor
ByteToStr(ADC,texto)
Lcd_Out(1, 1,texto)
Servo=servo+2 'Incrementa servo
Pulsout(PORTC,2,Servo)
delay_ms(18)
PORTC=%11
if ADC>85 then 'si Detectó sensor entonces..
do
VerSensor
ByteToStr(ADC,texto)
Lcd_Out(1, 1,texto)
Lcd_Out(1, 8,"detectado")
Servo=servo-2 'decrementa servo
Pulsout(PORTC,2,Servo)
delay_ms(18)
PORTC=%10
Lcd_Cmd(Lcd_Clear)
if Servo<50 then goto inicio end if ' si Servo minimo entonces inicio
loop until ADC<85 'si repite hasta detectar obstaculo
end if 'repite hasta Servo max
loop until Servo>250
decrementa:
do
VerSensor
ByteToStr(ADC,texto)
Lcd_Out(1, 1,texto)
Servo=servo-2
Pulsout(PORTC,2,Servo)
delay_ms(18)
PORTC=%11
if ADC>85 then
do
VerSensor
ByteToStr(ADC,texto)
Lcd_Out(1, 1,texto)
Lcd_Out(1, 8,"detectado")
Servo=servo+2
Pulsout(PORTC,2,Servo)
delay_ms(18)
PORTC=%10
Lcd_Cmd(Lcd_Clear)
if Servo>250 then goto decrementa end if
loop until ADC<85
end if
loop until Servo<50
wend
end.
y el Video de funcionamiento