Project Oled - Gyro - GAME

Project Oled - Gyro - GAME v1.0 by Ponticelli Domenico.

Project Oled - Gyro - GAME v1.0

Progetto con ARDUINO NANO Atmega328 di un piccolo gioco con movimenti tramite sensore GYROSCOPIO, semplice da realizzare e con rapida soddisfazione

Funzionamento:

Il gioco consiste nel evitare un blocco che scende dalla parte alta dello schermo, spostando tramite inclinazione la propria navicella, la gestione avviene con un sensore GYRO per spostarsi a destra e sinistra, il tutto viene disegnato sullo schermo

vengono fatti i calcoli con la dimensione dei due disegni, cosi calcolando il punto di collisione.

Materiale utilizzato

1 - Arduino Nano Atmega328

1 - Gyro Sensor (Gy521)

1 - I2C Oled Screen (SDD1306) 4 fili (VCC-GND-SDA-SCL)

Ehhhhhh!!! Poco e niente!!!!

 

Collegamenti e Porte utilizzate

+ 5v Arduino (Gyro - Oled)

GND Arduino (Gyro - Oled)

Pin 4 (SCL) - (Gyro - Oled)

Pin 5 (SDA)- (Gyro - Oled)

Schema OLED-GYRO Game V1.0

 

Codice SORGENTE arduino

 

// MPU-6050 Short Example Sketch
#include<Wire.h>
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);

 

int x,y,z,xx,yy,zz; //triple axis data

char bufferX [20];
char bufferY [20];
char bufferZ [20];

static int cx = 0;

const int MPU=0x68;  // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
bool gameRun = false;
bool partitaPersa = false;
static int cyGameRun = 0;
int randNumber = 0;
unsigned long time;
unsigned long myTimer;

void setup(){
 
 randomSeed(analogRead(0));
 gameRun = false;
  x = 0;
  y = 0;
  z = 0;
  xx = 0;
  yy = 0;
  zz = 0;

 

 
 
  Wire.begin();
  Wire.beginTransmission(MPU);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(9600);

 


}
void loop(){

  time = millis();

  if (!gameRun)
  {
    randNumber = random(122); 
    gameRun = true;
    cyGameRun = 0;
  }

  Serial.print("number: ");
  Serial.print(randNumber);
  Serial.print(" rungame: ");
  Serial.print(gameRun);
  Serial.print(" yGame: ");
  Serial.print(cyGameRun);
  Serial.println();
 
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,14,true);  // request a total of 14 registers
  x=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)    
  y=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  z=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  xx=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  yy=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  zz=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)


  x = map(x,-16000,16000,0,360);
  //y = map(y,-16000,16000,0,360);
  z = map(z,-16000,16000,0,360);


  sprintf(bufferX, "x : %d", x);
  sprintf(bufferY, "y : %d", y);
  sprintf(bufferZ, "z : %d", z);

 

  u8g.firstPage(); 
  do {
    draw();
  } while( u8g.nextPage() );
 
  delay(100);

  if (partitaPersa)
  {
    if (time > myTimer)
    {
    partitaPersa = false;
            gameRun = false;
        cyGameRun = 0;
    }
  }


//
// 
//  Serial.print("Gyroscope: ");
//  Serial.print("X = "); Serial.print(map(AcX,-16000,16000,0,360));
// 
//  Serial.print(" | Y = "); Serial.print(map(AcY,-16000,16000,0,360));
//  Serial.print(" | Z = "); Serial.println(map(AcZ,0,32000,0,360));
//  //equation for temperature in degrees C from datasheet
//  Serial.print("Temperature: "); Serial.print(Tmp/340.00+36.53); Serial.println(" C ");
// 
//  Serial.print("Accelerometer: ");
//  Serial.print("X = "); Serial.print(map(GyX,-16000,16000,0,360));
//  Serial.print(" | Y = "); Serial.print(map(GyY,-16000,16000,0,360));
//  Serial.print(" | Z = "); Serial.println(map(GyZ,0,32000,0,360));
//  Serial.println(" ");
//  delay(333);
}

 


void draw(void) {
  u8g.setFont(u8g_font_unifont);
  //u8g.drawStr( 0, 20, bufferX);
  //u8g.drawStr( 0, 40, bufferY);
  //u8g.drawStr( 0, 60, bufferZ);


  static int armLength = 20;
  cx = map(y,-9000,9000, 0,98);
  static int cy = 20;
  static int cyGame = 53;
  int armX, armY;
 
  //convert degree to radian
  float bearingRad = x/57.2957795;
  armX = armLength*cos(bearingRad);
  armY = -armLength*sin(bearingRad);

  u8g.setFont(u8g_font_unifont);
 
  //u8g.setPrintPos(0, 60);
  //u8g.print("bearing: ");
  //u8g.setPrintPos(70, 60);
  //u8g.print(bufferY);

 

  if (gameRun == true && cyGameRun <= 64 && partitaPersa == false)
  {
    cyGameRun += 1;
    u8g.drawBox(randNumber, cyGameRun, 5, 5);

  }
  else
  {
    gameRun = false;
    cyGameRun = 0;
   
  }

      if (cyGameRun < cyGame)
    {
       Serial.println("IN GIOCO");
    }
    else
    {
      if (cx+35 > randNumber && cx < randNumber)
      {
        Serial.println("PARTITA PERSA");
        //u8g.nextPage();
        u8g.setFont(u8g_font_unifont);
        u8g.drawStr( 40, 30, "HAI PERSO!!!");
        //delay(2000);
        partitaPersa = true;
        myTimer = time + 5000;
        //delay(1000);
      }
     
    }
 

 


  if (!partitaPersa)
  {
  u8g.drawBox(cx, cyGame, 35, 10);
  }
  else
  {
  u8g.drawStr( 17, 30, "HAI PERSO!!");
  u8g.drawStr( 32, 45, "RITENTA");
  }
  //u8g.drawLine(cx, cy, cx-armX, cy-armY);
  //u8g.drawCircle(cx, cy, armLength, U8G_DRAW_ALL);

 

  delay(5);
 

}

 

 

 

 

