Bueno, pues lo "nuevo" del coche es, que en vez de tener protoboard tengo una protoshield para que el montaje sea menos voluminoso, que aora la velocidad puede regularse mediante el pwm gracias al l298n(es un puente en H), y le e añadido un brazillo echo con servos y piezas de un viejo meccano ^^
unas fotillos del "brazo":
el codigo esta echo para un arduino mega, ya que para evitar tener que poner cables en la antena apc220, simplemente la pincho como se ve en esta foto.. y declaro el pin 15, que es en el que el gnd de la antena esta conectado como input, y el 16 y 17 como outputs que es donde estan conectados vcc y enable
por lo que si se va a usar un arduino due uno.. etc.. pueden ahorrarse es parte de codigo, y tendran que remplazar los Serial1 por Serial.
el cableado restante es extremadamente sencillo.
el servo de direccion sera el pin 9 y los pines del brazo los 7 y 8
en el l298n el ena al pin 12, y el in1 y in2 a 11 y 10, gnd a gnd +5v a +5v el vms de la clema al positivo de la bateria y gnd a gnd de la bateria, luego los cables del motor a motorA
la fuente de alimentacion del motor es una bateria de 12V que no se ve en ninguna foto, ya que va debajo del coche.. y la fuente del arduino es un portapilas de 6 pilas
en el codigo de autoit añado las teclas q y e para bajar y suvir de velocidad, wasd para manejar el brazillo de servos
agradecimientos a Biketrial de forocoches por explicarme como conectar el puente ;)
aqui el codigo autoit :
#include <CommMG.au3>
#Include <Misc.au3>
FileInstall("C:\Documents and Settings\USUARIO\Mis documentos\samuel\co.jpg",@TempDir&"\co.jpg")
HotKeySet("z","exitt")
HotKeySet("q","mas")
HotKeySet("e","menos")
_CommSetDllPath("C:\Program Files (x86)\AutoIt3\Include\commg.dll")
conecta(2,9600)
$grados = 90
$g1 = 90
$g2 = 90
Global $ve = 0
$v = 0
$D = ","
While 1
;direccion
If (_IsPressed(25) Or _IsPressed(27)) Then
If _IsPressed(25) Then
If $grados >= 45 Then
$grados -= 10
EndIf
EndIf
if _IsPressed(27) Then
If $grados <= 135 Then
$grados += 10
EndIf
EndIf
Else
If $grados <> 90 Then
If $grados >= 90 Then
$grados -= 5
EndIf
If $grados <= 90 Then
$grados += 5
EndIf
EndIf
EndIf
;-----
;balastro s1
If _IsPressed(41) Then
If ($g1 > 0) Then
$g1 -= 3
EndIf
EndIf
If _IsPressed(44) Then
If ($g1 < 180) Then
$g1 += 3
EndIf
EndIf
;-----
;balastro s2
If _IsPressed(57) Then
If ($g2 > 0) Then
$g2 -= 3
EndIf
EndIf
If _IsPressed(53) Then
If ($g2 < 180) Then
$g2 += 3
EndIf
EndIf
If (_IsPressed(26))Or(_IsPressed(28)) Then
Select
Case _IsPressed(26)
$d = ","
Case _IsPressed(28)
$d = ":"
EndSelect
$v = $ve
Else
$v = 0
EndIf
_CommSendString($v&$d&$g1&"."&$g2&";"&$grados&@CRLF,1)
ConsoleWrite($v&$d&$g1&"."&$g2&";"&$grados&@CRLF)
;$lol = _CommGetString()
;While $lol = ""
; $lol = _CommGetString()
; WEnd
Sleep(1)
WEnd
;-------
;velocidades
Func mas()
If $ve < 255 Then
$ve += 51
EndIf
EndFunc
Func menos()
If $v > 0 Then
$ve -= 51
EndIf
EndFunc
;-------------
Func conecta($port,$baud)
If $baud = "" Then $baud = 9600
Local $sportSetError
ConsoleWrite(_CommListPorts(0))
_CommSetPort($port, $sportSetError, 9600, 8, "none",2,1)
if $sportSetError = '' Then
Return 1
ConsoleWrite("using " & _CommGetVersion(1))
Else
ConsoleWrite("error")
return $sportSetError
EndIf
EndFunc
Func map($x, $in_min, $in_max, $out_min, $out_max)
return ($x - $in_min) * ($out_max - $out_min) / ($in_max - $in_min) + $out_min
EndFunc
Func exitt()
_CommCloseport()
Exit
EndFunc
y aqui el nuevo codigo del arduino
#include <Servo.h>
String inString = "";
Servo myservo,s1,s2;
int stat,rot,rot1,rot2,D;
void setup() {
Serial1.begin(19200);
myservo.attach(9);
s1.attach(7);
s2.attach(8);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
// definicion de los pines para la antena
pinMode(17, OUTPUT);
digitalWrite(17,HIGH);
pinMode(16, OUTPUT);
digitalWrite(16,HIGH);
pinMode(15,OUTPUT);
digitalWrite(15,LOW);
}
void loop() {
int inChar;
// Read serial input:
if (Serial1.available() > 0) {
inChar = Serial1.read();
}
if (isDigit(inChar)) {
inString += (char)inChar;
}
if (inChar == '-') {
D = inString.toInt();
if (D==1){
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
}else{
digitalWrite(11,HIGH);
digitalWrite(10,LOW);
}
inString = "";
}
if (inChar == ',') {
stat = inString.toInt();
analogWrite(12,stat);
inString = "";
}
if (inChar == '.') {
rot1 = inString.toInt();
s1.write(rot1);
inString = "";
}
if (inChar == ';') {
rot2 = inString.toInt();
s2.write(rot2);
inString = "";
}
if (inChar == '\n') {
rot = inString.toInt();
myservo.write(rot);
inString = "";
}
}
Coches rc son la mejor opción hoy en día para spendig tiempo libre, no sólo para el childeren sino también para los juguetes del rc adults.These se ofrece las mejores oportunidades para el childeren para ganar el knowldge también.
ResponderEliminarRecuerdos.
Nitrotek