Roboty i JavaScript czyli jak posypać ranę solą

Czy kiedykolwiek marzyłeś o własnym robocie, najlepiej latającym i przynoszącym piwo? Nie? Nic się nie stało, po naszej prezentacji będziesz wiedział jak dzięki Node.js, RaspberryPi i Arduino udało nam się stworzyć naszego pierwszego robota który robi więcej niż miganie diodą.

Bartek Legięć Kacper Pietrzak

Bartek Legięć i Kacper Pietrzak

Bartek Legięć                Kacper Pietrzak

„Roboty i JavaScript czyli jak posypać ranę solą”

2017-12-13

@bibix1999                  @pietrzakacper

What's our story?

What's our story?

Idea is everything...
or not

Calculator
as a
Service

Let's build a robot!

Let's build a robot!

Failure is a part of the process

Bob Goff

Failure is a part of the process

Let’s start from scratch

The fun part - time for coding

DEMO

http://pigam.es/MathRobot

How does Raspberry communicate with Arduino?

Johnny-Five

Johnny-Five

            #define IN1  8
#define IN2  9
#define IN3  10
#define IN4  11
int Steps = 0;
boolean Direction = true;
unsigned long last_time;
unsigned long currentMillis ;
int steps_left=4095;
long time;
void setup()
{
  Serial.begin(115200);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  // delay(1000);
}

void loop()
{
  while(steps_left>0){
    currentMillis = micros();
    if(currentMillis-last_time>=1000){
      stepper(1);
      time=time+micros()-last_time;
      last_time=micros();
      steps_left--;
    }
  }

  delay(2000);
  Direction=!Direction;
  steps_left=4095;
}

void stepper(int xw){
  for (int x=0;x<xw;x++){
    switch(Steps){
      case 0:
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);
        break;
      case 1:
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, HIGH);
        break;
      case 2:
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);
        break;
      case 3:
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, HIGH);
        digitalWrite(IN4, LOW);
        break;
      case 4:
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        break;
      case 5:
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, HIGH);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        break;
      case 6:
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        break;
      case 7:
        digitalWrite(IN1, HIGH);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, HIGH);
        break;
      default:
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        break;
    }
    SetDirection();
  }
}

void SetDirection(){
  if(Direction==1){ Steps++;}
  if(Direction==0){ Steps--; }
  if(Steps>7){ Steps=0; }
  if(Steps<0){ Steps=7; }
}
            
        

Johnny-Five

        
          import five from 'johnny-five';
          const board = new five.Board();

          board.on( 'ready', function() {
            const stepper = new five.Stepper( {
              type: 4,
              stepsPerRev: 48,
              rpm: 15000,
              pins: [ 8, 9, 10, 11 ],
            } );

            const loop = ( dir ) => {
              stepper.step( { steps: 4096, direction: dir }, loop.bind( null, !dir ) );
            }

            loop( 0 );
          } );
        
      

Johnny-Five

Are robots fun?

Thanks!

Some links for the end

http://pigam.es/MathRobot

https://github.com/PiGames/MathRobot-arduino

https://github.com/PiGames/MathRobot-frontend

https://github.com/PiGames/MathRobot-backend

http://johnny-five.io/