Talaan ng mga Nilalaman:
- Hakbang 1: Mga Materyales at Tool
- Hakbang 2: Pagkonekta sa mga Softpot sa ESP32
- Hakbang 3: Pagkonekta sa ESP32 at sa Wireless na RPI
- Hakbang 4: Pagkonekta sa Iyong Website at Database
- Hakbang 5: Pagkonekta ng Lahat ng Magkasama
- Hakbang 6: Dagdag: Pagkonekta sa LCD Screen
Video: Pagsukat sa Mga Posisyon ng Daliri sa isang Biyolin Sa ESP32: 6 na Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
Bilang isang manlalaro ng byolin palagi akong nagnanais ng isang app o tool na maaaring ipakita sa akin ang posisyon ng aking mga daliri sa biyolin na napaka tumpak. Sa proyektong ito sinubukan kong buuin ito. Bagaman ito ay isang prototype at maaari ka pa ring magdagdag ng maraming mga tampok.
Sinubukan ko ring paghiwalayin ang ESP32 at ang rPI at sa gayon ay ginawa ko ang ESP32 na magpadala ng data nang walang wireless sa rPi. Alin ang marahil ang pinakamahirap na bagay tungkol sa proyektong ito.
Napakahalaga din na sa pagtatapos ng proyektong ito ay walang nakaimbak sa iyong computer ngunit ito ay nasa rPI o ESP32.
Hakbang 1: Mga Materyales at Tool
Bago makuha ang mga detalye ng pagbuo ng proyektong ito kailangan namin ng ilang mga bagay.
- 4x Linear Softpot: Linear Potentiometers upang sukatin ang posisyon ng isang daliri (ang isang byolin ay may 4 na mga string)
- ESP32: Isang module na ESP32 upang mabasa ang data mula sa mga linear softpot.
- isang 4/4 byolin: isang violin upang ilagay ang mga linear softpot sa itaas.
- isang Raspberry Pi na may isang SD card: isang raspberry pi na mag-iimbak ng aming database at website.
- 10k potentiometer: isang potentiometer para sa ningning ng LCD
- LCD-screen: isang LCD screen upang ipakita sa ip addres ng rPi
- Kit ng Panghinang: Para sa paghihinang ng lahat ng mga elemento ng togheter
- Mga wires na male-to-male at male-to-female wires: Mga cable para sa pagkonekta ng lahat ng mga elemento
- Micro USB cable: Para sa pagpapatakbo ng ESP32
Hakbang 2: Pagkonekta sa mga Softpot sa ESP32
Una sa lahat kailangan namin upang ikonekta ang aming mga softpot sa esp32. Ikonekta namin ang kaliwa at kanang mga pin sa 5V at GND ayon sa pagkakabanggit. Ikonekta namin ang gitnang pin sa isang analog pin sa ESP32. Kailangan din naming ikonekta ang gitnang pin na may paglaban ng 10k ohm at ikonekta ito sa GND. Ito ay upang ang aming output ng mga softpot ay hindi magbalik ng random na halaga.
Pagkatapos ay ikonekta namin ang ESP32 gamit ang micro usb cable sa aming pc upang ma-upload namin ang code dito. Gagamitin namin ang Arduino IDE para sa pag-program ng ESP32. Ngunit kailangan muna naming i-install ang Arduino core para sa ESP32 upang ma-upload namin ito. Maaari itong magawa dito.
Pagkatapos ay maaari nating simulan ang pagsulat ng code.
Una kailangan naming italaga ang aming mga pin kung saan ikinonekta namin ang aming gitnang pin ng mga softpot.
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
matagal na hindi naka-sign onTime;
unsigned mahabang softPotTime;
Pagkatapos ay maaari naming i-set up ang aming mga pin. At kailangan naming simulan ang aming serial monitor at ang aming oras.
walang bisa ang pag-setup () {
onTime = millis ();
Serial.begin (115200);
Serial.println ("Pagsisimula ng programa");
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT); }
void getdata (byte pdata ) {
// Basahin ang halaga ng ADC ng soft pot
Pagkatapos kailangan naming basahin ang aming mga pin upang matanggap namin ang aming data.
int softPotADC1 = analogRead (SOFT_POT_PIN1);
nt softPotADC2 = analogRead (SOFT_POT_PIN2);
int softPotADC3 = analogRead (SOFT_POT_PIN3);
int softPotADC4 = analogRead (SOFT_POT_PIN4);
Pagkatapos ay inilalagay namin ang mga halaga sa isang listahan upang madali namin itong ma-output sa paglaon.
para sa (int i = 0; i <4; i ++) {
int Names = {softPotADC1, softPotADC2, softPotADC3, softPotADC4};
int softpot = Mga Pangalan ;
kung (softpot> 10) {
pdata [0] = i;
pdata [1] = softpot;
pdata [2] = millis ();
} } }
}
Hakbang 3: Pagkonekta sa ESP32 at sa Wireless na RPI
Para sa pagkonekta sa ESP32 at RPI nang walang wireless, gagamit kami ng isang silid-aklatan na tinatawag na websocket. Upang mai-install ang library na ito, makukuha natin ang mga file dito. Kakailanganin naming baguhin ang ilang code sa mismong mga file upang magamit ang library na ito para sa ESP32.
Kakailanganin nating baguhin ang MD5.c at MD5.h.
- MD5Init sa MD5InitXXX
- MD5Update sa MD5UpdateXXX
- MD5Final hanggang MD5FinalXXX
Kakailanganin din naming tanggalin ang mga linya ng avr / io.h sa mga sha1 file.
Pagkatapos ay maaari naming idagdag ang library sa aming Arduino IDE sa pamamagitan ng sketch> isama ang library> magdagdag ng. ZIP library at pagkatapos ay maaari naming piliin ang iyong library sa isang zip file.
Pagkatapos nito maaari naming simulang isulat ang aming code.
Una para sa ESP32:
Kasama ang aming library
# isama ang # isama
Pagtatalaga muli ng aming mga pin.
const int SOFT_POT_PIN1 = 34;
const int SOFT_POT_PIN2 = 35;
const int SOFT_POT_PIN3 = 32;
const int SOFT_POT_PIN4 = 33;
Pagtatalaga ng aming wifi server
WiFiServer server (80);
Simula sa aming websocket server
WebSocketServer webSocketServer;
Ang pagtatalaga ng aming SSID at password ng iyong wifi
const char * ssid = "iyong wifi SSID";
const char * password = "iyong wifi password";
walang bisa ang pag-setup () {
Pagse-set up ng iyong serial monitor
Serial.begin (115200);
Pagse-set up ng iyong mga softpot
pinMode (SOFT_POT_PIN1, INPUT);
pinMode (SOFT_POT_PIN2, INPUT);
pinMode (SOFT_POT_PIN3, INPUT);
pinMode (SOFT_POT_PIN4, INPUT);
Simula ng aming wifi at kumokonekta dito
WiFi.begin (ssid, password);
habang (WiFi.status ()! = WL_CONNected) {
pagkaantala (1000);
Serial.println ("Kumokonekta sa WiFi.."); }
Serial.println ("Nakakonekta sa WiFi network");
Serial.println (WiFi.localIP ());
server.begin (); pagkaantala (100); }
void getdata (char * pdata) {
Pagbasa ng iyong data
// Basahin ang halaga ng ADC ng soft pot
int softPotADC1 = analogRead (SOFT_POT_PIN1);
int softPotADC2 = analogRead (SOFT_POT_PIN2);
int softPotADC3 = analogRead (SOFT_POT_PIN3);
int softPotADC4 = analogRead (SOFT_POT_PIN4);
Ang paglalagay ng data sa isang listahan at i-convert ito sa hexadecimal.
sprintf (pdata, "% x,% x,% x,% x,% x", softPotADC1, softPotADC2, softPotADC3, softPotADC4, millis ());
}
void loop () {
Pagkonekta sa iyong kliyente (ang rPI)
WiFiClient client = server.available ();
kung (client.connected ()) {
antala (10);
kung (webSocketServer.handshake (client)) {
Serial.println ("Konektado sa kliyente");
Pagpapadala at pagtanggap ng data.
habang (client.connected ()) {
data ng char [30];
getdata (data);
Serial.println (data);
webSocketServer.sendData (data);
antala (10); // Kailangan ng pagkaantala para matanggap nang tama ang data}
Serial.println ("Nakakonekta ang kliyente");
pagkaantala (100); }
iba pa {
Serial.println ("shitsfuckedyo");
} } }
Pagkatapos para sa rPI sa sawa:
Pag-import ng aming mga aklatan
i-import ang oras ng websocketimport
Assasigning isang globale variabel i
ako = 0
Nagtatakda ng maximum na 200 mga mensahe na maaari naming matanggap
nrOfMessages = 200
klase Websocket ():
def _init _ (sarili):
Pinasimulan ang aming websocket at kinokonekta ito sa aming ESP32
self.ws = websocket. WebSocket ()
sarili.ws.connect ("ws: //172.30.248.48/")
Tumatanggap ng aming data
trabaho sa def (sarili):
Magpadala ng sarili ("message nr: 0")
resulta = sarili.ws.recv () oras.sulog (0.5) resulta ng pagbabalik
Pagsara ng websocket pagkatapos matanggap ang lahat
def close (sarili):
sarili.ws.close ()
Hakbang 4: Pagkonekta sa Iyong Website at Database
Tulad ng para sa pagkonekta sa aming Database at website, una sa lahat kailangan mong likhain ang iyong database sa pi sa pamamagitan ng pag-install ng mariadb: sudo apt install mariadb.
Pagkatapos ay maaari mo itong ma-acces sa pamamagitan ng paggawa: sudo mariadb.
Pagkatapos kakailanganin mo ring likhain ang iyong website. Maaari mong gawin ito subalit nais mo, ngunit kailangan mong gumamit ng Flask at kailangan mong magkaroon ng isang form sa iyong HTML para sa pagtigil at pagsisimula ng iyong data.
Pagkatapos ay maaari mong ipasok ang code na ito upang ikonekta ang iyong database at ang iyong website (kapwa ang iyong website at database ay dapat na parehong nasa iyong pi, magagawa ito sa pamamagitan ng paggamit ng tab na paglawak sa mga setting ng pycharm)
mula sa flaskext.mysql import ang MySQL
app.config ["MYSQL_DATABASE_HOST"] = "localhost"
app.config ["MYSQL_DATABASE_DB"] = "ang iyong pangalan sa database"
app.config ["MYSQL_DATABASE_USER"] = "iyong gumagamit ng database"
app.config ["MYSQL_DATABASE_PASSWORD"] = "iyong database ng password"
Pag-andar para sa pagkuha ng data mula sa aming database.
def get_data (sql, params = Wala):
Conn = MySQL.connect ()
cursor = conn.cursor ()
i-print ("pagkuha ng data")
subukan:
print (sql)
cursor. magpatupad (sql, params)
maliban sa Exception bilang e:
i-print (e)
ibalik ang Mali
resulta = cursor.fetchall ()
data =
para sa hilera sa resulta:
data.append (listahan (row))
cursor.close ()
conn.close ()
ibalik ang data
Pag-andar para sa pagpasok ng data sa aming database
def set_data (sql, params = Wala):
Conn = MySQL.connect ()
cursor = conn.cursor ()
subukan:
log.debug (sql)
cursor.execut (sql, params) conn.commit ()
log.debug ("SQL uitgevoerd")
maliban sa Exception bilang e:
log.exception ("Fout bij uitvoeren van sql: {0})". format (e))
ibalik ang Mali
cursor.close ()
conn.close ()
ibalik ang Totoo
Kakailanganin din naming i-thread ang aming application upang magawa mo ang ibang mga bagay habang nagre-record ka.
klase ThreadedTask (threading. Tread):
def _init _ (sarili,):
Pagse-set up ng thread
pag-thread. Thread._ init _ (sarili)
Lumilikha ng isang listahan para sa paghawak ng lahat ng iyong natanggap na data
self.data_all =
def run (sarili):
oras. tulog (5)
I-import ang iyong sariling code ng sawa kung saan mo natatanggap ang data
i-import ang accept_websocket
Tanggapin ang iyong data
w = accept_websocket. Websocket ()
Idagdag ang iyong data sa iyong listahan at i-print ito.
para sa saklaw ko (0, 200):
self.data_all.append (w.work (). split (","))
print (self.data_all)
gawain = ThreadedTask ()
Pagkatapos ay maaari mong gawin ang task.run () upang simulan ang iyong Thread at magsimulang makatanggap ng data.
Hakbang 5: Pagkonekta ng Lahat ng Magkasama
Para sa pagpapatakbo ng iyong website mula sa iyong Pi kailangan mong gumamit ng isang serbisyo:
[Unit] Paglalarawan = uWSGI halimbawa upang maghatid ng project1 web interface
Pagkatapos = network.target
BindsTo = mysqld.service
Pagkatapos ng = mysqld.service
[Serbisyo]
Baguhin sa iyong gumagamit
Gumagamit = pi
Pangkat = www-data
Narito kailangan mong ipasok ang iyong direktoryo ng iyong Flask file
WorkingDirectory = / home / pi / project1 / web
Direktoryo ng iyong file na ito na maaaring matagpuan sa paglaon.
ExecStart = / usr / bin / uwsgi --ini /home/pi/project1/conf/uwsgi-flask.ini
[I-install]
WantedBy = multi-user.target
uwsgi-flask.ini na kailangan mong ilagay sa direktoryo na tinukoy mo sa ExecStart sa itaas
[uwsgi] module = web: app virtualenv = / home / pi / project1 / env
master = totoong proseso = 5
mga plugin = python3
socket = project1.sock chmod-socket = 660 vacuum = totoo
die-on-term = totoo
Maaari mo na ngayong basahin ang iyong data at ipakita ito sa iyong website.
Hakbang 6: Dagdag: Pagkonekta sa LCD Screen
Maaari naming ikonekta ang isang LCD screen upang maipakita namin ang ip-adress ng aming Pi para sa aming website.
i-import ang RPi. GPIO bilang oras ng GPIOimport
mag-import ng mga utos
GPIO.cleanup ()
D0 = 22
D1 = 5
D2 = 6
D3 = 13
D4 = 19
D5 = 26
D6 = 20
D7 = 21
listahan = [22, 5, 6, 13, 19, 26, 20, 21]
E = 24
RS = 23
screen ng klase:
def _init _ (sarili):
GPIO.setmode (GPIO. BCM)
self.setup ()
#Function set self.stuur_ins konstrie (0x3f) #Display self.stuur_ins konstrie (0x0c) #On + cursor self.stuur_ins konstrie (0x01) @staticmethod def setup (): GPIO.setup (list, GPIO. OUT) GPIO.setup ([E, RS], GPIO. OUT)
def stuur_instructie (sarili, byte):
GPIO.output (E, GPIO. HIGH)
GPIO.output (RS, GPIO. LOW)
self.set_GPIO_bits (byte)
oras. tulog (0.005)
GPIO.output (E, GPIO. LOW)
def stuur_teken (sarili, char):
temp = ord (char)
GPIO.output (E, GPIO. HIGH)
GPIO.output (RS, GPIO. HIGH)
self.set_GPIO_bits (temp)
oras. tulog (0.005)
GPIO.output (E, GPIO. LOW)
def set_GPIO_bits (sarili, byte):
para sa saklaw ko (0, 8):
kung (byte & (2 ** i)) == 0:
GPIO.output (listahan , GPIO. LOW)
iba pa:
GPIO.output (listahan , GPIO. HIGH)
def main ():
s = Screen ()
teken = "Local IP address:"
para sa sulat sa teken:
s.stuur_teken (liham)
teken2 = commands.getoutput ("ip addr show wlan0 | grep -Po 'inet / K [ d.] +'")
print (teken2)
s.stuur_instructie (0xc0)
para sa letra2 sa teken2:
s.stuur_teken (sulat2)
kung _name_ == '_main_': #Program na nagsisimula mula dito
subukan:
pangunahing ()
maliban sa KeyboardInterrupt:
pumasa
Pagkatapos ay makakagawa kami ng isang serbisyo upang simulan ang LCD sa pagsisimula.
Inirerekumendang:
Isang Paraan upang Makagamit ng isang Yunit ng Pagsukat ng Inertial?: 6 Mga Hakbang
Isang Paraan upang Gumamit ng isang Yunit ng Pagsukat ng Inertial?: Ang konteksto: Binubuo ko para sa kasiyahan ang isang robot na nais kong ilipat nang autonomiya sa loob ng isang bahay. Ito ay isang mahabang trabaho at gumagawa ako ng hakbang-hakbang. Nag-publish na ako ng 2 mga itinuturo sa paksang iyon: isa tungkol sa paggawa ng isang encoder ng gulong tungkol sa
Ultrasonic Sensor upang Makuha ang Posisyon na Mga Pagbabago ng Mga Bagay: 3 Mga Hakbang
Ultrasonic Sensor upang Makuha ang Posisyon na Mga Pagbabago ng Mga Bagay: Mahalaga na ligtas ang iyong mga mahahalagang bagay, magiging pilay kung patuloy mong babantayan ang iyong kastilyo sa buong araw. Gamit ang raspberry pi camera maaari kang kumuha ng mga snap sa tamang sandali. Tutulungan ka ng gabay na ito na mag-shoot ng isang video o kumuha ng litrato
Ang pagsukat sa Iyong Rate ng Puso Ay nasa Tip ng Iyong Daliri: Paglapit ng Photoplethysmography sa Pagtukoy sa Rate ng Puso: 7 Mga Hakbang
Ang pagsukat sa rate ng iyong puso ay nasa tip ng iyong daliri: Photoplethysmography Approach to Determining Heart Rate: Ang isang photoplethysmograph (PPG) ay isang simple at murang diskarte sa optikal na madalas na ginagamit upang makita ang mga pagbabago sa dami ng dugo sa isang microvascular bed ng tisyu. Kadalasan ginagamit ito nang hindi nagsasalakay upang magsukat sa ibabaw ng balat, karaniwang
Alamin sa Circuit NANO: Isang PCB. Madaling matutunan. Walang-katapusang Mga Posisyon .: 12 Hakbang (na may Mga Larawan)
Alamin sa Circuit NANO: Isang PCB. Madaling matutunan. Walang-katapusang Mga Posisyon .: Ang pagsisimula sa mundo ng electronics at robotics ay maaaring maging medyo nakakatakot sa una. Maraming mga bagay na matututunan sa simula (disenyo ng circuit, paghihinang, programa, pagpili ng tamang mga elektronikong sangkap, atbp) at kapag nagkamali ang mga bagay
Nagtatrabaho ang Smart Car sa pamamagitan ng Pagkilos ng Daliri: 7 Hakbang (na may Mga Larawan)
Gumagawa ang Smart Car ng Pagkilos ng Daliri: Iyon ang aking proyekto na smart car na hindi ito gumagana sa pamamagitan ng mobile o normal na remotecontrol Gumagana ito sa pamamagitan ng isang guwantes kaya ang remote control ay paggalaw ng aking daliri