WeKnow - Noisebridge collective knowledge bank
Noisebridge is affiliated with many knowledgable people in many disciplines. We should categorize and standardize these disciplines so that it is possible for anyone in our community to evaluate themselves against the totality of knowledge in a given discipline.
Simply put, we should make lists of what people know, so that anyone can learn it. This will happen because people will discover where they're at relative to others in the Noisebridge community, and will be able to decide who to learn from, or whether they should offer themselves as a teacher.
 Disciplines of knowledge in WeKnow
- Following are the different topics covered by WeKnow, with quiz questions based on the knowledge we have on them.
- To test yourself (or someone else), copy the questions into a text file and then insert your best answers.
- Look at the real answers posted later in this wiki, and compare those answers with your own.
- For each answer, give a percentage of how correct the answer was.
- Add all the percentages and divide by the number of QUESTIONS (even if you did not answer all of them).
- This will give you a percentage of mastery of the topic relative to others who have taken the test.
- If you feel that a "correct" answer is lacking content that should be considered correct, please ADD your version of the correct answer but don't delete other answers without talking to other editors first. Adding commentary about other answers is OK but keep it short and simple.
- If you consider yourself informed about a subject and want to add questions and answers, keep the questions compatible with the method of testing being used, and provide enough correct answers that the grader will be able to tell if the given answer was sufficiently Correct.
- If you want to create another category of knowledge, make sure to find at least one other person to collaborate with, so you can check each other's answers and add enough answers to educate and inspire people taking that test.
- How do you put a program onto an Arduino (or Boarduino)?
- What is the basic difference between an actual "Arduino" and a Boarduino?
- What three types of input/output pins does an Arduino have?
- What three software calls (subroutines) are used in the Blink program?
- What Hardware (Microcontroller) is most commonly used in an Arduino?
- What can be controlled or activated or communicated by its output pins?
- What can be input/sensed with its input pins?
- What kinds of subsystems can an Arduino easily be connected to?
- What is the easiest way to use the Timer in an Arduino?
- What can Interrupts be used for?
- How do you set up a hardware interrupt subroutine?
- How do you configure Timer2 to output a 40KHz squarewave on a pin?
To see the "correct" answers, scroll down to Arduino Answers
 Electronic Components
 Replicators and MakerBots
 Version Control / Source Control
- What is version control and why should you use it? see answer
- Which version control system should be used? see answer
- How do you set up a git resopitory? Example in git
- How do you Push a local repo created on your laptop to your server. Example in git
- How do you Change the commit message of your last commit. Example in git
- How do you Undo all uncommitted changes and switch to the latest committed revision. Then, restore the local uncommitted changes. Example in git
Here are the answers to the questions above. If you disagree with the answers, add your comments to the answers but please don't delete knowledge without talking to other editors.
 Arduino Answers
- Connect the Arduino to the computer with a USB cable, or connect your Boarduino using an FTDI or similar cable, make sure its serial port is recognized (you may have to download drivers), then, using the Arduino software program click "Upload" (or use a fancy commandline method under unix).
- The actual "Arduino" has a USB serial interface on-board, so it plugs into the computer with just a USB cord. A Boarduino has six pins which include power and serial data, and connects to the computer through a USB-to-serial converter cable like the "FTDI cable" or equivalent. Also a Boarduino is cheaper.
- An Arduino has regular Digital pins, Analog pins (can also be used as digital pins) and PWM pins (can be used with analogWrite or Timer stuff)
- Blink (the example program) uses pinMode, digitalWrite, and delay.
- (a) An Arduino or Boarduino is most likely to use an ATMEGA328, second to the ATMEGA168 chip. (b) Typically an 8-bit AVR although other architectures may be used, such as the ARM Cortex-M3 (Leaf Maple board from Seeed Studio).
- (a) Output pins can light LEDs, make speakers make sounds, activate transistors or optocouplers, and the Serial TX pin can send 8-bit data. (b) Outputs can drive anything that responds to an electrical signal. If the signal required is greater than the voltage or amperage a pin can deliver, some external logic such as transistors may be required.
- Input pins can detect logic high/low levels, can interface with buttons or switches connected to ground (if the chip's pull-up resistor enabled), and Analog Input pins can measure voltages up to 5v to ten bits of resolution. The Serial RX pin can recieve 8-bit data.
- Arduinos can easily connect to a SecureDigital memory card, various Ethernet shields, Real-Time clock chips, PS2 keyboards, Liquid Crystal Displays (LCDs), anything with an I2C or SPI or Serial interface, R/C Hobby servos, and many other things.
- The easiest ways to use the hardware Timer of an Arduino include using the millis() function, or delay() function, or analogWrite() function.
- Interrupts be used to trigger a subroutine when an input pin goes high, goes low, or changes state, or when a hardware timer overflows.
- The easiest way to set up a hardware interrupt subroutine is using the attachInterrupt() function. The hard way is to name the subroutine according to the AVR Vector Name (google it) and then enable the interrupt using register bits. Don't forget to clear and set the Global Interrupt Enable flag in your subroutine.
- You can't do this with the setPwmFrequency() function without changing the CLKPR bits from the default Arduino setting.