bluer-sbc 8.188.1__py3-none-any.whl → 9.168.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. bluer_sbc/.abcli/actions.sh +3 -0
  2. bluer_sbc/.abcli/alias.sh +2 -2
  3. bluer_sbc/.abcli/{blue_sbc.sh → bluer_sbc.sh} +2 -0
  4. bluer_sbc/.abcli/rpi.sh +1 -1
  5. bluer_sbc/.abcli/sbc/parts/adjust.sh +14 -0
  6. bluer_sbc/.abcli/sbc/parts/cd.sh +5 -0
  7. bluer_sbc/.abcli/sbc/parts.sh +15 -0
  8. bluer_sbc/.abcli/seed/rpi_64_bit.sh +36 -0
  9. bluer_sbc/.abcli/tests/help.sh +7 -3
  10. bluer_sbc/.abcli/tests/parts_adjust.sh +13 -0
  11. bluer_sbc/README/aliases.py +11 -0
  12. bluer_sbc/README/build.py +29 -0
  13. bluer_sbc/README/design.py +40 -0
  14. bluer_sbc/README/designs/__init__.py +26 -0
  15. bluer_sbc/README/designs/adapter_bus.py +59 -0
  16. bluer_sbc/README/designs/battery_bus.py +52 -0
  17. bluer_sbc/README/designs/bryce.py +28 -0
  18. bluer_sbc/README/designs/cheshmak.py +29 -0
  19. bluer_sbc/README/designs/nafha.py +57 -0
  20. bluer_sbc/README/designs/shelter.py +63 -0
  21. bluer_sbc/README/designs/swallow.py +46 -0
  22. bluer_sbc/README/designs/swallow_head.py +89 -0
  23. bluer_sbc/README/designs/template.py +38 -0
  24. bluer_sbc/{designs → README/designs}/ultrasonic_sensor_tester.py +11 -10
  25. bluer_sbc/README/parts.py +29 -0
  26. bluer_sbc/README/root.py +33 -0
  27. bluer_sbc/README/shortcuts.py +18 -0
  28. bluer_sbc/__init__.py +2 -2
  29. bluer_sbc/__main__.py +3 -2
  30. bluer_sbc/config.env +1 -1
  31. bluer_sbc/env.py +4 -0
  32. bluer_sbc/help/functions.py +2 -0
  33. bluer_sbc/help/parts.py +49 -0
  34. bluer_sbc/help/rpi.py +2 -1
  35. bluer_sbc/parts/__init__.py +0 -0
  36. bluer_sbc/parts/__main__.py +48 -0
  37. bluer_sbc/parts/classes/db.py +233 -0
  38. bluer_sbc/parts/classes/part.py +96 -0
  39. bluer_sbc/parts/consts.py +3 -0
  40. bluer_sbc/parts/db.py +619 -0
  41. bluer_sbc-9.168.1.dist-info/METADATA +73 -0
  42. {bluer_sbc-8.188.1.dist-info → bluer_sbc-9.168.1.dist-info}/RECORD +48 -24
  43. bluer_sbc/README.py +0 -75
  44. bluer_sbc/designs/bluer_swallow.py +0 -26
  45. bluer_sbc/designs/bryce.py +0 -25
  46. bluer_sbc/designs/cheshmak.py +0 -25
  47. bluer_sbc-8.188.1.dist-info/METADATA +0 -63
  48. /bluer_sbc/{designs → README}/__init__.py +0 -0
  49. /bluer_sbc/{designs → README/designs}/blue_bracket.py +0 -0
  50. /bluer_sbc/{designs → README/designs}/consts.py +0 -0
  51. {bluer_sbc-8.188.1.dist-info → bluer_sbc-9.168.1.dist-info}/WHEEL +0 -0
  52. {bluer_sbc-8.188.1.dist-info → bluer_sbc-9.168.1.dist-info}/licenses/LICENSE +0 -0
  53. {bluer_sbc-8.188.1.dist-info → bluer_sbc-9.168.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,96 @@
1
+ from typing import List, Union
2
+ import copy
3
+
4
+ from bluer_objects import markdown
5
+ from bluer_objects import file
6
+
7
+
8
+ class Part:
9
+ def __init__(
10
+ self,
11
+ info: Union[List[str], str] = [],
12
+ name: str = "",
13
+ images: List[str] = [],
14
+ ):
15
+ self.name = name
16
+
17
+ self.info = (
18
+ copy.deepcopy(info)
19
+ if isinstance(
20
+ info,
21
+ list,
22
+ )
23
+ else [info]
24
+ )
25
+
26
+ self.images = (
27
+ copy.deepcopy(images)
28
+ if isinstance(
29
+ images,
30
+ list,
31
+ )
32
+ else [images]
33
+ )
34
+
35
+ def filename(
36
+ self,
37
+ create: bool = False,
38
+ ) -> str:
39
+ reference = file.path(__file__)
40
+ filename = file.absolute(
41
+ f"../../docs/parts/{self.name}.md",
42
+ reference,
43
+ )
44
+
45
+ if not create or file.exists(filename):
46
+ return filename
47
+
48
+ template_filename = file.absolute(
49
+ "../../docs/parts/template-template.md",
50
+ reference,
51
+ )
52
+ assert file.copy(
53
+ template_filename,
54
+ file.add_suffix(filename, "template"),
55
+ log=True,
56
+ ), template_filename
57
+
58
+ return filename
59
+
60
+ def image_url(
61
+ self,
62
+ url_prefix: str,
63
+ filename: str = "",
64
+ ) -> str:
65
+
66
+ return (
67
+ "{}/{}?raw=true".format(
68
+ url_prefix,
69
+ filename if filename else self.images[0],
70
+ )
71
+ if self.images
72
+ else ""
73
+ )
74
+
75
+ def README(
76
+ self,
77
+ url_prefix: str,
78
+ ) -> List[str]:
79
+ return [f"- {info}" for info in self.info] + (
80
+ [""]
81
+ + markdown.generate_table(
82
+ [
83
+ "![image]({})".format(
84
+ self.image_url(
85
+ url_prefix,
86
+ filename,
87
+ )
88
+ )
89
+ for filename in self.images
90
+ ],
91
+ cols=3,
92
+ log=False,
93
+ )
94
+ if self.images
95
+ else []
96
+ )
@@ -0,0 +1,3 @@
1
+ parts_url_prefix = (
2
+ "https://github.com/kamangir/bluer-sbc/tree/main/bluer_sbc/docs/parts"
3
+ )
bluer_sbc/parts/db.py ADDED
@@ -0,0 +1,619 @@
1
+ from bluer_sbc.parts.classes.part import Part
2
+ from bluer_sbc.parts.classes.db import PartDB
3
+
4
+ db_of_parts: PartDB = PartDB()
5
+
6
+ db_of_parts["resistor"] = Part(
7
+ info=[
8
+ "Resistor, 1/4 watt, 5% tolerance",
9
+ ],
10
+ images=["resistor.png"],
11
+ )
12
+
13
+ db_of_parts["4-ch-transceiver"] = Part(
14
+ info=[
15
+ "4-channel transmitter and receiver",
16
+ "source: [digikala](https://www.digikala.com/product/dkp-11037586/%DA%AF%DB%8C%D8%B1%D9%86%D8%AF%D9%87-%D9%88-%D9%81%D8%B1%D8%B3%D8%AA%D9%86%D8%AF%D9%87-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%DA%A9%D9%86%D8%AA%D8%B1%D9%84%DB%8C-%D9%85%D8%AF%D9%84-4ch-led/)",
17
+ "voltages: receiver 6 VDC, transmitter 3 VDC",
18
+ ],
19
+ images="4-channel-remote-control.png",
20
+ )
21
+
22
+ db_of_parts["470-mF"] = Part(
23
+ info=[
24
+ "capacitor, 470 μF to 1000 μF, 16 V or 25 V, Electrolytic, 105 °C rated if possible."
25
+ ],
26
+ images=["capacitor.png"],
27
+ )
28
+
29
+ db_of_parts["BTS7960"] = Part(
30
+ info=[
31
+ "43 A, H-Bridge Motor Driver",
32
+ "specs: [BTS7960](https://www.handsontec.com/dataspecs/module/BTS7960%20Motor%20Driver.pdf)",
33
+ ],
34
+ images="bts7960.jpg",
35
+ )
36
+
37
+ db_of_parts["dc-motor-12-VDC-45W"] = Part(
38
+ info=[
39
+ "12 VDC motor, 20-45 W",
40
+ "type 1: 9,000 RPM, output ~60 RPM",
41
+ "type 2: 10,000 RPM, output 72 RPM",
42
+ "https://parsbike.com/product/%D9%85%D9%88%D8%AA%D9%88%D8%B1-%DA%AF%DB%8C%D8%B1%D8%A8%DA%A9%D8%B3-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D8%B4%D8%A7%D8%B1%DA%98%DB%8C-%D9%88-%D9%85%D9%88%D8%AA%D9%88%D8%B1-%D8%B4%D8%A7%D8%B1%DA%98%DB%8C/",
43
+ ],
44
+ images=[
45
+ "gearbox1.jpg",
46
+ "gearbox2.jpg",
47
+ "gearbox3.jpg",
48
+ "gearbox4.jpg",
49
+ "gearbox5.jpg",
50
+ "gearbox6.jpg",
51
+ "gearbox7.jpg",
52
+ "gearbox8.jpg",
53
+ ],
54
+ )
55
+
56
+ db_of_parts["LED"] = Part(
57
+ info=[
58
+ "LED, ~2 V forward voltage, 10-20 mA",
59
+ ],
60
+ images=["led.png"],
61
+ )
62
+
63
+ db_of_parts["Polyfuse"] = Part(
64
+ info=[
65
+ "Polyfuse, 1.1 A hold, 2.2 A trip, 16 V, resettable, through-hole, e.g., MF-R110",
66
+ ],
67
+ images=["polyfuse.png"],
68
+ )
69
+
70
+ db_of_parts["rpi"] = Part(
71
+ info=[
72
+ "Raspberry Pi.",
73
+ "3B+ is preferred and 4B is in progress 🔥",
74
+ ],
75
+ images=[
76
+ "rpi3bplus.png",
77
+ "gpio-pinout.png",
78
+ "rpi-measurements.png",
79
+ ],
80
+ )
81
+
82
+ db_of_parts["SLA-Battery"] = Part(
83
+ info=[
84
+ "Rechargeable sealed lead acid battery, 12 V, 7 Ah",
85
+ ],
86
+ images=[
87
+ "battery.png",
88
+ ],
89
+ )
90
+
91
+ db_of_parts["TVS-diode"] = Part(
92
+ info=[
93
+ "TVS diode, unidirectional, 600 W, 6.8 V clamp, e.g. P6KE6.8A, DO-15 package",
94
+ ],
95
+ images=[
96
+ "TVSdiode.png",
97
+ ],
98
+ )
99
+
100
+ db_of_parts["XL4015"] = Part(
101
+ info=[
102
+ "XL4015: 12 VDC -> 5 VDC, 4A",
103
+ "specs: [XL4015](https://www.handsontec.com/dataspecs/module/XL4015-5A-PS.pdf)",
104
+ ],
105
+ images=[
106
+ "XL4015.png",
107
+ ],
108
+ )
109
+
110
+ db_of_parts["rpi-camera"] = Part(
111
+ info=[
112
+ "Raspberry Pi Camera, V1.3"
113
+ "https://www.raspberrypi.com/documentation/accessories/camera.html",
114
+ ],
115
+ images=[
116
+ "rpi-camera.jpg",
117
+ ],
118
+ )
119
+
120
+ db_of_parts["DC-gearboxed-motor-12V-120RPM"] = Part(
121
+ info=[
122
+ "Gearboxed DC Motor, 12 V (3-24 V), 3A, 120 RPM, 1:91, 15 Kg cm",
123
+ "[GM6558](https://www.landaelectronic.com/product/%d9%85%d9%88%d8%aa%d9%88%d8%b1-dc-%da%af%db%8c%d8%b1%d8%a8%da%a9%d8%b3-%d8%ad%d9%84%d8%b2%d9%88%d9%86%db%8c-gm6558/)",
124
+ ],
125
+ images=[
126
+ "GM6558/01.jpg",
127
+ "GM6558/02.jpg",
128
+ "GM6558/03.jpg",
129
+ "GM6558/04.jpg",
130
+ "GM6558/measurements.jpg",
131
+ "GM6558/specs.png",
132
+ ],
133
+ )
134
+
135
+ db_of_parts["2xAA-battery-holder"] = Part(
136
+ info=[
137
+ "2 x AA battery holder",
138
+ ],
139
+ images=[
140
+ "2xAA-battery-holder.jpg",
141
+ ],
142
+ )
143
+
144
+ db_of_parts["4xAA-battery-holder"] = Part(
145
+ info=[
146
+ "4 x AA battery holder",
147
+ ],
148
+ images=[
149
+ "4xAA-battery-holder.jpg",
150
+ ],
151
+ )
152
+
153
+ db_of_parts["PCB-double-9x7"] = Part(
154
+ info=[
155
+ "double-sided PCB, 9 cm x 7 cm",
156
+ ],
157
+ images=[
158
+ "PCB-double-9x7.jpeg",
159
+ ],
160
+ )
161
+
162
+ db_of_parts["PCB-single-14x9_5"] = Part(
163
+ info=[
164
+ "single-sided PCB, 14 cm x 9.5 cm",
165
+ ],
166
+ images=[
167
+ "pcb-14x9_5cm.jpg",
168
+ ],
169
+ )
170
+
171
+ db_of_parts["pushbutton"] = Part(
172
+ info=[
173
+ "push button",
174
+ ],
175
+ images=[
176
+ "pushbutton.png",
177
+ ],
178
+ )
179
+
180
+ db_of_parts["yellow-gearbox-dc-motor"] = Part(
181
+ info=[
182
+ "gearboxed DC motor, 6V DC",
183
+ ],
184
+ images=[
185
+ "yellow-gearbox-dc-motor.png",
186
+ ],
187
+ )
188
+
189
+ db_of_parts["yellow-wheels"] = Part(
190
+ info=[
191
+ "wheels for gearboxed DC motor",
192
+ ],
193
+ images=[
194
+ "yellow-wheels.jpg",
195
+ ],
196
+ )
197
+
198
+ db_of_parts["36v-hub-motor"] = Part(
199
+ info=[
200
+ "36V DC hub motor, 350 W, front, no gearbox",
201
+ "[source](https://samamotor.ir/%D9%87%D8%A7%D8%A8-%D9%85%D9%88%D8%AA%D9%88%D8%B1/5105-%D9%87%D8%A7%D8%A8-%D9%85%D9%88%D8%AA%D9%88%D8%B1-350-%D9%88%D8%A7%D8%AA-36-%D9%88%D9%84%D8%AA-%D8%A8%D8%AF%D9%88%D9%86-%DA%AF%DB%8C%D8%B1%D8%A8%DA%A9%D8%B3-%D8%AF%D9%88%DA%86%D8%B1%D8%AE%D9%87-%D9%85%D8%AE%D8%B5%D9%88%D8%B5-%DA%86%D8%B1%D8%AE-%D8%AC%D9%84%D9%88-.html)",
202
+ ],
203
+ images=[
204
+ "36v-hub-motor.jpg",
205
+ ],
206
+ )
207
+
208
+ db_of_parts["brushless-350w-drive"] = Part(
209
+ info=[
210
+ "brushless drive, 36 - 48 V DC, 350 W, sine wave, silent",
211
+ "[source](https://samamotor.ir/%D8%AF%D8%B1%D8%A7%DB%8C%D9%88%D8%B1-%D9%85%D9%88%D8%AA%D9%88%D8%B1-%D8%A8%D8%B1%D8%A7%D8%B4%D9%84%D8%B3-bldc/4821-%D8%AF%D8%B1%D8%A7%DB%8C%D9%88%D8%B1-%D8%A8%D8%B1%D8%A7%D8%B4%D9%84%D8%B3-36-48-%D9%88%D9%84%D8%AA-350-%D9%88%D8%A7%D8%AA-sine-wave-silent.html)",
212
+ ],
213
+ images=[
214
+ "brushless-350w-drive.jpg",
215
+ ],
216
+ )
217
+
218
+ db_of_parts["LJ-6V-battery"] = Part(
219
+ info=[
220
+ "6V DC (4 cell) NICD battery",
221
+ "https://www.digikala.com/product/dkp-3213588/%C3%98/",
222
+ ],
223
+ images=[
224
+ "LJ-6V-battery.jpg",
225
+ ],
226
+ )
227
+
228
+
229
+ db_of_parts["USB-charger-NICD-6V"] = Part(
230
+ info=[
231
+ "6V DC charger for NICD batteries",
232
+ "https://www.digikala.com/product/dkp-5977954/%D8%B4%D8%A7%D8%B1%DA%98%D8%B1-%D8%A8%D8%A7%D8%AA%D8%B1%DB%8C-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%DA%A9%D9%86%D8%AA%D8%B1%D9%84%DB%8C-%D9%85%D8%AF%D9%84-6-%D9%88%D9%84%D8%AA-%DA%A9%D8%AF-6v-usb-sm-%D8%A8%D9%87-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D8%B3%D9%88%DA%A9%D8%AA-sm-%D8%AF%D9%88-%D9%BE%DB%8C%D9%86/",
233
+ ],
234
+ images=[
235
+ "USB-charger-NICD-6V-1.jpg",
236
+ "USB-charger-NICD-6V-2.jpg",
237
+ ],
238
+ )
239
+
240
+ db_of_parts["L-1x2"] = Part(
241
+ info=[
242
+ "L 1x2",
243
+ "https://robotexiran.com/product/%d8%a8%d8%b3%d8%aa-21-l/",
244
+ ],
245
+ images=[
246
+ "L-1x2-1.jpg",
247
+ "L-1x2-2.jpg",
248
+ ],
249
+ )
250
+
251
+ db_of_parts["shaft-10cm"] = Part(
252
+ info=[
253
+ "shaft, 10 cm",
254
+ "https://robotexiran.com/product/%d9%85%d8%ad%d9%88%d8%b1-10cm/",
255
+ ],
256
+ images=[
257
+ "shaft-10cm.jpg",
258
+ ],
259
+ )
260
+
261
+ db_of_parts["M3"] = Part(
262
+ info=[
263
+ "M3 nuts and bolts",
264
+ ],
265
+ images=[
266
+ "M3.jpg",
267
+ ],
268
+ )
269
+
270
+ db_of_parts["front-connector"] = Part(
271
+ info=[
272
+ "front connector",
273
+ ],
274
+ images=[
275
+ "front-connector.jpg",
276
+ ],
277
+ )
278
+
279
+ db_of_parts["front-wheels"] = Part(
280
+ info=[
281
+ "front wheels",
282
+ ],
283
+ images=[
284
+ "front-wheels.jpg",
285
+ ],
286
+ )
287
+
288
+ db_of_parts["wheel"] = Part(
289
+ info=[
290
+ "power wheel wheels",
291
+ "https://sarobatic.ir/product/%DA%86%D8%B1%D8%AE-%D8%A8%D8%B2%D8%B1%DA%AF-%D8%B9%D9%82%D8%A8-%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D8%B4%D8%A7%D8%B1%DA%98%DB%8C-%D8%A7%D8%B3%D8%AA%D9%88%DA%A9/",
292
+ "https://toys-repair.ir/product/2768/",
293
+ ],
294
+ images=[
295
+ "wheel1.jpg",
296
+ "wheel4.jpg",
297
+ "wheel3.jpg",
298
+ ],
299
+ )
300
+
301
+ db_of_parts["ultrasonic-sensor"] = Part(
302
+ info=[
303
+ "HC-SR04: ultrasonic-sensor",
304
+ "[datasheet](https://cdn.sparkfun.com/datasheets/Sensors/Proximity/HCSR04.pdf)",
305
+ "1m ~= 6ms",
306
+ "fov = 15 - 30 deg",
307
+ ],
308
+ images=[
309
+ "HC-SR04.jpg",
310
+ ],
311
+ )
312
+
313
+ db_of_parts["connector"] = Part(
314
+ info=[
315
+ "auto power connectors",
316
+ ],
317
+ images=[
318
+ "connector.jpg",
319
+ ],
320
+ )
321
+
322
+ db_of_parts["1N4148"] = Part(
323
+ info=[
324
+ "1N4148 diode",
325
+ ],
326
+ images=[
327
+ "TVSdiode.png",
328
+ ],
329
+ )
330
+
331
+ db_of_parts["40-inch-TV"] = Part(
332
+ info=[
333
+ "40 inch TV",
334
+ ],
335
+ images=[
336
+ "40-inch-TV.jpg",
337
+ ],
338
+ )
339
+
340
+ db_of_parts["power-station"] = Part(
341
+ info=[
342
+ "power station.",
343
+ ],
344
+ images=[
345
+ "power-station.jpeg",
346
+ ],
347
+ )
348
+
349
+ db_of_parts["TV-bracket"] = Part(
350
+ info=[
351
+ "TV bracket",
352
+ ],
353
+ images=[
354
+ "tv-bracket.jpeg",
355
+ ],
356
+ )
357
+
358
+ db_of_parts["on-off-switch"] = Part(
359
+ info=[
360
+ "on/off switch, 12V DC 10 A, with indicator led",
361
+ ],
362
+ images=[
363
+ "on-off-switch.png",
364
+ ],
365
+ )
366
+
367
+ db_of_parts["charging-port"] = Part(
368
+ info=[
369
+ "charging port 5.5 mm",
370
+ ],
371
+ images=[
372
+ "charging-port.jpg",
373
+ ],
374
+ )
375
+
376
+ db_of_parts["dsn-vc288"] = Part(
377
+ info=[
378
+ "DSN-VC288, panel mount, 4-30 VDC, 10A, voltmeter ammeter",
379
+ "https://hamguyparts.com/files/Download/Chinese%20DVA.pdf",
380
+ "https://www.skytech.ir/DownLoad/File/11515_DSN-VC288.pdf",
381
+ ],
382
+ images=[
383
+ "dsn-vc288.jpg",
384
+ "dsn-vc288-connection.jpg",
385
+ "dsn-vc288-measurements.jpeg",
386
+ ],
387
+ )
388
+
389
+ db_of_parts["nuts-bolts-spacers"] = Part(
390
+ info=[
391
+ "nuts, bolts, and spacers",
392
+ ],
393
+ images=[
394
+ "nuts-bolts-spacers.jpg",
395
+ ],
396
+ )
397
+
398
+ db_of_parts["plexiglass"] = Part(
399
+ info=[
400
+ "plexiglass, 2 mm or 2.5 mm thickness",
401
+ ],
402
+ images=[
403
+ "plexiglass.jpg",
404
+ ],
405
+ )
406
+
407
+ db_of_parts["white-terminal"] = Part(
408
+ info=[
409
+ "white terminal",
410
+ ],
411
+ images=[
412
+ "white-terminal.jpg",
413
+ ],
414
+ )
415
+
416
+ db_of_parts["dupont-cables"] = Part(
417
+ info=[
418
+ "dupont cables, female to female",
419
+ ],
420
+ images=[
421
+ "dupont-cables.jpg",
422
+ ],
423
+ )
424
+
425
+ db_of_parts["16-awg-wire"] = Part(
426
+ info=[
427
+ "16 AWG wire",
428
+ ],
429
+ images=[
430
+ "16-awg-wire.jpeg",
431
+ ],
432
+ )
433
+
434
+ db_of_parts["solid-cable-1-15"] = Part(
435
+ info=[
436
+ "solid cable 1-1.5 mm^2",
437
+ ],
438
+ images=[
439
+ "solid-cable-1-15.jpg",
440
+ ],
441
+ )
442
+
443
+ db_of_parts["strong-thread"] = Part(
444
+ info=[
445
+ "strong thread",
446
+ ],
447
+ images=[
448
+ "strong-thread.jpg",
449
+ ],
450
+ )
451
+
452
+ db_of_parts["pin-headers"] = Part(
453
+ info=[
454
+ "pin headers",
455
+ ],
456
+ images=[
457
+ "pin-headers.jpg",
458
+ ],
459
+ )
460
+
461
+ db_of_parts["ni-mh-battery"] = Part(
462
+ info=[
463
+ "Ni-MH AA, 2400 mAh, 1.2 VDC",
464
+ ],
465
+ images=[
466
+ "ni-mh-battery.jpg",
467
+ ],
468
+ )
469
+
470
+ db_of_parts["mt-3608"] = Part(
471
+ info=[
472
+ "MT-3608, step up module.",
473
+ "maximum voltage: 28 VDC, maximum current: 2 A",
474
+ "https://eshop.eca.ir/%D9%85%D8%A7%DA%98%D9%88%D9%84-%D8%AA%D8%BA%D8%B0%DB%8C%D9%87-%D9%88%D9%84%D8%AA%D8%A7%DA%98-%D9%88-%D8%B4%D8%A7%D8%B1%DA%98/6898-%D9%85%D8%A7%DA%98%D9%88%D9%84-%D8%A7%D9%81%D8%B2%D8%A7%DB%8C%D9%86%D8%AF%D9%87-%D9%88%D9%84%D8%AA%D8%A7%DA%98-2-%D8%A2%D9%85%D9%BE%D8%B1-mt3608.html",
475
+ ],
476
+ images=[
477
+ "mt-3608.jpg",
478
+ ],
479
+ )
480
+
481
+
482
+ db_of_parts["arduino-nano"] = Part(
483
+ info=[
484
+ "Arduino Nano",
485
+ ],
486
+ images=[
487
+ "arduino-nano.png",
488
+ ],
489
+ )
490
+
491
+ db_of_parts["tb6612"] = Part(
492
+ info=[
493
+ "TB6612, 2-channel DC motor driver.",
494
+ "current: average 1.2 A, peak 3.2 A",
495
+ "voltage: maximum supply 15 V DC",
496
+ "https://toshiba.semicon-storage.com/ap-en/semiconductor/product/motor-driver-ics/brushed-dc-motor-driver-ics/detail.TB6612FNG.html",
497
+ "https://daneshjookit.com/module/motor-drive/2783-%D9%85%D8%A7%DA%98%D9%88%D9%84-%D8%AF%D8%B1%D8%A7%DB%8C%D9%88%D8%B1-%D9%85%D9%88%D8%AA%D9%88%D8%B1-%D8%AF%D9%88-%DA%A9%D8%A7%D9%86%D8%A7%D9%84%D9%87-%D8%A8%D8%A7-%D8%AA%D8%B1%D8%A7%D8%B4%D9%87-tb6612fng.html",
498
+ ],
499
+ images=[
500
+ "tb6612.jpg",
501
+ ],
502
+ )
503
+
504
+ db_of_parts["small-on-off-switch"] = Part(
505
+ info=[
506
+ "small on/off switch",
507
+ ],
508
+ images=[
509
+ "small-on-off-switch.jpg",
510
+ ],
511
+ )
512
+
513
+ db_of_parts["double-sided-tape"] = Part(
514
+ info=[
515
+ "double-sided tape.",
516
+ ],
517
+ images=[
518
+ "double-sided-tape.jpg",
519
+ ],
520
+ )
521
+
522
+ db_of_parts["electrical-tape"] = Part(
523
+ info=[
524
+ "electrical tape",
525
+ ],
526
+ images=[
527
+ "electrical-tape.jpg",
528
+ ],
529
+ )
530
+
531
+ db_of_parts["micro-usb-cable"] = Part(
532
+ info=[
533
+ "Micro USB cable",
534
+ ],
535
+ images=[
536
+ "micro-usb-cable.jpg",
537
+ ],
538
+ )
539
+
540
+ db_of_parts["charger-socket"] = Part(
541
+ info=[
542
+ "charger socket 5.5 mm",
543
+ ],
544
+ images=[
545
+ "charger-socket.jpg",
546
+ ],
547
+ )
548
+
549
+ db_of_parts["220VAC-dimmer"] = Part(
550
+ info=[
551
+ "220VAC dimmer",
552
+ ],
553
+ images=[
554
+ "220VAC-dimmer.jpeg",
555
+ ],
556
+ )
557
+
558
+ db_of_parts["resistance-heating-wire"] = Part(
559
+ info=[
560
+ "resistance heating wire",
561
+ ],
562
+ images=[
563
+ "resistance-heating-wire.jpg",
564
+ ],
565
+ )
566
+
567
+ db_of_parts["ceramic-terminal"] = Part(
568
+ info=[
569
+ "ceramic terminal",
570
+ ],
571
+ images=[
572
+ "ceramic-terminal.jpg",
573
+ ],
574
+ )
575
+
576
+ db_of_parts["mountable-digital-thermometer"] = Part(
577
+ info=[
578
+ "mountable digital thermometer",
579
+ ],
580
+ images=[
581
+ "mountable-digital-thermometer.jpeg",
582
+ ],
583
+ )
584
+
585
+ db_of_parts["pwm-manual-dc-motor-controller"] = Part(
586
+ info=[
587
+ "pwm manual DC motor controller, 12 V, ≥ 5 A",
588
+ ],
589
+ images=[
590
+ "pwm-manual-dc-motor-controller.jpg",
591
+ ],
592
+ )
593
+
594
+ db_of_parts["heater-element"] = Part(
595
+ info=[
596
+ "heater element",
597
+ ],
598
+ images=[
599
+ "heater-element.jpg",
600
+ ],
601
+ )
602
+
603
+ db_of_parts["sd-card-32-gb"] = Part(
604
+ info=[
605
+ "SD card, 32 GB",
606
+ ],
607
+ images=[
608
+ "sd-card-32-gb.jpg",
609
+ ],
610
+ )
611
+
612
+ db_of_parts["template"] = Part(
613
+ info=[
614
+ "template",
615
+ ],
616
+ images=[
617
+ "template.jpg",
618
+ ],
619
+ )