Skip to content

Instantly share code, notes, and snippets.

@pebreo
Last active December 23, 2020 10:52
Show Gist options
  • Save pebreo/74804be7a579a6e722f7 to your computer and use it in GitHub Desktop.
Save pebreo/74804be7a579a6e722f7 to your computer and use it in GitHub Desktop.
Arduino motor driver control
#PyBoard
# screen /dev/tty.usbmodem*

# Servo Example 
# http://docs.micropython.org/en/latest/pyboard/tutorial/servo.html
import pyb
s1 = pyb.Servo(1) # pin X1
s1.angle(45)

s1.angle(60, 2000) # take 2 seconds
s1.speed(30)


// Arduino
//ir remote



#include <IRremote.h>

int enA = 2; // right
int enB = 5; //left

int pinA1 = 8; 
int pinA2 = 9;

int pinB1 = 10;
int pinB2 = 11;

int RECV_PIN = 7;



IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver

  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(pinA1, OUTPUT);
  pinMode(pinA2, OUTPUT);
  pinMode(pinB1, OUTPUT);
  pinMode(pinB2, OUTPUT);
  
  digitalWrite(enA, HIGH);
  digitalWrite(enB, HIGH);
}

void loop() {
  if (irrecv.decode(&results)) {
    //Serial.println(results.value, HEX);
    handle_codes();
    irrecv.resume(); // Receive the next value
  }
  delay(10);
}

void rightForward()
{
  digitalWrite(pinA1, LOW);
  digitalWrite(pinA2, HIGH);
  delay(1);
}


void rightBackward()
{
  digitalWrite(pinA1, HIGH);
  digitalWrite(pinA2, LOW);
  delay(1);
}

void leftForward()
{
   digitalWrite(pinB1, HIGH);
   digitalWrite(pinB2, LOW);
   delay(1);
}

void leftBackward()
{
   digitalWrite(pinB1, LOW);
   digitalWrite(pinB2, HIGH);
   delay(1);
}

void leftBrake()
{
  
   digitalWrite(pinB1, HIGH);
   digitalWrite(pinB2, HIGH);
   delay(1);  
}

void rightBrake()
{
   digitalWrite(pinA1, HIGH);
   digitalWrite(pinA2, HIGH);
   delay(1);  
  
}


void handle_codes()
{
  switch(results.value)
  {

    case 0x1E108:
      Serial.println("up");
      rightForward();
      leftForward();
      break;
    case 0x9E108:
      Serial.println("down");
      leftBackward();
      rightBackward();
      break;
    case 0x5E108:
      Serial.println("left");
      leftBackward();
      rightForward();
      break;
    case 0xDE108:
      Serial.println("right");
      rightBackward();
      leftForward();
      break;
    case 0x3E108:
      Serial.println("center");
      leftBrake();
      rightBrake();
      break;
    default: 
      Serial.println(results.value, HEX);
  }
  delay(10);
}

// xbox receiver
//http://www.instructables.com/id/Xbox-360-Wireless-Arduino/?ALLSTEPS
/*
 Example sketch for the Xbox Wireless Reciver library - developed by Kristian Lauszus
 It supports up to four controllers wirelessly
 For more information see the blog post: http://blog.tkjelectronics.dk/2012/12/xbox-360-receiver-added-to-the-usb-host-library/ or
 send me an e-mail:  kristianl@tkjelectronics.com
 */

#include <XBOXRECV.h>

// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif

int enA = 2;
int enB = 3;

int in1 = 8;
int in2 = 9;
int in3 = 10;
int in4 = 11;

USB Usb;
XBOXRECV Xbox(&Usb);

void setup() {
  Serial.begin(115200) ;
  Usb.Init() ; 
  Serial.println( "Begin speed log." ) ;
  
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
    analogWrite(enA, 175);
    analogWrite(enB, 175);
}

void rightFront()
{
  // put your main code here, to run repeatedly:
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);

 
}

void rightBack()
{
  // put your main code here, to run repeatedly:
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);


}

void leftFront()
{
  // put your main code here, to run repeatedly:
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);


}

