Jag tänkte göra en godismaskin. I denna maskin ska man kunna lägga t.ex. runda godisar som enkelt kan rulla ned för någon sorts ramp inuti maskinen och sedan då man skriver in en kod ska en servo styras och en godis trilla ut. Målet är att få en servo att styras om man skriver in rätt kod.
Material:
- Servo
- Arduino
- Nummerplatta
- Kablar
- Pafflåda och paff överlag som ska användas till att t.ex. bygga banor för godisen att rulla. EDIT: Jag har kommit fram till att jag gör min godismaskin av akryl istället och banorna där godisen ska rulla gör jag av plaströr.
- Godis
Först ska jag få en servo att styras genom att man skriver in rätt slags kod. Efter det ska jag börja göra själva lådan där godisarna ska finnas.
Koden hittade jag här: https://makerprojekt.wordpress.com/portfolio/29-keypad/
#include <Keypad.h> const byte numRows= 4; //number of rows on the keypad const byte numCols= 4; //number of columns on the keypad //keymap defines the key pressed according to the row and columns just as appears on the keypad char keymap[numRows][numCols]= { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; //Code that shows the the keypad connections to the arduino terminals byte rowPins[numRows] = {9,8,7,6}; //Rows 0 to 3 byte colPins[numCols]= {5,4,3,2}; //Columns 0 to 3 //initializes an instance of the Keypad class Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols); void setup() { Serial.begin(9600); } void loop() { char keypressed = myKeypad.getKey(); if (keypressed != NO_KEY) { Serial.print(keypressed); } }
Nu ska jag få en servo att styras genom att man skriver in rätt kod.
Koden här under är den uppdaterade koden som får en servo att styras från 0 grader till 90 grader och tillbaks till 0.
#include <Servo.h> #include <Keypad.h> Servo myservo; const byte numRows= 4; //number of rows on the keypad const byte numCols= 4; //number of columns on the keypad //keymap defines the key pressed according to the row and columns just as appears on the keypad char keymap[numRows][numCols]= { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; //Code that shows the the keypad connections to the arduino terminals byte rowPins[numRows] = {9,8,7,6}; //Rows 0 to 3 byte colPins[numCols]= {5,4,3,2}; //Columns 0 to 3 //initializes an instance of the Keypad class Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols); void setup() { Serial.begin(9600); myservo.attach(11); myservo.write(0); } void loop() { char keypressed = myKeypad.getKey(); //hämta tryckningen och spara if (keypressed == '1') //om man tryckt på '1' { myservo.write(90); delay(500); myservo.write(0); } }
Nu har jag gjort den slutgiltiga koden som innehåller fyrsiffrig kod istället för bara en ensiffrig. Jag har även byggt en pafflåda där alla sladdar ska finnas och en akryllåda där godisarna ska finnas. Nu återstår det att få in ett rör i pafflådan och sedan montera fast servon. Här är den slutgiltiga koden:
/* code by Maker based on http://playground.arduino.cc/Code/Keypad http://musicdiver.com/wordpress/2013/01/keypad-code-lock-with-arduino/ */ #include <Keypad.h> // include keypad library by Stanley & Brevig #include <Servo.h> // include servo library char secretCode[] = {"2018A"}; // set password int antal = sizeof(secretCode) - 1; // count password characters int place = 0; // keep track of element in password array const byte rows = 4; const byte cols = 4; char keys[rows][cols]= { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; byte rowPins[rows] = {9,8,7,6}; // Rows 0 to 3 byte colPins[cols]= {5,4,3,2}; // Columns 0 to 3 Servo myservo; Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols); void setup() { myservo.attach(11); // attach servo signal to pin 11 Serial.begin(9600); // serial comm. only for debugging purposes myservo.write(0); // start servo at default position Serial.println("CanDy MachINE ................ 2018"); Serial.println(""); } void loop() { char key = keypad.getKey(); if (key == '*' || key == '#') { place = 0; Serial.print(place); Serial.println(" *#"); } else if(place == antal) { Serial.println("----- GIVE CANDY -----"); myservo.write(90); delay(1000); myservo.write(0); place = 0; } else if(key == '\0') { //Serial.println("Null character"); } else if (key != secretCode[place]) { place = 0; Serial.print(place); Serial.println(" invalid pass"); } else if (key == secretCode[place]) { place++; Serial.print(place); Serial.println(" correct pass"); } delay(50); }