Welcome to my PS70 portfolio! Here you will find weekly progress of my digital fabrication journey.
This week's assignment was to program a microcontroller to obtain and respond to information from the internet/radio, with at least one input and output. I collaborated with Rebecca Brand this week to tackle the idiosyncracies of Arduino.
We started by setting up a Wifi Server so we could control our ESP32 board over wifi. We were able to set it up so that we were able to turn an LED on/off by clicking on the links in our browser.
We followed this tutorial to control an LED through a Firebase Server.
For our final project, we want to create a drawing machine that injects ink into water based on certain inputs. To start on the prototype, we 3D printed a syringe holder that is attached to a stepper motor. When the stepper motor runs, the holder depresses the plunger.
We followed this tutorial to connect the stepper motor to the ESP32 via an ULN2003 motor driver and powered it with an Arduino Uno that was connected to our laptop.
/*
Rui Santos
Complete project details at https://RandomNerdTutorials.com/esp32-stepper-motor-28byj-48-uln2003/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
Based on Stepper Motor Control - one revolution by Tom Igoe
*/
#include "Stepper.h"
const int stepsPerRevolution = 2048; // change this to fit the number of steps per revolution
// ULN2003 Motor Driver Pins
#define IN1 19
#define IN2 18
#define IN3 10
#define IN4 4
// initialize the stepper library
Stepper myStepper(stepsPerRevolution, IN1, IN3, IN2, IN4);
void setup() {
// set the speed at 5 rpm
myStepper.setSpeed(5);
// initialize the serial port
Serial.begin(115200);
}
void loop() {
// step one revolution in one direction:
Serial.println("clockwise");
myStepper.step(stepsPerRevolution);
delay(1000);
// step one revolution in the other direction:
Serial.println("counterclockwise");
myStepper.step(-stepsPerRevolution);
delay(1000);
}
Finally, we tried to connect the the ESP32 and stepper motor to Firebase so that we could control the motor over Wifi. It worked! We'll likely build on this prototype over the next few weeks and incorporate it into the "machine building" assignment and ultimately our final project.
#include "WiFi.h" // esp32 library
#include "FirebaseESP32.h" // firebase library
#include "Stepper.h"
#define FIREBASE_HOST "https://ps70-week-9-default-rtdb.firebaseio.com/" // the project name address from firebase id
#define FIREBASE_AUTH "2eCvifu0nm6sZbEiz8NMaCrHV9wRS21cMwPCOcDF"
#define WIFI_SSID "MAKERSPACE" // input your home or public wifi name
#define WIFI_PASSWORD "12345678" // password of wifi ssid
// ULN2003 Motor Driver Pins
#define IN1 19
#define IN2 18
#define IN3 10
#define IN4 4
String fireString = ""; received from firebase
const int stepsPerRevolution = 2048; // change this to fit the number of steps per revolution
// initialize the stepper library
Stepper myStepper(stepsPerRevolution, IN1, IN3, IN2, IN4);
//Define FirebaseESP32 data object
FirebaseData firebaseData;
void setup() {
// set the speed at 5 rpm
myStepper.setSpeed(15);
// initialize the serial port
Serial.begin(115200);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD); // try to connect with wifi
Serial.print("Connecting to ");
Serial.print(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("Connected to ");
Serial.println(WIFI_SSID);
Serial.print("IP Address is : ");
Serial.println(WiFi.localIP()); // print local IP address
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); // connect to firebase
Firebase.reconnectWiFi(true);
Firebase.set(firebaseData, "/STEPPER", "OFF"); // set initial string of "OFF"
}
void loop() {
Firebase.get(firebaseData, "/STEPPER"); // get stepper status input from firebase
fireString = firebaseData.stringData(); // change to e.g. intData() or boolData(
if (fireString == "ON") { // compare the input of stepper status received from firebase
Serial.println("Stepper Turned ON");
myStepper.step(-stepsPerRevolution); // make output stepper
}
else if (fireString == "OFF") { // compare the input of stepper status received from firebase
Serial.println("Stepper Turned OFF");
myStepper.step(0);
}
}