Progetto Trenino/Plastico Arduino v1.0

Progetto Trenino/Jouef Arduino v1.0 by Ponticelli Domenico.

Progetto con ARDUINO UNO collegato ad una pista trenino elettrico JOUEF con gestione automatica giri e fermate.

 

Treno JOUEF/Arduino
Treno JOUEF/Arduino

 

Funzionamento

Nella prima versione, il treno viene comandato tramite Arduino, la gestione avviene tutta in automatico, partenza del treno a velocità bassa, dopo un tempo X, la velocità aumenta, fino a raggiungere la massima velocità completando un giro completo,

a circa 1 gire e mezzo, il treno passa nuovamente ad una velocità inferiore, passando in stato di ricerca sensore, dal momento in cui viene letto il sensore, il treno passa in velocità minima per la fermata gestita da un tempo, nel momento della fermata, un LED si accende per identificare il tempo di fermata, scaduto il tempo, il treno riparte dalla ciclica iniziale.

Il programma è gestito a stati, senza funzioni DELAY ma con tutti dei "multitasking", permettendo cosi al processore di ricevere comandi esterni seriali ed eventualmente accogliere altri sensori.

Materiale utilizzato

1 - Pista Treno JOUEF (come LIMA/HORNBY)

1 - Arduino UNO

1 - Motor Shield (gestione corrente sul binario)

1 - Sensore magnetico per la rilevazione del passaggio treno

1 - Led

Collegamenti e Porte utilizzate

+ 5v Arduino

GND Arduino

Pin 2 - Magnetic Sensor

Pin 6 - Led

Pin 13 - gestione direzione treno (motorShield)

Pin 11 - Alimentazione e gestione BINARIO (motorShield)

 

 

 

La passione diventa realtà....

Nasce il sito del mondo dell'elettronica, verrà condiviso tutto il materiale per imparare, realizzare, aiutarsi a creare i propri progetti.
Spero ognuno di voi possa condividere e apprezzare.
Saranno pubblicati materiali relativi ad ARDUINO, ANDROID, ELETTRONICA, PROGETTI VARI.
 
 
Grazie a tutti.
Ponticelli Domenico. 

Project Robot v1.0

Project Robot v1.0 by Ponticelli Domenico.

Project Robot Vista
Project Robot v1

Progetto con ARDUINO UNO di un piccolo Robot con movimenti e lettura di un sensore di distanza, la comunicazione avviene tramite Bluetooth.

Funzionamento

Il Robot viene collegato tramite uno Smartphone ANDROID, una volta effettuata la connessione, è pronto a ricevere i comandi tramite un Joystick sullo Smartphone, nel mentre viene letta e visualizzata da distanza letta dal sensore

in caso la distanza letta è minore di 15cm viene disabilitato il movimento in avanti, disponibili solo la rotazione destra/sinista o comando indietro.

Materiale utilizzato

1 - Arduino UNO

1 - Motor Shield (gestione di 2 motori DC)

1 - Xbee Shield con modulo Bluetooth

2 - Motori DC semplici

1 - Sensore PING parallax (lettura distanza)

1 - Servomotore

4 - Batterie Ricaricabili (Alimentazione Motori)

1 - Batteria (Alimentazione scheda ARDUINO)

Collegamenti e Porte utilizzate

+ 5v Arduino

GND Arduino

Pin 6 - Ping Sensor

Pin 10 - ServoMotor

Pin 13 - Direzione motore A (motorShield)

Pin 12 - Direzione motore B (motorShield)

Pin 11 - Motore A (motorShield)

Pin 3 - Motore B (motorShield)

Pin 0 - Tx/RX con Xbee bluetooth

Pin 1 - Tx/RX con Xbee Bluetooth

Project Robot v1 SchemaProject Robot v1 Schema
Project Robot v1 Android
Project Robot v1 Android

 

Arduino/Android World

Progetti dedicati al mondo...

Arduino, Android

Esperimenti, condivisione, e tanta voglia di imparare.

Docs

Sezione documenti e progetti, download gratuiti.

Download Gratuiti

Easy to start

aaa

Progetti easy to start

Modern Design

arduino

Modern Design

Documenti & Supporto

Modern Design

supporto e unione nello sviluppo di progetti condivisi.