Godismaskin

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/

29-keypad1511180564364-1852869998 (1)

#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:

20180319_13173620180319_131808

/*
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);
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s