Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:avaduva:andrei.serban1608 [2024/05/20 02:41]
andrei.serban1608 [Schemă Electrică]
pm:prj2024:avaduva:andrei.serban1608 [2024/05/27 21:53] (current)
andrei.serban1608
Line 24: Line 24:
 Arhitectura sistemului este destul de simplă. Un microcontroller specializat pentru a crea sintetizatoare preia date de la un senzor de proximitate și un set de butoane tactile și redă sunet către un difuzor. De asemenea, starea programului este afișată pe un display LCD, indicând utilizatorului parametrul curent. Arhitectura sistemului este destul de simplă. Un microcontroller specializat pentru a crea sintetizatoare preia date de la un senzor de proximitate și un set de butoane tactile și redă sunet către un difuzor. De asemenea, starea programului este afișată pe un display LCD, indicând utilizatorului parametrul curent.
  
-{{:​pm:​prj2024:​avaduva:​there-mini.png}}+{{:​pm:​prj2024:​avaduva:​there-mini.png|}}
  
 ===== Hardware Design ===== ===== Hardware Design =====
Line 50: Line 50:
  
 Notă: Deoarece schematicul full e destul de blurat, am atașat o poză cu zoom pe conexiunile către uC. Am scris de mână ce reprezintă conexiunile care ies din cadrul schematicului mărit. Interfațarea dintre adaptorul I2C și ecranul LCD este 1:1. Notă: Deoarece schematicul full e destul de blurat, am atașat o poză cu zoom pe conexiunile către uC. Am scris de mână ce reprezintă conexiunile care ies din cadrul schematicului mărit. Interfațarea dintre adaptorul I2C și ecranul LCD este 1:1.
 +
 +==== Montaj ====
 +
 +Am conectat toate ground-urile între ele.
 +
 +Pentru HC-SR04, pin-ul de trigger l-am conectat la pinul D4 de pe uC, iar cel de echo la D3. Am ales acești 2 pini din două motive: sunt toleranți la 5V și nu au alte funcții de comunicare.
 +
 +Pentru display-ul 1602, am conectat pinii de SCL și SDA la pinii D13 și D14 de pe Daisy Seed. Acești pini au funcția suplimentară de SCL, respectiv SDA pentru comunicarea I2C cu display-ul.
 +
 +Pentru speaker, terminalul negativ s-a dus la ground, iar cel pozitiv în out[0][SIZE] de pe Daisy, un pin special pentru output audio.
 +
 +Butoanele le-am conectat la 2 pini ce nu aveau funcții suplimentare pe Seed, D26 și D27. Astfel pot să înregistrez triggere de pe acei pini fără să interferez cu alte componente.
 +
 +{{:​pm:​prj2024:​avaduva:​montaj_fara_boost.jpeg?​700|}}
 +
 ===== Software Design ===== ===== Software Design =====
  
  
-<note tip> +Mediu de dezvoltare: Arduino IDE
-Descrierea codului aplicaţiei (firmware):​ +
-  * mediu de dezvoltare ​(if any) (e.g. AVR Studio, CodeVisionAVR) +
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +
-  * (etapa 3) surse şi funcţii implementate +
-</​note>​+
  
