Presentación Poemoto y ordenador de abordo

Muy buenas

Como muchos de vosotros, según voy leyendo en muchos mensajes, soy nuevo en Arduino y en el foro. No he encontrado un sitio donde presentarme. Dado que tengo intención de quedarme en este foro e ir posteando mis logros y fracasos, alegrías y penas, me gustaría hacerlo.

Siempre me ha llamado la atención la electrónica y la programación, pero al no tener nada de conocimientos previos ni de lo uno ni de lo otro, me resultaban temas complejos y más, sin una meta clara o concreta que me motivasen a aprender, en mi poco tiempo libre.

Soy de Madrid y una de mis mayores aficiones es la moto. Llevaba tiempo con la idea de poner un voltímetro y un termómetro en una de ellas (mi favorita) pero no quería que fuese un apaño feo, quería que fuese lo más integrado y camuflado posible sin romper la estética original.

El caso es que tras dar mil pensadas, se me cruzó arduino por medio, fui leyendo que era sencillo, empecé a ver algún video tutorial, no me pareció algo excesivamente complejo. Me animé y compré una placa Leonardo, unas resistencias y saque mi bolsita de piezas desoldadas de un antiguo video VHS (leds, potenciómetros, botoncillos, etc. Luego más adelante compré una pantalla 5110, un DHT22... y ya tengo algunos sensores más en camino que llegarán la semana que viene. En fin, creo que me estoy enganchando ;D

No paro de leer, ver posts, videos y repasar y escribir códigos sencillos. A base de prueba y error, poco a poco voy avanzando y aprendiendo. A veces tengo un código que no funciona como quiero y a base de modificarlo acaba haciendo lo que quiero sin llegar a entender muy bien por qué con el último cambio empezó a funcionar jeje, en fin, otras veces aprendo de estas pequeñas cosas.

Al final una idea ha cuajado en mi cabeza y es integrar una pantalla (la 5110 u otra) por detrás del cuentarrevoluciones haciendo una pequeña ventana en este, del mismo tamaño y forma que otras dos pantallas digitales que tiene mi moto.

Describo brevemente el ordenador de abordo que tengo en mente, es decir, el proyecto (creo que es algo relativamente sencillo, pero para mi es todo un desafío, dado que parto de cero patatero)

Mi idea es reflejar en una 5110 varias pantallas de información que se mueven de una a otra con la ayuda de un mando de psp (más pequeño que el de ps2).

En las distintas pantallas quiero reflejar:

  • Tª y H% ambiente
  • Tª motor
  • Voltaje de la batería y del alternador
  • Número de gotas de aceite que caen en la cadena para engrasarla
  • Acceso y regulación de la bomba que dosifica esas gotas

Y fuera de la pantalla quiero poner:

  • Led que me indique al apagarse, que el motor ya está caliente.
  • Led que indique posible hielo en la carretera
  • Led que indique que el candado del freno de disco está puesto (o bien más bien que no está guardado)

No quiero llenarla de leds y lucecitas, por lo que este último puede ser perfectamente uno de los dos anteriores, dado que sólo necesito que me avise antes de arrancarla al meter la llave. Bien un led de dos colores o con distinto comportamiento.

Me está siendo bastante más sencillo engancharme con un objetivo en mente :wink:
De momento tengo el DHT y la 5110 integrados con lo que quiero hacer. Pero soy consciente que me queda mucho por delante, pues cada sensor y los ejemplos de programación son un mundo y voy de uno en uno. Por otro lado tengo muchas lagunas respecto a los voltajes entre la moto y el arduino que ya iré preguntando si veo que no encuentro respuestas a mis dudas.

La semana que viene me llega el mando psp... he empezado a ver códigos y.... puf no sé ni por dónde cogerlos jeje, a ver si encuentro alguno sencillito para empezar.

Perdón por el rollo y... pego el código que tengo en este momento (tengo que seguir ojeándolo porque sé que hay cosas que sobran, como algunos #define de la 5110, algún delay, etc) por si alguien me quiere hacer algún comentario :wink:
Cualquier comentario se agradece.

Un saludo

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include "DHT.h"



// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

// Hardware SPI (faster, but must use certain hardware pins):
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
// Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
// Note with hardware SPI MISO and SS pins aren't used but will still be read
// and written to during SPI transfer.  Be careful sharing these pins!
#define DHTPIN 2  
#define DHTTYPE DHT22 
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
DHT dht(DHTPIN, DHTTYPE);


void setup()   {
  Serial.begin(9600);

  display.begin();
  // init done

  // you can change the contrast around to adapt the display
  // for the best viewing!
  display.setContrast(60);
  Serial.println("DHTxx test!");

  dht.begin();
  display.display(); // show splashscreen
  delay(2000);
  display.clearDisplay();   // clears the screen and buffer
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);
  delay(2500);
  display.clearDisplay();



  // text display tests
  display.setTextSize(1);
  display.setTextColor(BLACK);
  display.setCursor(0,20);
  display.print("Temp: ");
  display.print(t);
  display.println("C");
  display.print("H%:   ");
  display.print(h);
  display.println("%");  
  display.display();
  delay(2500);

}

void loop() {
  



for (int m=0;m<100;m++){
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);
  delay(4000);
  display.clearDisplay();
  // text display tests
  display.setTextSize(1);
  display.setTextColor(BLACK);
 
  display.setCursor(0,20);
  display.print("Temp: ");
  display.print(t);
  display.println("C");
  display.print("H%:   ");
  display.print(h);
  display.println("%");
  display.setCursor(50,0);
  display.print(m);  
  display.display();

  delay(4000);
  if (m==99)
  {int m=0;
  }
}
}

Bienvenido al foro y solo un consejo, no hagas todo de golpe. Cada proyecto por separado hasta que lo controles bien y luego integrar poco a poco.

Gracias Jopapa

Creo que eso estoy haciendo. Voy tanteando los comandos de programación, la semántica, la ortografía, por decirlo de alguna forma, jeje. Los distintos sensores, familiarizándome con las instrucciones, el orden de la líneas y haciendo pequeñas pruebas que se me ocurren, a ver si pudiera hacer esto si uno aquello...

En fin, no tiene sentido pensar de inicio en la estructura final, pues seguramente cuando sepa más, mi idea inicial puede variar como suele pasar cuando maduras un tema y te informas bien.

De momento me estoy entreteniendo mucho con esto.

Gracias por el consejo