void leftBack()
{
  // put your main code here, to run repeatedly:
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);


}

/*
void center()
{
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}
*/

void loop() {
Usb.Task();
  if(Xbox.XboxReceiverConnected) 
    {
    for(uint8_t i=0;i<4;i++) 
      {

         
       if(Xbox.getAnalogHat(LeftHatX, i) > 7500 || Xbox.getAnalogHat(LeftHatX, i) < -7500 || Xbox.getAnalogHat(LeftHatY, i) > 7500 || Xbox.getAnalogHat(LeftHatY, i) < -7500 || Xbox.getAnalogHat(RightHatX, i) > 7500 || Xbox.getAnalogHat(RightHatX, i) < -7500 || Xbox.getAnalogHat(RightHatY, i) > 7500 || Xbox.getAnalogHat(RightHatY, i) < -7500) 
         {
          if(Xbox.getAnalogHat(LeftHatX, i) > 7500)
            {
            Serial.print(F("LeftHatX: ")); 
            Serial.print(Xbox.getAnalogHat(LeftHatX, i));
            Serial.print("\t");
             
            if (Xbox.getAnalogHat(LeftHatX, i) > 26000)
              turn_right();
            else
              center();
            }  
       
        if (Xbox.getAnalogHat(LeftHatX, i) < -7500)
          {
          Serial.print(F("LeftHatX: ")); 
          Serial.print(Xbox.getAnalogHat(LeftHatX, i));
          Serial.print("\t");
           
          if (Xbox.getAnalogHat(LeftHatX, i) < -26000)
            turn_left();
          else
            center();   
        }
         
        if(Xbox.getAnalogHat(LeftHatY, i) > 7500 || Xbox.getAnalogHat(LeftHatY, i) < -7500) 
          {
          Serial.print(F("LeftHatY: ")); 
          Serial.print(Xbox.getAnalogHat(LeftHatY, i));
          Serial.print("\t");
          } 
           
        if(Xbox.getAnalogHat(RightHatX, i) > 7500)
          {
          Serial.print(F("RightHatX: ")); 
          Serial.print(Xbox.getAnalogHat(RightHatX, i));
          Serial.print("\t");   
          } 
        
         if (Xbox.getAnalogHat(RightHatX, i) < -7500)
           {
           Serial.print(F("RightHatX: ")); 
           Serial.print(Xbox.getAnalogHat(RightHatX, i));
           Serial.print("\t");
           }
          
        if(Xbox.getAnalogHat(RightHatY, i) > 7500 || Xbox.getAnalogHat(RightHatY, i) < -7500) {
          Serial.print(F("RightHatY: ")); 
          Serial.print(Xbox.getAnalogHat(RightHatY, i));  
        }
        Serial.println();
      }
     
      if(Xbox.getButtonClick(UP, i)) 
        {
        Serial.println(F("Up"));
        }
         
      if(Xbox.getButtonClick(DOWN, i)) 
        {
        Serial.println(F("Down"));
        }
         
      if(Xbox.getButtonClick(LEFT, i)) 
        {
        Serial.println(F("Left"));
        }
         
      if(Xbox.getButtonClick(RIGHT, i)) 
        {
        Serial.println(F("Right"));
        }
 
      if(Xbox.getButtonClick(START, i)) 
        {
        Serial.println(F("Start"));
        }
         
      if(Xbox.getButtonClick(BACK, i)) 
        {
        Serial.println(F("Back"));
        }
       
      if(Xbox.getButtonClick(L3, i))
        Serial.println(F("L3"));
         
      if(Xbox.getButtonClick(R3, i))
        Serial.println(F("R3"));
 
      if(Xbox.getButtonClick(L1, i))
        Serial.println(F("L1"));
         
      if(Xbox.getButtonClick(R1, i))
        Serial.println(F("R1"));
         
      if(Xbox.getButtonClick(XBOX, i)) 
        {
        Xbox.setLedMode(ROTATING, i);
        Serial.println(F("Xbox"));        
        }
 
      if(Xbox.getButtonClick(A, i))
        {
        Serial.println(F("A"));
      }
       
    
       
    if(Xbox.getButtonClick(X, i))
      Serial.println(F("X"));
       
    if(Xbox.getButtonClick(Y, i))
      {
      Serial.println(F("Y"));
      motors_stop();
      }
    }
  } 
  delay(1);
}