-===== Rezultate Obţinute =====+Biblioteci 3rd party: [[https://​github.com/​electro-smith/​DaisyDuino|DaisyDuino]]
  
-<note tip+Sursa: 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+ 
-</note>+<file ino demo.ino
 +#include "​DaisyDuino.h" 
 + 
 +DaisyHardware hw; 
 +static Oscillator osc; 
 + 
 +size_t num_channels;​ 
 + 
 +const int trigPin = D4; 
 +const int echoPin = D3; 
 +const int baud = 9600; 
 + 
 +int distance; 
 + 
 +float pitch, amp = 100; 
 + 
 +Switch pwrButton, effectButton;​ 
 + 
 +int on = 0, effect = 0; 
 + 
 +void MyCallback(float **in, float **out, size_t size) { 
 +  float sine_signal;​ 
 + 
 +  pwrButton.Debounce();​ 
 +  effectButton.Debounce();​ 
 + 
 +  osc.SetFreq(pitch);​ 
 +  osc.SetAmp(amp * on); 
 +    for (size_t i = 0; i < size; i++) { 
 +      sine_signal = osc.Process();​ 
 +      out[0][i] = sine_signal;​ 
 +      out[1][i] = sine_signal;​ 
 +    } 
 +
 + 
 +void setup() { 
 + 
 +  pwrButton.Init(1000,​ true, 26, INPUT_PULLUP);​ 
 +  effectButton.Init(1000,​ true, 27, INPUT_PULLUP);​ 
 + 
 +  pinMode(trigPin,​ OUTPUT); 
 +  pinMode(echoPin,​ INPUT); 
 +  Serial.begin(baud);​ 
 + 
 +  float sample_rate;​ 
 + 
 +  hw = DAISY.init(DAISY_SEED,​ AUDIO_SR_48K);​ 
 +  num_channels = hw.num_channels;​ 
 +  sample_rate = DAISY.get_samplerate();​ 
 +  osc.Init(sample_rate);​ 
 + 
 +  osc.SetWaveform(osc.WAVE_SIN);​ 
 +  osc.SetFreq(440);​ 
 +  osc.SetAmp(1);​ 
 + 
 +  DAISY.begin(MyCallback);​ 
 +
 + 
 +void loop() 
 +
 +  pwrButton.Debounce();​ 
 +  effectButton.Debounce();​ 
 + 
 +  digitalWrite(trigPin,​ LOW); 
 +  delayMicroseconds(2);​ 
 + 
 +  digitalWrite(trigPin,​ HIGH); 
 +  delayMicroseconds(10);​ 
 +  digitalWrite(trigPin,​ LOW); 
 + 
 +  distance = pulseIn(echoPin,​ HIGH); 
 +  delay(50);​ 
 + 
 +  if (effect == 0) { 
 +    pitch = min((220.0 * ((float) distance / 1200)) + 220.0, 440.0); 
 +  } else if (effect == 1) { 
 +    amp = min((float) distance / 1200, 100.0f); 
 +  } 
 + 
 +  if (pwrButton.Pressed()) { 
 +    on = !on; 
 +    Serial.println(on ? "​Power:​ ON" : "​Power:​ OFF"​);​ 
 +  } 
 +  if (effectButton.Pressed()) { 
 +    effect = !effect; 
 +    Serial.print("​Effect:​ "); 
 +    Serial.println((!effect) ? "​Pitch"​ : "​Amp"​);​ 
 +  } 
 +
 + 
 + 
 +</file>
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+Am rămas cu două mari lecții după finalizarea proiectului:​
  
-<note warning>​ +  - Data viitoare, pentru un proiect de genul, ar trebui să folosesc un uC cu mai multă documentație / mai multe exemple disponibile pe internet. Pe lângă că a fost imposibil să găsesc o bibliotecă pentru ecranul LCD pe I2C care să compileze pe ARMnici nu am găsit exemple bune pentru lucruri precum întreruperitimere sau ADC. 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surseschemeetcUn fişier README, ​un ChangeLog, un script ​de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+  - Trebuie să mă apuc mai din timp pentru ​un proiect embedded. Toate componentele hardware de care am avut nevoie le-am obținut abia vinerea dinaintea PM Fairceea ce a dus la un weekend plin de research / implementare software.
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:​prj20??:​c?:​nume_student** (dacă este cazul)**Exemplu:​** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +===== Download ===== 
-</​note>​+ 
 +  ​{{:pm:prj2024:avaduva:theremini.zip| There-Mini}}
  
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +19.05: Senzorul ​și LCD-ul se alimentează la 5V, iar plăcuța are output ​de 3.3V. Am vorbit cu un coleg care are un boost converter, mâine îl atașez și testez componentele. Butoanele și difuzorul merg cum trebuie, testat. 
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul ​de proiect progresul proiectului+19.05: Am realizat că semnalul difuzat de pinul echo al lui HC-SR04 este de fapt un semnal digital, așa că nu o să am nevoie de un pin de ADC
-</​note>​+
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +  ​[[https://​github.com/electro-smith]]
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +
-</note>+
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2024/avaduva/andrei.serban1608.1716162080.txt.gz · Last modified: 2024/05/20 02:41 by andrei.serban1608
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0