You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
summary: "Fist update on the 2025-2026 Critical Making Project"
8
8
category: essay
9
9
tags:
10
-
- research-and-development
10
+
- research-and-development
11
11
- makerspace
12
12
- critical-making
13
13
---
@@ -17,81 +17,81 @@ Beginning in 2023, the Makerspace has funded a graduate student, usually in the
17
17
18
18
# Project Overview
19
19
20
-
This project aims to visualize electoral voting patterns in previous presidential elections using an interactive data-sculpture. Each state is represented with a cluster of hexagonal cells equal to the number of electoral votes allocated to the state.
20
+
This project aims to visualize electoral voting patterns in previous presidential elections using an interactive data-sculpture. Each state is represented with a cluster of hexagonal cells equal to the number of electoral votes allocated to the state.
21
21
22
22
[](https://www.mapchart.net/usa-hex-cartogram.html)
23
23
24
24
25
-
The state-block will have two actions in response to input data:
25
+
The state-block will have two actions in response to input data:
26
26
27
-
1. light up blue or red depending on the party of the winning candidate and
28
-
2. raise or lower itself proportional to the margin of victory.
27
+
1. light up blue or red depending on the party of the winning candidate and
28
+
2. raise or lower itself proportional to the margin of victory.
29
29
30
-
The data on state-level electoral votes is from UCSB’s American Presidential Project website.
30
+
The data on state-level electoral votes is from UCSB’s American Presidential Project website.
31
31
32
-
# Data
32
+
# Data
33
33
34
-
The data has already been scraped from UCSB’s website and contains data on the 1924-2024 elections. They are stored in the election data folder on the shared drive, with a separate .csv file for each election year. Files are named with the convention `Election_####`, e.g. `Election_1968`. Years with atypical electoral votes have been noted in the data description document, which can also be found in the election data folder.
34
+
The data has already been scraped from UCSB’s website and contains data on the 1924-2024 elections. They are stored in the election data folder on the shared drive, with a separate .csv file for each election year. Files are named with the convention `Election_####`, e.g. `Election_1968`. Years with atypical electoral votes have been noted in the data description document, which can also be found in the election data folder.
35
35
36
-
The data columns are as follows:
36
+
The data columns are as follows:
37
37
38
-
State: State where the data was collected
38
+
State: State where the data was collected
39
39
40
-
Total: total votes tallied for the state
40
+
Total: total votes tallied for the state
41
41
42
-
Popular_D: Number of popular votes won by the Democratic candidate
43
-
44
-
Prop_D: Proportion of total votes received by the Democratic candidate
42
+
Popular_D: Number of popular votes won by the Democratic candidate
45
43
46
-
EV_D: Number of electoral votes won by the Democratic candidate
47
-
48
-
Popular_R: Number of popular votes won by the Republican candidate
44
+
Prop_D: Proportion of total votes received by the Democratic candidate
49
45
50
-
Prop_R: Proportion of total votes received by the Republican candidate
46
+
EV_D: Number of electoral votes won by the Democratic candidate
51
47
52
-
EV_R: Number of electoral votes won by the Republican candidate
48
+
Popular_R: Number of popular votes won by the Republican candidate
49
+
50
+
Prop_R: Proportion of total votes received by the Republican candidate
51
+
52
+
EV_R: Number of electoral votes won by the Republican candidate
53
53
54
54
* If a 3rd party candidate won electoral votes, the votes will be recorded with similar conventions as above, with "_3rd" as the suffix.
55
55
56
-
EV_Outcome: Column with electoral vote outcomes. Data is stored with integer values of electoral votes, followed by the party they were cast for, separated by spaces. E.g. `3 D 0 R 0 I`, where 3 votes were cast for the Democratic candidate, and 0 for the Republican and Independent/3rd party candidate.
56
+
EV_Outcome: Column with electoral vote outcomes. Data is stored with integer values of electoral votes, followed by the party they were cast for, separated by spaces. E.g. `3 D 0 R 0 I`, where 3 votes were cast for the Democratic candidate, and 0 for the Republican and Independent/3rd party candidate.
57
57
58
-
Margin: Margin of victory, calculated using
58
+
Margin: Margin of victory, calculated using
59
59
60
60
```
61
61
MOV = (Raw margin of victory) / (Total votes in state)
62
-
```
62
+
```
63
63
64
-
where the raw margin of victory is the difference in popular votes between the first and second place candidates in the state.
64
+
where the raw margin of victory is the difference in popular votes between the first and second place candidates in the state.
65
65
66
66
67
-
# Hardware
67
+
# Hardware
68
68
69
-
The state-blocks will be 3D printed by Ammon at the Makerspace and mounted on a similar 3D printed rack-and-pinion mechanism to achieve the raising and lowering.
69
+
The state-blocks will be 3D printed by Ammon at the Makerspace and mounted on a similar 3D printed rack-and-pinion mechanism to achieve the raising and lowering.
70
70
71
-
The vertical movement will be powered by 180-degree rotation Servo motors. They were chosen because their degree of rotation can be specified in code. This allows for an easy transition from the MOV value in the data into Servo motor directions. The Servo motors will be connected to the Adafruit 16-channel PWM bonnet, and a brief tutorial on connecting and using the bonnet can be found [here](https://learn.adafruit.com/adafruit-16-channel-pwm-servo-hat-for-raspberry-pi/overview). For this project, the bonnets will use the 3x4 right angle male headers, so the Servo motors can all interface to the pi.
71
+
The vertical movement will be powered by 180-degree rotation Servo motors. They were chosen because their degree of rotation can be specified in code. This allows for an easy transition from the MOV value in the data into Servo motor directions. The Servo motors will be connected to the Adafruit 16-channel PWM bonnet, and a brief tutorial on connecting and using the bonnet can be found [here](https://learn.adafruit.com/adafruit-16-channel-pwm-servo-hat-for-raspberry-pi/overview). For this project, the bonnets will use the 3x4 right angle male headers, so the Servo motors can all interface to the pi.
72
72
73
-
The light-up portion of the project will be completed with the 5050Neopixels, whose product specifications can be found [here](https://cdn-shop.adafruit.com/product-files/1655/SKC6812RV__12VOP0274E_REV.A1_EN%2812%29.pdf). A pdf of the specs will also be in the shared drive. The pin configuration can be found on page 5 of the pdf. When connecting the Neopixel to the bonnets, the signal pin should connect to pin 2 (DIN), the power pin should connect to pin 3 (VDD), and the ground should connect to pin 1 (GND).
73
+
The light-up portion of the project will be completed with the 5050Neopixels, whose product specifications can be found [here](https://cdn-shop.adafruit.com/product-files/1655/SKC6812RV__12VOP0274E_REV.A1_EN%2812%29.pdf). A pdf of the specs will also be in the shared drive. The pin configuration can be found on page 5 of the pdf. When connecting the Neopixel to the bonnets, the signal pin should connect to pin 2 (DIN), the power pin should connect to pin 3 (VDD), and the ground should connect to pin 1 (GND).
74
74
75
75
* It should be possible to chain multiple Neopixels by chaining pin 4 (DOUT) to pin 2 (DIN) on another Neopixel, but I haven’t had a chance to test it.
76
76
77
-
# Software
77
+
# Software
78
78
79
-
There is some Python code for powering the Servos simultaneously. This is on the Raspberry Pi and should be stored in the “Code” folder. The packages used for powering the Servos and Neopixels must be used in a virtual environment. On Thonny, you can go to “Run”, then “Select interpreter”, then choose the venv that is in the “Code” folder. Not much has been done for the software portion of this project.
79
+
There is some Python code for powering the Servos simultaneously. This is on the Raspberry Pi and should be stored in the “Code” folder. The packages used for powering the Servos and Neopixels must be used in a virtual environment. On Thonny, you can go to “Run”, then “Select interpreter”, then choose the venv that is in the “Code” folder. Not much has been done for the software portion of this project.
80
80
81
81
82
82
83
83
# February 2026 update
84
84
Further consideration about the project led us to expand the vision of the project. Instead of being tied to electoral data, the map will be able to use any two data points to compare states. The LEDs will not be exclusively red or blue, but RGB LEDs will be used to allow a range of colors.
85
85
86
-
As of February 2026, the hardware side of things has improved a bit. California was chosen for the test case as it is the largest with the most electoral votes. This would test the capability of the inexpensive 180 servo motors to move the 3D printed states.
86
+
As of February 2026, the hardware side of things has improved a bit. California was chosen for the test case as it is the largest with the most electoral votes. This would test the capability of the inexpensive 180 servo motors to move the 3D printed states.
87
87
88
-
Originally, it was hoped to use the output of data from the R statistical program to generate the 3D models for printing. The resulting hexagons from this workflow were inconsistent.
88
+
Originally, it was hoped to use the output of data from the R statistical program to generate the 3D models for printing. The resulting hexagons from this workflow were inconsistent.
89
89
90
90

91
91
92
92
An additional issue, was that the generated file created a map with states at varying heights. We are going to account for this in the hardware by moving the states up and down, so they all need to be the same height.
93
93
94
-
Modeling each state by hand in Fusion 360 is the solution.
94
+
Modeling each state by hand in Fusion 360 is the solution.
95
95
96
96
97
97

0 commit comments