Un montaje de mDrawBot Kit, donde en principio todo va bien, pero que posteo para pedir ayuda.
¿Alguien sabe como podría funcionar el mCar de forma autónoma? Como se ve para realizar el dibujo debe de estar conectado al PC de donde recibe las instrucciones del software de mDraw.

577a994466bf8.jpg

Video dibujando

¿Tenéis algún programa que se pueda cargar en la placa para que funcione de forma autónoma?

Gracias

Un montaje de mDrawBot Kit, donde en principio todo va bien, pero que posteo para pedir ayuda. ¿Alguien sabe como podría funcionar el mCar de forma autónoma? Como se ve para realizar el dibujo debe de estar conectado al PC de donde recibe las instrucciones del software de mDraw. ![577a994466bf8.jpg](serve/attachment&path=577a994466bf8.jpg) [Video dibujando](https://s.real.com/RIdo0b "mCar funcionando") ¿Tenéis algún programa que se pueda cargar en la placa para que funcione de forma autónoma? Gracias

Si quieres seguir usando el mDraw pero sin estar conectado por cable bastaría que uses el módulo Bluetooth

Pero si te refieres a no tener que usar el mDraw, para que pinte de forma autónoma siempre un dibujo puedes modificar el firmware desde Arduino y precargarle en un array las coordenadas del dibujo y que las vaya procesando la misma función que las procesa al recibirlas desde el mDraw

Si quieres seguir usando el mDraw pero sin estar conectado por cable bastaría que uses el módulo Bluetooth Pero si te refieres a no tener que usar el mDraw, para que pinte de forma autónoma siempre un dibujo puedes modificar el firmware desde Arduino y precargarle en un array las coordenadas del dibujo y que las vaya procesando la misma función que las procesa al recibirlas desde el mDraw

Gracias por la ayuda.
No se me había ocurrido la primera opción, pero la he probado es sencilla y va OK.
Con la segunda opción no se por donde empezar y de momento la dejo, aunque se me ocurre que tal vez programando algunas funciones en el IDE de Arduino tipo comandos de Lego que controlen los motores PAP podrían dibujarse también algunas figuras geométricas. Si consigo algo enseñable lo pondré por aquí.

Aqui va un enlace de lo conseguido mediante bluetooth.
<iframe width="800" height="400" src="//www.youtube.com/embed/10Eeh_IJJqg" frameborder="0" allowfullscreen=""></iframe>

Gracias por la ayuda. No se me había ocurrido la primera opción, pero la he probado es sencilla y va OK. Con la segunda opción no se por donde empezar y de momento la dejo, aunque se me ocurre que tal vez programando algunas funciones en el IDE de Arduino tipo comandos de Lego que controlen los motores PAP podrían dibujarse también algunas figuras geométricas. Si consigo algo enseñable lo pondré por aquí. Aqui va un enlace de lo conseguido mediante bluetooth. https://youtu.be/10Eeh_IJJqg
editado 25 Aug '16 a las 9:23 am

De nuevo gracias por los consejos. He echado un vistazo a lo que me sugieres y no sabía por donde agarrarlo. Al final he decidido tirar por la idea de hacer un programa en Arduino con la filosofía de LOGO. Intentaba dibujar una cruz de Malta y algo parecido ha salido. A pesar de los cálculos para los motores PAP se pierden muchos decimales en los bucles y queda algo aproximado.

577ed408108e9.jpg

<iframe width="800" height="400" src="//www.youtube.com/embed/KABQFkrpmV8" frameborder="0" allowfullscreen=""></iframe>

/********************************************
* Programa para controlar el mCar del mBotDraw  mediante software externo
* Dibuja la cruz de Malta
* *incluye animacion de led-matrix
* JHG julio 2016
****************************************/
#include <MeOrion.h>
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>

MeStepper stepper1(PORT_1); 
MeStepper stepper2(PORT_2);
MePort port_1(PORT_7);  // para el servo
Servo pluma; // crea el objeto pluma para el control del servo
MeLEDMatrix Matrix_1(PORT_6);

//  ---------movimiento lineal-----------
// diametro rueda: 64,5 mm
// pasos/vuelta: 200 x 16 = 3200   (driver en HHH)
// avance/vuelta: 64,5 x 3,14 = 202,5 mm
// pasos/cm: 3200/20,25 = 158 
// ------------ giros --------------
// distancia entre ruedas: 140 mm
// arco 90º: 2 x 3,14 X 140/ 4 = 219,8 mm
// arco de 1º: 219,8/90 = 2,44mm
// pasos por grado: 2,44 x 15,8 = 38,58 (39)
// girando las 2 ruedas: 38,58/2 = 19,29 (19)

int pinpluma =  port_1.pin2();  // para el control del pin del servo por el puerto
int dirPin1 = mePort[PORT_1].s1;//  PORT1 SLOT1
int stpPin1 = mePort[PORT_1].s2;//   PORT1 SLOT2
int dirPin2 = mePort[PORT_2].s1; // idem PORT_2
int stpPin2 = mePort[PORT_2].s2;//   idem PORT_2

uint8_t ojos[16]={24,36,66,90,90,66,36,24,24,36,66,90,90,66,36,24};
uint8_t  ojo[16]={24,36,66,90,90,66,36,24,24,24,36,60,60,36,24,24};
//=================================
void setup(){ 
Serial.begin(9600);
pinMode(dirPin1, OUTPUT);
pinMode(stpPin1, OUTPUT);
pinMode(dirPin2, OUTPUT);
pinMode(stpPin2, OUTPUT);
pluma.attach(pinpluma);  // pin que controlara el servo
pluma.write(150);  // posicion inicial, pluma arriba
Matrix_1.setBrightness(Brightness_8);
Matrix_1.setColorIndex(1);
delay(1000); //tiempo para arranque de motor
}
//=================================
void loop(){
  Matrix_1.drawBitmap(0, 0, sizeof(ojos), ojos);
  gira_iz(60);
  baja_pluma(); 
  diabolo();
  gira_de(90);
  diabolo();
  sube_pluma();

  retrocede(20);
  gira_de(20);
  parpadeo();
  parpadeo();
  while (1==1){}
}
//=================================
void parpadeo(){
  Matrix_1.drawBitmap(0, 0, sizeof(ojo), ojo);
  delay (300);
  Matrix_1.drawBitmap(0, 0, sizeof(ojos), ojos);
  delay (300);
  Matrix_1.drawBitmap(0, 0, sizeof(ojo), ojo);
  delay (300);
  Matrix_1.drawBitmap(0, 0, sizeof(ojos), ojos);  
}

void diabolo(){
  avanza(10);
  gira_iz(120);
  avanza(10);
  gira_iz(120);
  avanza(20);
  gira_de(120);
  avanza(10);
  gira_de(120);
  avanza(10);
}
void gira_de(int grados){
  digitalWrite(dirPin1,1);
  digitalWrite(dirPin2,1);
  delay(50);
  for(int i=0;i<grados*20;i++){  
    digitalWrite(stpPin1, HIGH);
    digitalWrite(stpPin2, HIGH);
    delayMicroseconds(800);
    digitalWrite(stpPin1, LOW);
    digitalWrite(stpPin2, LOW);
    delayMicroseconds(800); 
  }
}
void gira_iz(int grados){
  digitalWrite(dirPin1,0);
  digitalWrite(dirPin2,0);
  delay(50);
  for(int i=0;i<grados*20;i++){ 
    digitalWrite(stpPin1, HIGH);
    digitalWrite(stpPin2, HIGH);
    delayMicroseconds(800);
    digitalWrite(stpPin1, LOW);
    digitalWrite(stpPin2, LOW);
    delayMicroseconds(800); 
  }
}
void avanza(int cm){
  digitalWrite(dirPin1,1);
  digitalWrite(dirPin2,0);
  delay(50);
  for(int i=0;i<cm*158;i++){
    digitalWrite(stpPin1, HIGH);
    digitalWrite(stpPin2, HIGH);
    delayMicroseconds(800);
    digitalWrite(stpPin1, LOW);
    digitalWrite(stpPin2, LOW);
    delayMicroseconds(800); 
  }
}
void retrocede(int cm){
  digitalWrite(dirPin1,0);
  digitalWrite(dirPin2,1);
  delay(50);
  for(int i=0;i<cm * 158;i++){
    digitalWrite(stpPin1, HIGH);
    digitalWrite(stpPin2, HIGH);
    delayMicroseconds(800);
    digitalWrite(stpPin1, LOW);
    digitalWrite(stpPin2, LOW);
    delayMicroseconds(800); 
  }
}
void sube_pluma(){ 
  pluma.write(150);
}
void baja_pluma(){ 
  pluma.write(90);
}
De nuevo gracias por los consejos. He echado un vistazo a lo que me sugieres y no sabía por donde agarrarlo. Al final he decidido tirar por la idea de hacer un programa en Arduino con la filosofía de LOGO. Intentaba dibujar una cruz de Malta y algo parecido ha salido. A pesar de los cálculos para los motores PAP se pierden muchos decimales en los bucles y queda algo aproximado. ![577ed408108e9.jpg](serve/attachment&path=577ed408108e9.jpg) [https://youtu.be/KABQFkrpmV8](http://Video dibujando "Cruz de Malta") ```` /******************************************** * Programa para controlar el mCar del mBotDraw mediante software externo * Dibuja la cruz de Malta * *incluye animacion de led-matrix * JHG julio 2016 ****************************************/ #include <MeOrion.h> #include <Arduino.h> #include <SoftwareSerial.h> #include <Wire.h> MeStepper stepper1(PORT_1); MeStepper stepper2(PORT_2); MePort port_1(PORT_7); // para el servo Servo pluma; // crea el objeto pluma para el control del servo MeLEDMatrix Matrix_1(PORT_6); // ---------movimiento lineal----------- // diametro rueda: 64,5 mm // pasos/vuelta: 200 x 16 = 3200 (driver en HHH) // avance/vuelta: 64,5 x 3,14 = 202,5 mm // pasos/cm: 3200/20,25 = 158 // ------------ giros -------------- // distancia entre ruedas: 140 mm // arco 90º: 2 x 3,14 X 140/ 4 = 219,8 mm // arco de 1º: 219,8/90 = 2,44mm // pasos por grado: 2,44 x 15,8 = 38,58 (39) // girando las 2 ruedas: 38,58/2 = 19,29 (19) int pinpluma = port_1.pin2(); // para el control del pin del servo por el puerto int dirPin1 = mePort[PORT_1].s1;// PORT1 SLOT1 int stpPin1 = mePort[PORT_1].s2;// PORT1 SLOT2 int dirPin2 = mePort[PORT_2].s1; // idem PORT_2 int stpPin2 = mePort[PORT_2].s2;// idem PORT_2 uint8_t ojos[16]={24,36,66,90,90,66,36,24,24,36,66,90,90,66,36,24}; uint8_t ojo[16]={24,36,66,90,90,66,36,24,24,24,36,60,60,36,24,24}; //================================= void setup(){ Serial.begin(9600); pinMode(dirPin1, OUTPUT); pinMode(stpPin1, OUTPUT); pinMode(dirPin2, OUTPUT); pinMode(stpPin2, OUTPUT); pluma.attach(pinpluma); // pin que controlara el servo pluma.write(150); // posicion inicial, pluma arriba Matrix_1.setBrightness(Brightness_8); Matrix_1.setColorIndex(1); delay(1000); //tiempo para arranque de motor } //================================= void loop(){ Matrix_1.drawBitmap(0, 0, sizeof(ojos), ojos); gira_iz(60); baja_pluma(); diabolo(); gira_de(90); diabolo(); sube_pluma(); retrocede(20); gira_de(20); parpadeo(); parpadeo(); while (1==1){} } //================================= void parpadeo(){ Matrix_1.drawBitmap(0, 0, sizeof(ojo), ojo); delay (300); Matrix_1.drawBitmap(0, 0, sizeof(ojos), ojos); delay (300); Matrix_1.drawBitmap(0, 0, sizeof(ojo), ojo); delay (300); Matrix_1.drawBitmap(0, 0, sizeof(ojos), ojos); } void diabolo(){ avanza(10); gira_iz(120); avanza(10); gira_iz(120); avanza(20); gira_de(120); avanza(10); gira_de(120); avanza(10); } void gira_de(int grados){ digitalWrite(dirPin1,1); digitalWrite(dirPin2,1); delay(50); for(int i=0;i<grados*20;i++){ digitalWrite(stpPin1, HIGH); digitalWrite(stpPin2, HIGH); delayMicroseconds(800); digitalWrite(stpPin1, LOW); digitalWrite(stpPin2, LOW); delayMicroseconds(800); } } void gira_iz(int grados){ digitalWrite(dirPin1,0); digitalWrite(dirPin2,0); delay(50); for(int i=0;i<grados*20;i++){ digitalWrite(stpPin1, HIGH); digitalWrite(stpPin2, HIGH); delayMicroseconds(800); digitalWrite(stpPin1, LOW); digitalWrite(stpPin2, LOW); delayMicroseconds(800); } } void avanza(int cm){ digitalWrite(dirPin1,1); digitalWrite(dirPin2,0); delay(50); for(int i=0;i<cm*158;i++){ digitalWrite(stpPin1, HIGH); digitalWrite(stpPin2, HIGH); delayMicroseconds(800); digitalWrite(stpPin1, LOW); digitalWrite(stpPin2, LOW); delayMicroseconds(800); } } void retrocede(int cm){ digitalWrite(dirPin1,0); digitalWrite(dirPin2,1); delay(50); for(int i=0;i<cm * 158;i++){ digitalWrite(stpPin1, HIGH); digitalWrite(stpPin2, HIGH); delayMicroseconds(800); digitalWrite(stpPin1, LOW); digitalWrite(stpPin2, LOW); delayMicroseconds(800); } } void sube_pluma(){ pluma.write(150); } void baja_pluma(){ pluma.write(90); } ````
editado 8 Jul '16 a las 9:44 am
424
vistas
4
respuestas
2
seguidores
vista previa (en vivo)
introduzca al menos un 10 caracteres
Advertencia: Mencionaste a %MENTIONS%, pero ellos no pueden ver el mensaje y no serán notificados
Guardando...
Guardado
Todos los posteos de este tema serán borrados ?
Borrador pendiente ... Click para continuar editando
Descartar borrador