Arduino Voltage And Frequency Simulation | Tinkercad
Learn how voltage controls frequency with this interactive Arduino simulation in Tinkercad, even if you don't have the physical components.
Components and supplies
1
I2C 16 x 2 LCD
1
Arduino Uno Rev3
1
Piezo Buzzer
1
10kOhm potentiometer
1
Oscillator IC, Voltage Controlled
1
Breadboard - 830 contacts
1
7 Segment LED Display, InfoVue
1
Jumper wires (generic)
8
Resistor 220 ohm
Apps and platforms
1
Arduino IDE 2.0 (beta)
1
Autodesk tinkercad.com
Project description
Code
Illustrating the Relationship Between Voltage and Frequency
cpp
Relationship between voltage and frequency
1/* 2 Sketch Title: Illustrating the Relationship Between Voltage and Frequency 3 4 Description: This sketch demonstrates how changing voltage affects 5 the frequency of an oscillator, using a potentiometer, 6 a 7-segment display, an LCD screen, and a piezo speaker in Tinkercad. 7 8 This example code is in the public domain. 9 10 Modified 29 Nov 2024 11 by Google Gemini Advanced and VideotronicMaker (Tishin) 12*/ 13 14#include <LiquidCrystal_I2C.h> 15 16// Set the LCD address for a 16 chars and 2 line display 17LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 is the most common I2C address 18 19// Define 7-segment display pins 20const int segA = 2; 21const int segB = 3; 22const int segC = 4; 23const int segD = 5; 24const int segE = 6; 25const int segF = 7; 26const int segG = 8; 27const int segDP = 9; 28 29// Define potentiometer pin 30const int potPin = A0; 31 32// Define oscillator pin 33const int oscillatorPin = 12; 34 35// Define piezo speaker pin 36const int speakerPin = 11; // Using digital pin 13 for the speaker 37 38 39void setup() { 40 // Initialize the LCD 41 lcd.init(); 42 lcd.backlight(); // Turn on the backlight 43 44 // Set 7-segment display pins as outputs 45 for (int i = 2; i <= 9; i++) { 46 pinMode(i, OUTPUT); 47 } 48 49 // Set oscillator and speaker pins as outputs 50 pinMode(oscillatorPin, OUTPUT); 51 pinMode(speakerPin, OUTPUT); 52} 53 54void loop() { 55 // Read potentiometer value 56 int potValue = analogRead(potPin); 57 58 // Map potentiometer value to frequency range (adjust as needed) 59 int frequency = map(potValue, 0, 1023, 100, 1000); 60 61 // Generate frequency on oscillator and speaker pins 62 tone(oscillatorPin, frequency); 63 tone(speakerPin, frequency); 64 65 // Display frequency on 7-segment display 66 displayFrequencyOnSevenSegment(frequency); 67 68 // Display frequency and pot value on LCD 69 lcd.clear(); 70 lcd.setCursor(0, 0); 71 lcd.print("Freq: "); 72 lcd.print(frequency); 73 lcd.print(" Hz"); 74 75 lcd.setCursor(0, 1); 76 lcd.print("Pot: "); 77 lcd.print(potValue); 78 79 delay(100); // Reduced delay for smoother sound 80} 81 82// Function to display frequency on 7-segment display 83void displayFrequencyOnSevenSegment(int frequency) { 84 int hundredsDigit = frequency / 100; 85 int tensDigit = (frequency / 10) % 10; 86 87 // Display hundreds digit on the first 7-segment display 88 digitalWrite(10, HIGH); // Enable the first digit (common anode) 89 digitalWrite(11, LOW); // Disable the second digit 90 displayDigit(hundredsDigit); 91 delay(5); // Delay to prevent flickering 92 93 // Display tens digit on the second 7-segment display 94 digitalWrite(10, LOW); // Disable the first digit 95 digitalWrite(11, HIGH); // Enable the second digit (common anode) 96 displayDigit(tensDigit); 97 delay(5); // Delay to prevent flickering 98} 99 100void displayDigit(int digit) { 101 // This function sets the appropriate segment pins LOW or HIGH 102 // to display the given digit on a common anode display. 103 switch (digit) { 104 case 0: 105 digitalWrite(segA, LOW); 106 digitalWrite(segB, LOW); 107 digitalWrite(segC, LOW); 108 digitalWrite(segD, LOW); 109 digitalWrite(segE, LOW); 110 digitalWrite(segF, LOW); 111 digitalWrite(segG, HIGH); 112 digitalWrite(segDP, HIGH); // Decimal point off 113 break; 114 case 1: 115 digitalWrite(segA, HIGH); 116 digitalWrite(segB, LOW); 117 digitalWrite(segC, LOW); 118 digitalWrite(segD, HIGH); 119 digitalWrite(segE, HIGH); 120 digitalWrite(segF, HIGH); 121 digitalWrite(segG, HIGH); 122 digitalWrite(segDP, HIGH); // Decimal point off 123 break; 124 case 2: 125 digitalWrite(segA, LOW); 126 digitalWrite(segB, LOW); 127 digitalWrite(segC, HIGH); 128 digitalWrite(segD, LOW); 129 digitalWrite(segE, LOW); 130 digitalWrite(segF, HIGH); 131 digitalWrite(segG, LOW); 132 digitalWrite(segDP, HIGH); // Decimal point off 133 break; 134 case 3: 135 digitalWrite(segA, LOW); 136 digitalWrite(segB, LOW); 137 digitalWrite(segC, LOW); 138 digitalWrite(segD, LOW); 139 digitalWrite(segE, HIGH); 140 digitalWrite(segF, HIGH); 141 digitalWrite(segG, LOW); 142 digitalWrite(segDP, HIGH); // Decimal point off 143 break; 144 case 4: 145 digitalWrite(segA, HIGH); 146 digitalWrite(segB, LOW); 147 digitalWrite(segC, LOW); 148 digitalWrite(segD, HIGH); 149 digitalWrite(segE, HIGH); 150 digitalWrite(segF, LOW); 151 digitalWrite(segG, LOW); 152 digitalWrite(segDP, HIGH); // Decimal point off 153 break; 154 case 5: 155 digitalWrite(segA, LOW); 156 digitalWrite(segB, HIGH); 157 digitalWrite(segC, LOW); 158 digitalWrite(segD, LOW); 159 digitalWrite(segE, HIGH); 160 digitalWrite(segF, LOW); 161 digitalWrite(segG, LOW); 162 digitalWrite(segDP, HIGH); // Decimal point off 163 break; 164 case 6: 165 digitalWrite(segA, LOW); 166 digitalWrite(segB, HIGH); 167 digitalWrite(segC, LOW); 168 digitalWrite(segD, LOW); 169 digitalWrite(segE, LOW); 170 digitalWrite(segF, LOW); 171 digitalWrite(segG, LOW); 172 digitalWrite(segDP, HIGH); // Decimal point off 173 break; 174 case 7: 175 digitalWrite(segA, LOW); 176 digitalWrite(segB, LOW); 177 digitalWrite(segC, LOW); 178 digitalWrite(segD, HIGH); 179 digitalWrite(segE, HIGH); 180 digitalWrite(segF, HIGH); 181 digitalWrite(segG, HIGH); 182 digitalWrite(segDP, HIGH); // Decimal point off 183 break; 184 case 8: 185 digitalWrite(segA, LOW); 186 digitalWrite(segB, LOW); 187 digitalWrite(segC, LOW); 188 digitalWrite(segD, LOW); 189 digitalWrite(segE, LOW); 190 digitalWrite(segF, LOW); 191 digitalWrite(segG, LOW); 192 digitalWrite(segDP, HIGH); // Decimal point off 193 break; 194 case 9: 195 digitalWrite(segA, LOW); 196 digitalWrite(segB, LOW); 197 digitalWrite(segC, LOW); 198 digitalWrite(segD, LOW); 199 digitalWrite(segE, HIGH); 200 digitalWrite(segF, LOW); 201 digitalWrite(segG, LOW); 202 digitalWrite(segDP, HIGH); // Decimal point off 203 break; 204 default: 205 // Turn off all segments for unknown digits 206 for (int i = 2; i <= 9; i++) { 207 digitalWrite(i, HIGH); 208 } 209 break; 210 } 211}
Documentation
Layout
How to connect this circuit
Understanding Voltage and Frequency.png

Comments
Only logged in users can leave comments