Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bouw een AM Muziekzender met Arduino Nano

Onderdelen en Benodigdheden

Onderdeel Aantal
Arduino Nano R3 1
Weerstand 10k ohm 2
Condensator 10 µF 1
Breadboard 1

Apps en Online Services

  • Arduino IDE

Over dit Project

Met ATmega microcontrollers kun je leuke dingen doen. Ik wilde een AM-zender bouwen met een Arduino Nano (elke Arduino werkt).

Hoe AM-modulatie op een Digitale Apparaat Werkt

AM (amplitudemodulatie) betekent dat de amplitude van een draaggolf verandert volgens het invoersignaal. Wiskundig is dat vermenigvuldiging. Maar een ATmega heeft alleen digitale uitgangen (hoog/laag) – echte AM is dus niet mogelijk.

Toch kun je een signaal produceren dat helder te horen is op een gewone AM-radio!

De Oplossing

  1. Zet het analoge invoersignaal om in een PWM-signaal, gebruikmakend van de ADC en de 16-bit timer/teller1 van de ATmega.
  2. Timer/teller2 genereert de draaggolf, instelbaar tussen 31 kHz en 8 MHz.
  3. De draaggolf wordt uitgegeven op pin D11 in het ritme van het PWM-signaal.
  4. De AM-radio fungeert als laagdoorlaatfilter op de PWM, waardoor het originele audiosignaal terugkomt.

Dit is een proof-of-concept. Voor een echte RF-zender voeg je een laagdoorlaatfilter toe aan de audio-in (anti-aliasing) en aan de RF-uitgang (tegen harmonische golven).

Code

/* Dit werk is gelicenseerd onder Creative Commons Attribution-ShareAlike 4.0 International License.
   Zie https://creativecommons.org/licenses/by-sa/4.0/
*/
#define ANTENNA_PIN PB3 // Arduino Nano/Uno D11

void setup() {
  Serial.begin(115200);

  // Draaggolf frequentie generatie
  uint32_t fTransmit = 600; // kHz
  DDRB |= (1 << ANTENNA_PIN);
  TCCR2A = (0 << COM2A1) + (1 << COM2A0); // Toggle OC0A on Compare Match
  TCCR2A |= (1 << WGM21) + (0 << WGM20); // CTC mode
  TCCR2B = (0 << CS22) + (0 << CS21) + (1 << CS20); // Geen prescaling
  OCR2A = F_CPU / (2000 * fTransmit) - 1;

  char strbuf[255];
  sprintf(strbuf, "Zendt op %d kHz", (F_CPU / (2 * (1 + OCR2A)) / 1000));
  Serial.println(strbuf);

  // PWM Signaal generatie (10-bit Fast PWM)
  TCCR1A |= (1 << WGM11) + (1 << WGM10);
  TCCR1B = (1 << WGM12);
  TCCR1B |= (0 << CS12) + (0 << CS11) + (1 << CS10); // Geen prescaling
  TIMSK1 = (1 << OCIE1A) + (1 << TOIE1);

  // ADC Instellingen
  ADMUX = (1 << REFS1) + (1 << REFS0); // Interne 1.1V referentie
  ADCSRA = (1 << ADEN) + (1 << ADSC) + (1 << ADATE); // Auto trigger, free running
  ADCSRA |= (1 << ADPS2) + (1 << ADPS1) + (0 << ADPS0); // Delen door 64 → ~18.5k sample rate
  DIDR0 = (1 << ADC0D);
}

ISR(TIMER1_OVF_vect) {
  uint8_t adcl = ADCL;
  uint8_t adch = ADCH;
  OCR1A = (adch << 8) + adcl;
  DDRB |= (1 << ANTENNA_PIN);
}

ISR(TIMER1_COMPA_vect) {
  DDRB &= ~(1 << ANTENNA_PIN);
}

void loop() {
}

Schema

Zie het schema in de afbeelding: audio-in op A0, antenne op D11 (PB3), weerstanden en condensator voor signaalconditionering.

Productieproces

  1. Het Erfgoed en de Evolutie van de Klassieke Jukebox
  2. Bladmuziek: Van Middeleeuwse Handschriften tot Moderne Uitgeverij – Een Brancheoverzicht
  3. Verkeerslichten: Techniek, Geschiedenis en Toekomstige Innovaties
  4. Bouw Je Eigen LUMAZOID: Een DIY Arduino Muziek Visualizer
  5. Bluetooth-gecontroleerde Arduino Spybot bouwen
  6. RC-ontvanger PPM-signalen decoderen met Arduino: Stapsgewijze handleiding
  7. FlickMote: Gebarengecontroleerde IR-afstandsbediening voor Slimme Huizen
  8. DIY Arduino TV-B-Gone: Universele TV-uit-schakelaar
  9. Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
  10. Find Me: Slimme Item Locator met Arduino en Bluetooth
  11. Thermistor Gebruik Gemaakt Eenvoudig: Stap-voor-Stap Arduino Handleiding