``` #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 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 // Satisfy the IDE, which needs to see the include statment in the ino too. #ifdef dobogusinclude #include #include #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 ```