Hugbot - en mjuk Robot som ger små kramar (4 / 8 steg)
Steg 4: nu för elektroniken!
- Ladda upp ett program till Arduino att köra steppers när flex sensorn är aktiverad. Min kod är nedan!
- Anslut stepper driver brädorna till stegmotorer och Arduino. Jag använde stift 2, 3, 4 och 5 och stift 8, 9, 10 och 11 för två stepper driver styrelser, men du kan använda vilken stift du gillar och justera koden nedan.
- Bend sensorn har mycket korta ben, så jag lödde långa bitar av solid kabel med benen att utvidga det längre från resten av projektet. Jag använt krympplast (eltejp fungerar också) att skydda anslutningen, som böj sensorn kommer att få mycket användning och jag ville inte benen att bryta.
- Skapa en spänningsavdelare med böj sensor och motstånd: Anslut bend sensorn till 5V på ena sidan och 17.3 kohm motstånd på den andra. Denna gemensamma bör ha ett tredje ben som går till pin A0 på arduino. Anslut sedan den återstående delen av motståndet till Arduino marken.
- Slutligen, testa det ut allt! Böj sensorn och se om motorerna snurra.
Nedan är den Arduino skiss jag används för att styra stegmotorer med flex sensor, och det är också en bifogad fil ovan.
/**
* Kod att vända en stegmotor när en flex sensorn är aktiverad.
*
*
* Flex mäts genom en spänningsavdelare med ett 17.3kohm motstånd och en 2.2"
* flex sensor. Resistorn går till Arduino marken, flex sensorn går till 5V,
* och mitten av skiljelinjen går till A0.
*
* En stepper är kopplad via arduino stift 2, 3, 4 och 5 motsvarar
* styrelsens stepper stift 1N1, 1N2, 1N3 och 1N4. Den andra är på stift 8, 9, 10 och 11.
*/
#include
#define STEPS_PER_MOTOR_REVOLUTION 32
---(Steg per utgående axel redskap minskning)---
#define STEPS_PER_OUTPUT_REVOLUTION 32 * 64 //2048
Stepper stepper1 (STEPS_PER_MOTOR_REVOLUTION, 8, 10, 9, 11);
Stepper stepper2 (STEPS_PER_MOTOR_REVOLUTION, 2, 4, 3, 5);
int STEPS_PER_FLEX = 5; Grader av flex i som vi förutsätter att användaren begär en kram.
int FLEX_THRESHOLD = 20;
int MAX_ROTATION = STEPS_PER_OUTPUT_REVOLUTION;
int MIN_ROTATION = 0;
int currentRotation = 0;
Ingångsstift.
int input = 0;
void setup() {
stepper1.setSpeed(600);
stepper2.setSpeed(600);
}
void loop() {
int sensor = analogRead(input);
Mappa det flex beloppet till en vinkel mellan 0 och 90 grader.
Min och max här är från observation och bör uppdateras för varje hugbot.
int flex = karta (sensor, 470, 200, 0, 90);
int rotationAmt = 0;
Beräkna om vi bör rotera beroende på mängden flex.
Rotera bara STEPS_PER_FLEX samtidigt för att upprätthålla en reaktiv utseende.
om (flex > FLEX_THRESHOLD) {
rotationAmt = min (MAX_ROTATION - currentRotation, STEPS_PER_FLEX);
} annat {
rotationAmt = -1 * min (currentRotation - MIN_ROTATION, STEPS_PER_FLEX);
}
om (rotationAmt! = 0) {
currentRotation += rotationAmt; Flytta armar i motsatta riktningar.
stepper1.Step(rotationAmt);
stepper2.Step(-rotationAmt);
}
}