Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
En slektning spurte meg en gang om jeg kunne lage en bryter som reagerer på å klappe hendene. Så jeg har bestilt noen ting for å lage et prosjekt og bestemte meg for å lage en instruerbar slik at alle kunne ha en fantastisk bryter som den.
Mikrokontrolleren er hjernen til dette prosjektet. En lydsensor er koblet til mikrokontrolleren, sensoren sender analoge data når det oppdages lyd. Mikrokontrolleren er programmert til å oppdage store forskjeller i lyd. Når en høy nok forskjell oppdages, noe som betyr et klapp, sender mikrokontrolleren et signal til reléet. Reléet bytter og lyset tennes. Når du klapper en gang til, slås lyset av igjen.
Rekvisita
Fysiske ting:
- 1x ATmega328P Xplained Mini med kabel for programmering
- 1x 5v relemodul 1-kanal (KY-019 eller lignende)
- 1x lydsensormodul (KY-038 eller lignende)
- 1x brødbrett
- 6x mann-hann-jumper wire
- 1x lysuttak med ledning (eller annen enhet du vil slå på)
- 1x lyspære
- 1x motstand* (jeg bruker 220 Ohm)
- 1x LED*
Programvare (nedlasting):
- AtmelStudio 7.0 (https://www.microchip.com/mplab/avr-support/atmel-studio-7)
- Kitt (www.putty.org)*
* For testformål
Trinn 1: Tilkoblinger
Koble til alle ledningene som vist på bildet.
Trinn 2: Opprette programmet
Jeg liker å kode i C, så dette prosjektet er skrevet i C.
Hvis du ennå ikke har lastet ned og installert den nødvendige programvaren, kan du laste den ned og installere den nå.
Følg nå disse neste trinnene:
- Åpne AtmelStudio.
- Klikk på "File" -> "New" -> "Project".
- Klikk på "GCC C Executable Project". Gi prosjektet et navn og et sted å lagre. Klikk "Ok".
- Søk etter ATmega328P. Klikk "ATmega328P" -> "Ok".
- Klikk i løsningsutforskeren på "main.c" for å åpne hovedprogrammet.
Trinn 3: Legge til kode
Slett koden som allerede finnes i main. C
Kopier og lim inn følgende kode i main. C
#define F_CPU 16000000
#include #include #include #include "usart.h" #define MINIMALVALUE 5 void InitADC (); uint16_t ReadADC (uint8_t ADCchannel); dobbel val1, val2; int main (void) {// Initialiser USART USART_init (9600); USART_putstr ("#USART init / n"); // Initialiser ADC InitADC (); USART_putstr ("#ADC init / n"); // PC1 -pin på PORTC -utgang, resten inngang. DDRC = 0b00000010; // sett innledende verdier til PORTC lav. PORTC = 0b00000000; mens (1) {// lese potensiometerverdi // lese verdi og lagre i val1 val1 = ReadADC (0); _forsinkelse_ms (1); // les neste verdi no lagre i val2 val2 = ReadADC (0); røye str [10]; // ReadADC () gir verdien tilbake i heltall. Hvis vi vil feilsøke eller se verdien på kitt, // må verdien konverteres til tegn slik at USART kan skrive den ut. itoa (val1, str, 10); USART_putstr (str); USART_putstr ("\ n"); // hvis de to verdiene har en viss forskjell. En lyd oppdages og bytter port. // MINIMALVALUE kan endres, økende vil gjøre det mindre sensitivt. Å redusere vil gjøre det mer følsomt hvis (val1-val2> MINIMALVALUE || val2-val1> MINIMALVALUE) {PORTC ^= 0b00000010; // LYS PÅ UC _forsinkelse_ms (200); }}}} ugyldig InitADC () {// Velg Vref = AVcc ADMUX | = (1 << REFS0); // sett prescaller til 128 og aktiver ADC ADCSRA | = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0) | (1 << ADEN); } uint16_t ReadADC (uint8_t ADCchannel) {// velg ADC -kanal med sikkerhetsmaske ADMUX = (ADMUX & 0xF0) | (ADCchannel & 0x0F); // enkel konverteringsmodus ADCSRA | = (1 << ADSC); // vent til ADC -konverteringen er fullført mens (ADCSRA & (1 << ADSC)); returnere ADC; }
Trinn 4: Legge til USART
USART er en seriell kommunikasjonsprotokoll som kan brukes på mikrokontrolleren. Jeg bruker den på mikrokontrolleren for å se analoge data fra sensoren.
USART er allerede programmert riktig, og inneholder en topptekst (.h) og kilde (.c) -fil. Last ned de 2 filene og legg dem til programmet ditt i AtmelStudio.
Høyreklikk på prosjektnavnet i løsningsutforskeren. Klikk på "Legg til" -> "Eksisterende element …" og velg de 2 nedlastede filene.
Trinn 5: Kjøre koden
Koble mikrokontrolleren til datamaskinen. Søk etter "enhetsbehandling" på datamaskinen din og åpne den. Se etter "Ports (COM & LPT)" og husk COM-porten som mikrokontrolleren er på.
Åpne PuTTY og klikk på "Serial", skriv inn COM-porten du har funnet av mikrokontrolleren, og klikk "Open". En terminal dukker opp, la den stå for nå.
Gå tilbake til AtmelStudio for å velge riktig verktøy for programmering av mikrokontrolleren.
- Klikk på hammerverktøyet.
- Velg "mEDBG*ATML" debugger/programmereren.
- Velg grensesnittet "debugWIRE".
- Klikk på "start uten feilsøking".
Programmet vil bygge og skrive.
Når programmet kjører riktig, vil du se heltallverdier i puTTY. Ved å bruke en skrutrekker kan jeg endre verdien som ses i puTTY ved å skru skruen på sensoren. Sensoren min gir verdiene fra 0 til 1000 når skruen skrus helt. Jeg snur skruen til 100 (10%) av den totale verdien. Jeg har funnet ut at dette fungerer for meg.
Trinn 6: Endre følsomhet
For å justere følsomheten når lyset tennes, kan du bruke to alternativer, men velg ett, ikke begge deler:
- Bytt sensorskrue;
- Endre kodeverdi.
Jeg bruker alternativ 2. Å øke MINIMALVALUE vil gjøre det mindre følsomt, å redusere gjør det mer følsomt.
#define MINIMALVERDI 5
Trinn 7: Bytt alt du liker
ADVARSEL: Vær forsiktig når du bytter høyere spenning
Når du er fornøyd med sensoren til sensoren, kan du endre kretsen. Endre kretsen som bildet ovenfor. Du kan nå bytte alt du liker!