True Random Number Generator

Introducere

Proiectul consta intr-un generator de numere random. Alegerea numarului random se face bazat pe sunetul si pe vibratiile mediului inconjurator. Proiectul include si un servomotor care produce zgomot si vibratii, pentru a intensifica efectul de random.

Ideea proiectului este faptul ca nu se pot genera numere random in adevaratul sens al cuvantului folosind doar informatiile ce se afla in calculator. In general, numerele random se genereaza folosind ora curenta, rezultatul fiind predictibil. Folosind factori externi, care sunt cu adevarat random, numarul generat nu mai este predictibil.

Aceasta tehnica de generat numere random, folosind factori externi, are ca rol obtinerea unei securitati sporite oferite de nepredictibilitatea numerelor generate. Spre exemplu, Cloudfare are un perete de “lava lamps” care au o miscare care nu poate fi prezisa. Folosindu-se de imaginea formata de aceste lampi, cloudfare genereaza numere random pentru a oferi un nivel inalt de securitate.[1]

Descriere generală

Modul de functionare:

  • Apasarea unuia dintre butoane va face ca un nou numar random sa fie generat si afisat.
  • Apasarea celuilalt buton va face servomotorul sa se miste incontinuu/sa se opreasca din miscare.

Hardware Design

Lista de piese:

  • Arduino Uno R3
  • Breadboard
  • Senzor sunet
  • Senzor vibratii
  • Servomotor
  • 4 digit 7 segment display
  • Butoane
  • Fire

Schema electrica:

Software Design

Mediu de dezvoltare: Arduino IDE Librarii: Servo.h Descriere functii:

  • setup: setez pinii de input si de output, activez intreruperile PCINT8 si PCINT9, pornesc fast-PWM cu top-ul pe ICR1 cu prescaler de 64
  • loop: actualizez seed-ul pentru random folosind datele citite de senzori, iar daca servo-ul este pornit, actualizez OCR1A-ul; la final apelez displayNumber
  • displayNumber: afisez numarul pe display; din cauza ca display-ul nu este capabil sa afiseze mai mult de o cifra la un moment dat, ciclez prin afisarea cifrelor cu un delay de 5 milisecunde
  • ISR(PCINT1_vect): verific apasarea butoanelor si ma folosesc de functia millis() pentru a ma asigura ca exista un delay de minim 0.5 secunde intre apasari (sa nu se apese butonul de mai multe ori)
  • pickDigit: alege care din cele 4 cifre de pe display este afisata
  • displayDigit: alege ce cifra se afiseaza
  • random: aplica un hash asupra seed-ului si numarului generat precedent pentru a obtine un nou numar random
  • turnOff: se seteaza toate segmentele de pe display pe off

Rezultate Obţinute

https://youtube.com/shorts/TWNSeBUvwRE?feature=share
Puteti observa ca din filmare nu se intelege foarte bine ce se afiseaza pe display. In realitate se vede bine. Cifrele sunt afisate alternativ, cu un delay de 5 ms intre ele, deoarece display-ul este incapabil sa afiseze mai mult de o cifra la un moment dat. Astfel, se simuleaza afisarea continua a tuturor celor 4 cifre. Ochiul uman nu observa nicio anomalie, in schimb camera observa.

Concluzii

Mi-a placut super mult sa lucrez pe acest proiect. Mi s-a parut super interesant sa caut in datasheet diverse informatii despre intreruperi, pwm si am invatat multe despre lucrul cu arduino si despre conectarea hardware-ului folosind breadboard-ul.

Download

Jurnal

20.04 - Alegere tema proiect
21.04 - Comandare componente
30.04-10.04 - Implementarea pe Tinkercad a proiectului in masura disponibilitatii componentelor
21.05-23.05 - Implementarea fizic a proiectului (cu tot cu scrierea de cod pentru componentele ce nu exista pe tinkercad)

Legenda pentru Bibliografie/Resurse

[1] - lava lamps din introducere
[2] - pini si intreruperile specifice pinilor
[3] - pwm si intreruperi
[4] - pwm si intreruperi
[5] - conectare display
[6] - utilizarea display-ului
[7] - frecventa pwm si conectarea servomotorului
[8] - conectarea servomorotului

Bibliografie/Resurse

pm/prj2022/imacovei/theodor.cristea.txt · Last modified: 2022/05/27 22:24 by theodor.cristea
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