X-Git-Url: http://challenge-bot.com/repos/?p=challenge-bot;a=blobdiff_plain;f=bill-of-materials.rkt;h=cb1f2432936d64b0b77a074f0505182cc937b207;hp=a44b7e91d767137905c6a82a58055ecac19384ac;hb=cda2696c27471566a3ff23c6aa9bd64a7dc6c9f3;hpb=4a74ab52028ee62dc213b3394556d9ff28746a8e diff --git a/bill-of-materials.rkt b/bill-of-materials.rkt index a44b7e9..cb1f243 100755 --- a/bill-of-materials.rkt +++ b/bill-of-materials.rkt @@ -4,42 +4,257 @@ (module+ main (displayln total-cost)) -(struct item (description quantity unit-cost max-lead-days where-to-get)) +;; the robot is made of a bunch of items, like a screw or a motor. +;; this is a description of items in general. +(struct item + (;; each item has a natural language description what the part is. + description + + ;; how many units of this item are on a single robot + quantity + + ;; how much does a single unit of these items cost + unit-cost + + ;; how many days will it take to get the item + max-lead-days + + ;; how to obtain the item + where-to-get + + ;; any special notes about the item + note)) + +;; estimate of the cost of pla in dollars per cubic centimeter +(define pla-$/cm^3 + ;; this cost is an estimate taken from this site + ;; http://www.toybuilderlabs.com/ + ;; blogs/news/13053117-filament-volume-and-length + (/ 25 800)) + +;; usually, the above code would be enough for describing a bunch of +;; items. unfortunately, the last argument, for the parameter 'note', +;; must be supplied in the default item constructor created above. +;; this constructor below, called 'make-item', allows creating +;; items without supplying the argument for the parameter 'note'. if +;; the 'note' argument is not supplied, it will be replaced by the +;; empty string, "". +(define (make-item + description quantity unit-cost max-lead-days where-to-get + [note ""]) + (item description quantity unit-cost max-lead-days where-to-get note)) + +;; TODO: add sonar sensor cable making supplies +;; TODO: add actual cost for screws, nuts, and other estimated parts +;; TODO: add male-female jump wires for connecting sonar sensors +;; TODO: add ball caster +;; TODO: checkout the following, if it's not a fraud, buy for next class +;;; (string-append +;;; "http://www.ebay.com/itm/UNO-R3-Development-Board-MEGA328P-" +;;; "ATMEGA16U2-For-Arduino-Compatible-USB-Cable/201090526898") +;;; only $9.99 for arduino uno r3 + usb!! (define bill-of-materials (list - (item "Arduino(tm) board" - 1 21 8 (string-append "http://store.mp3car.com/" - "Genuine_Arduino_Uno_R3_SMD_p/OPN-013B.htm" - "?gclid=CKizyYOKsrkCFap7Qgod9kgAOQ")) - (item "USB a to b" 1 4 7 "https://www.sparkfun.com/products/512") - (item "wheel" 2 3 7 "http://www.pololu.com/catalog/product/184") - (item "motor" 2 6 7 "http://www.pololu.com/catalog/product/181") - (item "half BreadBoard" 1 5 3 "http://www.adafruit.com/products/64") - (item "jumper wire male/male assorted lengths" - 1 6 3 "http://www.adafruit.com/products/153") - (item "jumper wire female/male" 1/5 6 2 - (string-append "http://www.nexuscyber.com/" - "7-premium-40-pin-male-to-female-jumper-wires")) - (item "small squares of double sided tape" - 1/30 12 1 - (string-append - "http://www.officedepot.com/" - "a/products/495242/Scotch-Permanent-Double-Sided-Foam-Tape/")) - (item "#4-40 Phillips 1 1/4 inch flat-head screws" - 3 .1 1 "home depot, lowes") - (item "#4-40 hex nuts" - 6 .1 1 "home depot, lowes") - (item "#4 lock washers" - 3 .1 1 "home depot, lowes") - (item "Red LEDs" - 2 .1 1 "evil mad science?") - (item "Yellow LEDs" - 2 .1 1 "evil mad science?") - (item "Green LEDs" - 2 .1 1 "evil mad science?") - (item "330 Ohm Resistors" - 6 .1 1 "evil mad science?"))) + ;; the construction of the first item is heavily commented. + ;; the higher amount of commenting is intended to make it clear + ;; how the code works to new readers + (make-item (string-append + ;; this is the argument for the parameter 'description'. + ;; it's a description of the orange wire. this is for + ;; documentation. + "solid core orange 22 awg wire, male-male jump wire." + " units in mm. makes electrical connection between" + " arduino and motor controller, used for backwards" + " enabling.") + + ;; this is the argument for the parameter 'quantity'. + ;; this is the number of millimeters of orange wire + ;; in a single robot kit. + ;; there are 2 orange wires, one for each motor. + ;; the 120 mm wire reaches to the far side of the + ;; motor controller + (+ 120 90) + + ;; this is the argument for the parameter 'unit-cost'. + ;; the cost on jameco is 7.95 for 100 feet. + ;; this calculation converts from dollars per foot to + ;; dollars per millimeter. + ;; there are 100 feet, 12 inches per foot, 2.54 cm / inch, + ;; and 10 mm / cm. + ;; the product of all these numbers is the number of + ;; millimeters purchased with $7.95 + (/ 7.95 (* 100 12 2.54 10)) + + ;; this is the argument for the parameter 'max-lead-days'. + ;; since the part is at jameco, i can pick it up same day. + 1 + + ;; this is the argument for the parameter 'where-to-get'. + ;; it is a url where the part can be purchased. + (string-append + "http://www.jameco.com/webapp/wcs/stores/servlet/Product" + "_10001_10001_2154871_-1")) + + (make-item (string-append + "solid core blue 22 awg wire, male-male jump wire." + " units in mm. connects motor controller and arduino," + " used for forwards enabling.") + (+ 120 90) + (/ 7.95 (* 100 12 25.4)) + 1 + (string-append + "http://www.jameco.com/webapp/wcs/stores/servlet/Product" + "_10001_10001_36768_-1")) + (make-item (string-append + "solid core white 22 awg wire, male-male jump wire." + " units in mm. connects motor controller and arduino," + " used for speed signal.") + (+ 120 90) + ;; cost of 1 mm + (/ 7.95 (* 100 12 25.4)) + 1 + (string-append + "http://www.jameco.com/webapp/wcs/stores/servlet/Product" + "_10001_10001_36881_-1") + (string-append "unit cost goes down for large orders," + " see page for specifics")) + (make-item (string-append + "solid core green 22 awg wire, male-male jump wire." + " units in mm. connects motor to breadboard.") + (* 2 175) + (/ 7.95 (* 100 12 25.4)) + 1 + (string-append + "http://www.jameco.com/webapp/wcs/stores/servlet/Product" + "_10001_10001_36822_-1")) + (make-item (string-append + "solid core yellow 22 awg wire, male-male jump wire." + " units in mm. connects motor to breadboard.") + (* 2 175) + (/ 7.95 (* 100 12 25.4)) + 1 + (string-append + "http://www.jameco.com/webapp/wcs/stores/servlet/Product" + "_10001_10001_36920_-1")) + (make-item (string-append + "solid core red 22 awg wire, male-male jump wire." + " units in mm. connects power for all components.") + (+ (* 2 30) 25 25) + (/ 7.95 (* 100 12 25.4)) + 1 + (string-append + "http://www.jameco.com/webapp/wcs/stores/servlet/Product" + "_10001_10001_36856_-1")) + (make-item (string-append + "solid core black 22 awg wire, male-male jump wire." + " units in mm. connects ground for all components.") + (+ (* 30 2) (* 4 25) 25 55) + (/ 7.95 (* 100 12 25.4)) + 1 + (string-append + "http://www.jameco.com/webapp/wcs/stores/servlet/Product" + "_10001_10001_36792_-1")) + (make-item "9v battery" + 1 1.29 1 + (string-append + "https://www.jameco.com/webapp/wcs/stores/servlet/Product" + "_10001_10001_151095_-1") + "can get in store") + (make-item "9v battery holder" + 1 (/ 1.25 10) 1 + (string-append + "http://www.jameco.com/webapp/wcs/stores/servlet/Product" + "_10001_10001_2128067_-1") + "can get in store") + (make-item "AA battery" + 4 (/ 17.99 100) 1 + "http://www.frys.com/product/6292850" + "can get in store") + (make-item "4xAA battery holder" + 1 2.25 1 + (string-append + "http://shop.evilmadscientist.com/" + "productsmenu/partsmenu/422") + (string-append + "can get in store. unit cost goes down for large orders" + ", see page for specifics.")) + (make-item "angle bracket, 1/2 inch sides with #6-32 threaded hole" + 4 0.75 1 + (string-append + "http://shop.evilmadscientist.com/productsmenu/partsmenu" + "/465-bracket") + (string-append + "can get in store. unit cost goes down for large orders" + ", see page for specifics.")) + (make-item "Arduino(tm) Uno board" + 1 16.98 8 + (string-append + "http://www.colorapples.com/2012-new-arduino-uno-r3-boar" + "d-atmega328-with-usb-cable-p-89818.html#.U3Lz5nJKyzA") + (string-append + "comes with USB A to B cable. unit cost goes down for" + " large orders, see page for specifics.")) + (make-item "gm3 motor 224:1 90 degree shaft" + 2 6 7 + "https://solarbotics.com/product/gm3/") + (make-item "transparent 400 point (half) BreadBoard" + 1 5.95 1 + (string-append + "http://www.jameco.com/webapp/wcs/stores/servlet/" + "Product_10001_10001_2123830_-1")) + (make-item "jumper wire female/male" 1/5 6 2 + (string-append "http://www.nexuscyber.com/7-premium-40-" + "pin-male-to-female-jumper-wires")) + (make-item "deck 8x8 inches" + 1 + ;; cost of entire 24x48 inch pegboard is 55.25 + ;; each deck is only 8x8 inch + (/ 55.25 (* (/ 24 8) (/ 48 8))) + 1 + (string-append + "http://www.homedepot.com/p/" + "Triton-1-4-in-Custom-Painted-Blissful-White-Pegboard" + "-Wall-Organizer-Set-of-2-TPB-2W/205192313#specifications")) + (make-item "small squares of double sided tape" + 1/30 12 1 + (string-append + "http://www.officedepot.com/a/products/495242/" + "Scotch-Permanent-Double-Sided-Foam-Tape/")) + ;; TODO: get actual cost of #4-40 phillips 1&1/4" screws + (make-item "#4-40 Phillips 1 pan stl zn cr3, magnetic" + 4 0.1 1 + "olander PN:4C100PPMZR" + "price is an estimate. can pick up in person") + ;; TODO: get actual cost of #4-40 hex lock nuts + (make-item "#4-40 hex lock nuts" + 6 0.1 1 + "olander" "price is an estimate. can pick up in person") + ;; TODO: get actual cost of #6-32 3/8" screws + (make-item "#6-32 button hex head socket 3/8 inch" + 12 0.1 1 + "olander" "price is an estimate. can pick up in person") + (make-item "motor controller" + 1 (/ 5.2 5) 10 + "http://www.ebay.com/itm/like/180976411359?lpid=82") + (make-item "sonar sensor hc-sr04" + 2 1.39 7 + "http://www.ebay.com/itm/161156018270") + (make-item "caster standoff" + 1 (* 8.2 pla-$/cm^3) 1 + "3d print at home") + (make-item "wheel" + 2 (* 11.3 pla-$/cm^3) 1 + "3d print at home") + (make-item "deck holder" + 2 (* 4.0 pla-$/cm^3) 1 + "3d print at home") + (make-item "sonar holder" + 2 (* 2.4 pla-$/cm^3) 1 + "3d print at home" "price of filament is an estimate") + (make-item "motor mount" + 2 (* 3.1 pla-$/cm^3) 1 + "3d print at home"))) (define total-cost (apply + (for/list ([thing bill-of-materials])