void turn_left()
{
  leftBack();   // set leg 1 of the H-bridge low
  rightFront();
}
 
void turn_right()
{
  rightBack();   // set leg 1 of the H-bridge low
  leftFront();
}
 
void motors_stop()
{
  analogWrite(enB,0);
  analogWrite(enA,0);
 
}
 
void center()
{
  leftFront();
  rightFront();
}
L298N

int enA = 2;
int enB = 3;

int in1 = 8;
int in2 = 9;
int in3 = 10;
int in4 = 11;

void setup() {
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
 pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}

void rightFront()
{
  // put your main code here, to run repeatedly:
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  analogWrite(enA, 175);

}

void rightBack()
{
  // put your main code here, to run repeatedly:
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  analogWrite(enA, 175);

}

void leftFront()
{
  // put your main code here, to run repeatedly:
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  analogWrite(enB, 175);

}

void leftBack()
{
  // put your main code here, to run repeatedly:
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  analogWrite(enB, 175);

}



void demoOne() 
{
  //rightFront();
  rightBack();
}

void demoTwo() 
{
  rightBack();
  leftBack();
}

void loop() {
  demoOne();
  delay(1000);
  //demoTwo();
}
//Arduino PWM Speed Control:
int enable_A = 7;  
int motoA_right = 6; 
int motoB_left = 5;                                              
 
void setup() 
{ 
    pinMode(enable_A, OUTPUT);    
} 
 
void loop() 
{ 
 digitalWrite(enable_A, LOW);
 //analogWrite(motoB_left, 100);
}

void forward()
{
  analogWrite(motoA_right, 0);
  analogWrite(motoB_left, 0);
}

Terminology

microUSB, USB, USB B
2.1mmx5mm DC connector or 2.1mm DC connector
JST-PH connector
power header
buck converter aka voltage step down converter (lowers voltage)
boost converter (increases voltage)

**buck converter** vs **voltage regulator** (aka linear voltage regulator) - 
 voltage regulator is less efficient converting ecess power to heat and can overheat thereby stopping the flow of electricity
 the buck converter is more expensive but more efficient

perf board
bread board
IC - intergrated circuit
op amp - ?
inductor - steadies current
capacitor - steadies voltage

ESC - electronic speed control - for hobby like race cars and quadropters
BEC - battery eliminator circuit - steps down voltage from batteries (ususally LiPo) down to 5V or whatever

60/40 solder with rosin core - 60% tin, 40% lead?

24 AWG (gauge) solid core wire
28 AWG braided wire (7 @ 36 or 7/36 or 7 braids at 36 gauge)

Arduino UNO - 7-12v recommended. but can run 5v from battery but that is unstable. via USB B or 2.1mm.
reference: https://www.arduino.cc/en/Main/ArduinoBoardUno

Raspberry Pi 2 B - 5V only microUSB
reference: https://www.raspberrypi.org/help/faqs/#powerReqs

LiPo battery terminology


C-rating (discarge rating) - "how big the hose is". how much current can be outputted at a given time
 calculating current discharged = N * C -> e.g. 20C -> 20 * 2000mAh = 20 * 2 = 40Amps 
 burst rating - peak ampere output over short amount of time e.g. 30C -> 30 * 5 = 150A over 10 seconds
 
Capacity (mAh) - "how much water the bucket holds" 
  e.g. 1300mAh - it will discharge 1300mA over an hour then the battery will be drained
  
Voltage - "water pressure"

Cell count - e.g. 2S is 2 cells

SolidWorks terminology


stretch tool
deform tool



collaborate? -> mirroring



extrusion
fill about rotation
hole wizar
relationships
formulas/constants

planes


chamfer
rounder

drawing parts
1 to 1 drawing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment